Built from branch 'tiddlywiki-com' at commit 7686be7b14cdb3bb6e02ab7bd5a5204a8318942f of https://github.com/Jermolene/TiddlyWiki5 at 2020-10-23 15:24:45 UTC
Содержание
DD MMM YYYY
hide
show
hide
show
show
show
hide
hide
hide
show
hide
hide
no
yes
yes
yes
hide
hide
show
{
    "tiddlers": {
        "$:/Acknowledgements": {
            "title": "$:/Acknowledgements",
            "text": "TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"
        },
        "$:/core/copyright.txt": {
            "title": "$:/core/copyright.txt",
            "type": "text/plain",
            "text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright (c) 2004-2007, Jeremy Ruston\nCopyright (c) 2007-2020, UnaMesa Association\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
        },
        "$:/core/icon": {
            "title": "$:/core/icon",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path d=\"M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\" fill-rule=\"evenodd\"/></svg>"
        },
        "$:/core/images/add-comment": {
            "title": "$:/core/images/add-comment",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-add-comment tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 56H36a8 8 0 100 16h20v20a8 8 0 1016 0V72h20a8 8 0 100-16H72V36a8 8 0 10-16 0v20zm-12.595 58.362c-6.683 7.659-20.297 12.903-36.006 12.903-2.196 0-4.35-.102-6.451-.3 9.652-3.836 17.356-12.24 21.01-22.874C8.516 94.28 0 79.734 0 63.5 0 33.953 28.206 10 63 10s63 23.953 63 53.5S97.794 117 63 117c-6.841 0-13.428-.926-19.595-2.638z\"/></svg>"
        },
        "$:/core/images/advanced-search-button": {
            "title": "$:/core/images/advanced-search-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-advanced-search-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M74.565 87.985A47.776 47.776 0 0148 96C21.49 96 0 74.51 0 48S21.49 0 48 0s48 21.49 48 48c0 9.854-2.97 19.015-8.062 26.636l34.347 34.347a9.443 9.443 0 010 13.36 9.446 9.446 0 01-13.36 0l-34.36-34.358zM48 80c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/><circle cx=\"48\" cy=\"48\" r=\"8\"/><circle cx=\"28\" cy=\"48\" r=\"8\"/><circle cx=\"68\" cy=\"48\" r=\"8\"/></g></svg>"
        },
        "$:/core/images/auto-height": {
            "title": "$:/core/images/auto-height",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-auto-height tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M67.987 114.356l-.029-14.477a4 4 0 00-2.067-3.494l-15.966-8.813-1.933 7.502H79.9c4.222 0 5.564-5.693 1.786-7.58L49.797 71.572 48.01 79.15h31.982c4.217 0 5.564-5.682 1.795-7.575L49.805 55.517l-1.795 7.575h31.982c4.212 0 5.563-5.67 1.805-7.57l-16.034-8.105 2.195 3.57V35.614l9.214 9.213a4 4 0 105.656-5.656l-16-16a4 4 0 00-5.656 0l-16 16a4 4 0 105.656 5.656l9.13-9.13v15.288a4 4 0 002.195 3.57l16.035 8.106 1.804-7.57H48.01c-4.217 0-5.564 5.682-1.795 7.574l31.982 16.059 1.795-7.575H48.01c-4.222 0-5.564 5.693-1.787 7.579l31.89 15.923 1.787-7.578H47.992c-4.133 0-5.552 5.504-1.933 7.501l15.966 8.813-2.067-3.494.029 14.436-9.159-9.158a4 4 0 00-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656l-9.185 9.184zM16 20h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
        },
        "$:/core/images/blank": {
            "title": "$:/core/images/blank",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\"/>"
        },
        "$:/core/images/bold": {
            "title": "$:/core/images/bold",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-bold tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.146 51.81V21.87h26.353c2.51 0 4.93.21 7.26.628 2.33.418 4.392 1.165 6.185 2.24 1.793 1.076 3.227 2.57 4.302 4.482 1.076 1.913 1.614 4.363 1.614 7.35 0 5.379-1.613 9.263-4.84 11.653-3.227 2.39-7.35 3.586-12.37 3.586H41.146zM13 0v128h62.028a65.45 65.45 0 0016.762-2.151c5.438-1.434 10.278-3.645 14.52-6.633 4.244-2.988 7.62-6.842 10.13-11.563 2.51-4.721 3.764-10.308 3.764-16.762 0-8.008-1.942-14.85-5.826-20.527-3.884-5.677-9.77-9.65-17.658-11.921 5.737-2.75 10.069-6.275 12.997-10.577 2.928-4.303 4.392-9.681 4.392-16.135 0-5.976-.986-10.995-2.958-15.059-1.972-4.063-4.75-7.32-8.336-9.77-3.585-2.45-7.888-4.213-12.907-5.289C84.888.538 79.33 0 73.235 0H13zm28.146 106.129V70.992H71.8c6.095 0 10.995 1.404 14.7 4.212 3.705 2.81 5.558 7.5 5.558 14.073 0 3.347-.568 6.096-1.703 8.247-1.136 2.151-2.66 3.854-4.572 5.11-1.912 1.254-4.123 2.15-6.633 2.688-2.51.538-5.139.807-7.888.807H41.146z\"/></svg>"
        },
        "$:/core/images/cancel-button": {
            "title": "$:/core/images/cancel-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 76.314l-16.97 16.97a7.999 7.999 0 01-11.314 0c-3.118-3.118-3.124-8.19 0-11.313L52.686 65l-16.97-16.97a7.999 7.999 0 010-11.314c3.118-3.118 8.19-3.124 11.313 0L64 53.686l16.97-16.97a7.999 7.999 0 0111.314 0c3.118 3.118 3.124 8.19 0 11.313L75.314 65l16.97 16.97a7.999 7.999 0 010 11.314c-3.118 3.118-8.19 3.124-11.313 0L64 76.314zM64 129c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 1 0 29.654 0 65c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 17 64 17 16 38.49 16 65s21.49 48 48 48z\"/></svg>"
        },
        "$:/core/images/chevron-down": {
            "title": "$:/core/images/chevron-down",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-down tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.053 85.456a7.889 7.889 0 01-5.6-2.316L2.473 27.16a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0L64.05 66.344l50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.105 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.317z\"/><path d=\"M64.053 124.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></g></svg>"
        },
        "$:/core/images/chevron-left": {
            "title": "$:/core/images/chevron-left",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M47.544 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L66.656 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.105 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.317-5.595z\"/><path d=\"M8.931 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L28.041 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.104 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.316-5.595z\"/></g></svg>"
        },
        "$:/core/images/chevron-right": {
            "title": "$:/core/images/chevron-right",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-right tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M83.456 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196L64.344 63.95 13.963 13.567a7.92 7.92 0 010-11.195c3.086-3.085 8.105-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.317 5.595z\"/><path d=\"M122.069 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></g></svg>"
        },
        "$:/core/images/chevron-up": {
            "title": "$:/core/images/chevron-up",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-up tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M63.947 44.544c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 63.656l-50.382 50.382a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.317z\"/><path d=\"M63.947 5.931c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 25.041 13.567 75.423a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.104 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.316z\"/></g></svg>"
        },
        "$:/core/images/clone-button": {
            "title": "$:/core/images/clone-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-clone-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M32.265 96v24.002A7.996 7.996 0 0040.263 128h79.74a7.996 7.996 0 007.997-7.998v-79.74a7.996 7.996 0 00-7.998-7.997H96V48h12.859a2.99 2.99 0 012.994 2.994v57.865a2.99 2.99 0 01-2.994 2.994H50.994A2.99 2.99 0 0148 108.859V96H32.265z\"/><path d=\"M40 56h-7.993C27.588 56 24 52.418 24 48c0-4.41 3.585-8 8.007-8H40v-7.993C40 27.588 43.582 24 48 24c4.41 0 8 3.585 8 8.007V40h7.993C68.412 40 72 43.582 72 48c0 4.41-3.585 8-8.007 8H56v7.993C56 68.412 52.418 72 48 72c-4.41 0-8-3.585-8-8.007V56zM8 0C3.58 0 0 3.588 0 8v80c0 4.419 3.588 8 8 8h80c4.419 0 8-3.588 8-8V8c0-4.419-3.588-8-8-8H8zM19 16A2.997 2.997 0 0016 19.001v57.998A2.997 2.997 0 0019.001 80h57.998A2.997 2.997 0 0080 76.999V19.001A2.997 2.997 0 0076.999 16H19.001z\"/></g></svg>"
        },
        "$:/core/images/close-all-button": {
            "title": "$:/core/images/close-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-close-all-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M28 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L16.686 100 2.543 85.856a8 8 0 0111.313-11.313L28 88.686l14.144-14.143a8 8 0 0111.313 11.313L39.314 100l14.143 14.144a8 8 0 01-11.313 11.313L28 111.314zM28 39.314L13.856 53.457A8 8 0 012.543 42.144L16.686 28 2.543 13.856A8 8 0 0113.856 2.543L28 16.686 42.144 2.543a8 8 0 0111.313 11.313L39.314 28l14.143 14.144a8 8 0 01-11.313 11.313L28 39.314zM100 39.314L85.856 53.457a8 8 0 01-11.313-11.313L88.686 28 74.543 13.856A8 8 0 0185.856 2.543L100 16.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 28l14.143 14.144a8 8 0 01-11.313 11.313L100 39.314zM100 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L88.686 100 74.543 85.856a8 8 0 0111.313-11.313L100 88.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 100l14.143 14.144a8 8 0 01-11.313 11.313L100 111.314z\"/></g></svg>"
        },
        "$:/core/images/close-button": {
            "title": "$:/core/images/close-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M65.086 75.41l-50.113 50.113c-3.121 3.121-8.192 3.126-11.316.002-3.118-3.118-3.123-8.19.002-11.316l50.114-50.114L3.659 13.982C.538 10.86.533 5.79 3.657 2.666c3.118-3.118 8.19-3.123 11.316.002l50.113 50.114L115.2 2.668c3.121-3.121 8.192-3.126 11.316-.002 3.118 3.118 3.123 8.19-.002 11.316L76.4 64.095l50.114 50.114c3.121 3.121 3.126 8.192.002 11.316-3.118 3.118-8.19 3.123-11.316-.002L65.086 75.409z\"/></svg>"
        },
        "$:/core/images/close-others-button": {
            "title": "$:/core/images/close-others-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-others-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48zm0-16c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32zm0-16c8.837 0 16-7.163 16-16s-7.163-16-16-16-16 7.163-16 16 7.163 16 16 16z\"/></svg>"
        },
        "$:/core/images/copy-clipboard": {
            "title": "$:/core/images/copy-clipboard",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-copy-clipboard tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"33\" height=\"8\" x=\"40\" y=\"40\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"82\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"54\" rx=\"4\"/><rect width=\"33\" height=\"8\" x=\"40\" y=\"96\" rx=\"4\"/><rect width=\"12\" height=\"8\" x=\"40\" y=\"68\" rx=\"4\"/><path d=\"M40 16H24c-4.419 0-8 3.59-8 8a8.031 8.031 0 000 .01v95.98a8.03 8.03 0 000 .01c0 4.41 3.581 8 8 8h80a7.975 7.975 0 005.652-2.34 7.958 7.958 0 002.348-5.652v-16.016c0-4.414-3.582-7.992-8-7.992-4.41 0-8 3.578-8 7.992V112H32V32h64v8.008C96 44.422 99.582 48 104 48c4.41 0 8-3.578 8-7.992V23.992a7.963 7.963 0 00-2.343-5.651A7.995 7.995 0 00104.001 16H88c0-4.41-3.585-8-8.007-8H48.007C43.588 8 40 11.582 40 16zm4-1.004A4.001 4.001 0 0148 11h32c2.21 0 4 1.797 4 3.996v4.008A4.001 4.001 0 0180 23H48c-2.21 0-4-1.797-4-3.996v-4.008z\"/><rect width=\"66\" height=\"16\" x=\"62\" y=\"64\" rx=\"8\"/><path d=\"M84.657 82.343l-16-16v11.314l16-16a8 8 0 10-11.314-11.314l-16 16a8 8 0 000 11.314l16 16a8 8 0 1011.314-11.314z\"/></g></svg>"
        },
        "$:/core/images/delete-button": {
            "title": "$:/core/images/delete-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(12)\"><rect width=\"105\" height=\"16\" y=\"11\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"28\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"8\" y=\"16\" rx=\"8\"/><rect width=\"88\" height=\"16\" x=\"8\" y=\"112\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"80\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"56\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"32\" y=\"16\" rx=\"8\"/></g></svg>"
        },
        "$:/core/images/done-button": {
            "title": "$:/core/images/done-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M42.26 111.032c-2.051.001-4.103-.78-5.668-2.345L2.662 74.758a8 8 0 01-.005-11.32c3.118-3.117 8.192-3.12 11.32.007l28.278 28.278 72.124-72.124a8.002 8.002 0 0111.314-.001c3.118 3.118 3.124 8.19 0 11.315l-77.78 77.78a7.978 7.978 0 01-5.658 2.343z\"/></svg>"
        },
        "$:/core/images/down-arrow": {
            "title": "$:/core/images/down-arrow",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.177 100.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.086 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></svg>"
        },
        "$:/core/images/download-button": {
            "title": "$:/core/images/download-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-download-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\" class=\"tc-image-download-button-ring\"/><path d=\"M34.35 66.43l26.892 27.205a4.57 4.57 0 006.516 0L94.65 66.43a4.7 4.7 0 000-6.593 4.581 4.581 0 00-3.258-1.365h-8.46c-2.545 0-4.608-2.087-4.608-4.661v-15.15c0-2.575-2.063-4.662-4.608-4.662H55.284c-2.545 0-4.608 2.087-4.608 4.662v15.15c0 2.574-2.063 4.661-4.608 4.661h-8.46c-2.545 0-4.608 2.087-4.608 4.662a4.69 4.69 0 001.35 3.296z\"/></g></svg>"
        },
        "$:/core/images/edit-button": {
            "title": "$:/core/images/edit-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M95.627 10.059l-5.656 5.657 11.313 11.313 5.657-5.656-11.314-11.314zm5.657-5.657l1.966-1.966c3.123-3.122 8.194-3.129 11.319-.005 3.117 3.118 3.122 8.192-.005 11.32l-1.966 1.965-11.314-11.314zm-16.97 16.97l-60.25 60.25a8.12 8.12 0 00-.322.342c-.1.087-.198.179-.295.275-5.735 5.735-10.702 22.016-10.702 22.016s16.405-5.09 22.016-10.702c.095-.096.186-.193.272-.292a8.12 8.12 0 00.345-.325l60.25-60.25-11.314-11.313zM35.171 124.19c6.788-.577 13.898-2.272 23.689-5.348 1.825-.573 3.57-1.136 6.336-2.04 16-5.226 21.877-6.807 28.745-7.146 8.358-.413 13.854 2.13 17.58 8.699a4 4 0 006.959-3.946c-5.334-9.406-13.745-13.296-24.933-12.744-7.875.39-14.057 2.052-30.835 7.533-2.739.894-4.46 1.45-6.25 2.012-19.46 6.112-30.77 7.072-39.597 1.747a4 4 0 10-4.132 6.85c6.333 3.82 13.754 5.12 22.438 4.383z\"/></g></svg>"
        },
        "$:/core/images/erase": {
            "title": "$:/core/images/erase",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-erase tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.087 127.996l63.015-63.015c6.535-6.535 6.528-17.115-.003-23.646L99.466 17.702c-6.539-6.538-17.117-6.532-23.646-.003L4.898 88.62c-6.535 6.534-6.528 17.115.003 23.646l15.73 15.73h39.456zm-34.95-7.313l-14.324-14.325c-3.267-3.268-3.268-8.564-.008-11.824L46.269 59.07l35.462 35.462-26.15 26.15H25.137z\"/></svg>"
        },
        "$:/core/images/excise": {
            "title": "$:/core/images/excise",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-excise tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 107.314l-2.343 2.343a8 8 0 11-11.314-11.314l16-16a8 8 0 0111.314 0l16 16a8 8 0 11-11.314 11.314L72 107.314v14.284c0 3.536-3.582 6.402-8 6.402s-8-2.866-8-6.402v-14.284zM0 40.007C0 35.585 3.59 32 8 32c4.418 0 8 3.588 8 8.007v31.986C16 76.415 12.41 80 8 80c-4.418 0-8-3.588-8-8.007V40.007zm32 0C32 35.585 35.59 32 40 32c4.418 0 8 3.588 8 8.007v31.986C48 76.415 44.41 80 40 80c-4.418 0-8-3.588-8-8.007V40.007zm48 0C80 35.585 83.59 32 88 32c4.418 0 8 3.588 8 8.007v31.986C96 76.415 92.41 80 88 80c-4.418 0-8-3.588-8-8.007V40.007zm-24-32C56 3.585 59.59 0 64 0c4.418 0 8 3.588 8 8.007v31.986C72 44.415 68.41 48 64 48c-4.418 0-8-3.588-8-8.007V8.007zm56 32c0-4.422 3.59-8.007 8-8.007 4.418 0 8 3.588 8 8.007v31.986c0 4.422-3.59 8.007-8 8.007-4.418 0-8-3.588-8-8.007V40.007z\"/></svg>"
        },
        "$:/core/images/export-button": {
            "title": "$:/core/images/export-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-export-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.003 128H119.993a7.984 7.984 0 005.664-2.349v.007A7.975 7.975 0 00128 120V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v56H16V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v64c0 4.418 3.59 8 8 8h.003zm48.62-100.689l-8.965 8.966c-3.125 3.125-8.195 3.13-11.319.005-3.118-3.118-3.122-8.192.005-11.319L58.962 2.346A7.986 7.986 0 0164.625 0l-.006.002c2.05-.001 4.102.78 5.666 2.344l22.618 22.617c3.124 3.125 3.129 8.195.005 11.319-3.118 3.118-8.192 3.122-11.319-.005l-8.965-8.966v61.256c0 4.411-3.582 8-8 8-4.41 0-8-3.582-8-8V27.311z\"/></svg>"
        },
        "$:/core/images/file": {
            "title": "$:/core/images/file",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-file tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M111.968 30.5H112V120a8 8 0 01-8 8H24a8 8 0 01-8-8V8a8 8 0 018-8h57v.02a7.978 7.978 0 015.998 2.337l22.627 22.627a7.975 7.975 0 012.343 5.516zM81 8H24v112h80V30.5H89c-4.418 0-8-3.578-8-8V8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"68\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"84\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"100\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/></svg>"
        },
        "$:/core/images/fixed-height": {
            "title": "$:/core/images/fixed-height",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fixed-height tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60 35.657l-9.172 9.171a4 4 0 11-5.656-5.656l16-16a4 4 0 015.656 0l16 16a4 4 0 01-5.656 5.656L68 35.657v57.686l9.172-9.171a4 4 0 115.656 5.656l-16 16a4 4 0 01-5.656 0l-16-16a4 4 0 115.656-5.656L60 93.343V35.657zM16 116h96a4 4 0 100-8H16a4 4 0 100 8zm0-96h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
        },
        "$:/core/images/fold-all-button": {
            "title": "$:/core/images/fold-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M64.03 20.004c-2.05 0-4.102.78-5.667 2.344L35.746 44.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 22.348a7.986 7.986 0 00-5.663-2.346zM64.03 85.002c-2.05-.001-4.102.78-5.667 2.344l-22.617 22.617c-3.125 3.125-3.13 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.966 16.966 16.966c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.192-.005-11.319L69.687 87.346A7.986 7.986 0 0064.024 85z\"/></g></svg>"
        },
        "$:/core/images/fold-button": {
            "title": "$:/core/images/fold-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M64.03 25.004c-2.05 0-4.102.78-5.667 2.344L35.746 49.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 27.348a7.986 7.986 0 00-5.663-2.346zM64.005 67.379c-2.05 0-4.102.78-5.666 2.344L35.722 92.34c-3.125 3.125-3.13 8.195-.006 11.32 3.118 3.117 8.192 3.121 11.32-.006L64 86.69l16.965 16.965c3.125 3.125 8.195 3.13 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L69.663 69.723A7.986 7.986 0 0064 67.377z\"/></g></svg>"
        },
        "$:/core/images/fold-others-button": {
            "title": "$:/core/images/fold-others-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-others tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" y=\"56.031\" rx=\"8\"/><path d=\"M86.632 79.976c-2.05 0-4.102.78-5.666 2.345L64 99.286 47.034 82.321a7.986 7.986 0 00-5.662-2.346l.005.001c-2.05 0-4.102.78-5.666 2.345l-22.618 22.617c-3.124 3.125-3.129 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.966-16.966 16.965 16.966a7.986 7.986 0 005.663 2.346l-.005-.002c2.05 0 4.102-.78 5.666-2.344l16.965-16.966 16.966 16.966c3.125 3.124 8.194 3.129 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L92.289 82.321a7.986 7.986 0 00-5.663-2.346zM86.7 48.024c-2.05 0-4.102-.78-5.666-2.345L64.07 28.714 47.103 45.679a7.986 7.986 0 01-5.663 2.346l.005-.001c-2.05 0-4.101-.78-5.666-2.345L13.162 23.062c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L41.44 28.714l16.966-16.966a7.986 7.986 0 015.662-2.346l-.005.002c2.05 0 4.102.78 5.666 2.344l16.966 16.966 16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L92.358 45.679a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
        },
        "$:/core/images/folder": {
            "title": "$:/core/images/folder",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-folder tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.694 128H8C3.58 128 0 124.414 0 119.996V48.004C0 43.584 3.584 40 7.999 40H16v-8c0-4.418 3.578-8 8-8h32a8 8 0 018 8v8h40.001c4.418 0 7.999 3.586 7.999 8.004V59.83l-8-.082v-7.749A4 4 0 0099.997 48H56V36c0-2.21-1.793-4-4.004-4H28.004A4 4 0 0024 36v12H12.003A4 4 0 008 52v64a4 4 0 004.003 4h46.76l-3.069 8z\"/><path d=\"M23.873 55.5h96.003c4.417 0 7.004 4.053 5.774 9.063l-13.344 54.374c-1.228 5.005-5.808 9.063-10.223 9.063H6.08c-4.417 0-7.003-4.053-5.774-9.063L13.65 64.563c1.228-5.005 5.808-9.063 10.223-9.063zm1.78 8.5h87.994c2.211 0 3.504 2.093 2.891 4.666l-11.12 46.668c-.614 2.577-2.902 4.666-5.115 4.666H12.31c-2.211 0-3.504-2.093-2.891-4.666l11.12-46.668C21.152 66.09 23.44 64 25.653 64z\"/></g></svg>"
        },
        "$:/core/images/full-screen-button": {
            "title": "$:/core/images/full-screen-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-full-screen-button tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 8a8 8 0 018-8h32a8 8 0 110 16H16v24a8 8 0 11-16 0V8zM128 120a8 8 0 01-8 8H88a8 8 0 110-16h24V88a8 8 0 1116 0v32zM8 128a8 8 0 01-8-8V88a8 8 0 1116 0v24h24a8 8 0 110 16H8zM120 0a8 8 0 018 8v32a8 8 0 11-16 0V16H88a8 8 0 110-16h32z\"/></svg>"
        },
        "$:/core/images/github": {
            "title": "$:/core/images/github",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-github tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M63.938 1.607c-35.336 0-63.994 28.69-63.994 64.084 0 28.312 18.336 52.329 43.768 60.802 3.202.59 4.37-1.388 4.37-3.088 0-1.518-.056-5.55-.087-10.897-17.802 3.871-21.558-8.591-21.558-8.591-2.911-7.404-7.108-9.375-7.108-9.375-5.81-3.973.44-3.895.44-3.895 6.424.453 9.803 6.606 9.803 6.606 5.709 9.791 14.981 6.963 18.627 5.322.582-4.138 2.236-6.963 4.063-8.564-14.211-1.617-29.153-7.117-29.153-31.672 0-6.995 2.495-12.718 6.589-17.195-.66-1.621-2.856-8.14.629-16.96 0 0 5.37-1.722 17.597 6.57 5.104-1.424 10.58-2.132 16.022-2.16 5.438.028 10.91.736 16.022 2.16 12.22-8.292 17.582-6.57 17.582-6.57 3.493 8.82 1.297 15.339.64 16.96 4.102 4.477 6.578 10.2 6.578 17.195 0 24.618-14.966 30.035-29.22 31.62 2.295 1.98 4.342 5.89 4.342 11.87 0 8.564-.079 15.476-.079 17.576 0 1.715 1.155 3.71 4.4 3.084 25.413-8.493 43.733-32.494 43.733-60.798 0-35.394-28.657-64.084-64.006-64.084\"/></svg>"
        },
        "$:/core/images/gitter": {
            "title": "$:/core/images/gitter",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-gitter tc-image-button\" viewBox=\"0 0 18 25\"><path d=\"M15 5h2v10h-2zM10 5h2v20h-2zM5 5h2v20H5zM0 0h2v15H0z\"/></svg>"
        },
        "$:/core/images/globe": {
            "title": "$:/core/images/globe",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-globe tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M72.811 37.128v2.554c0 2.196.978 6.881 0 8.832-1.466 2.928-4.65 3.54-6.394 5.867-1.182 1.577-4.618 10.601-3.69 12.92 3.969 9.922 11.534 3.187 17.962 9.293.864.821 2.887 2.273 3.296 3.296 3.29 8.223-7.576 15.009 3.757 26.3 1.245 1.24 3.813-3.817 4.079-4.614.852-2.563 6.725-5.45 9.088-7.053 2.02-1.37 4.873-2.667 6.328-4.745 2.27-3.244 1.48-7.514 3.098-10.745 2.139-4.274 3.828-9.635 5.998-13.966 3.898-7.781 4.721 2.093 5.067 2.439.358.357 1.011 0 1.517 0 .094 0 1.447.099 1.516 0 .65-.935-1.043-17.92-1.318-19.297-1.404-7.01-6.944-15.781-11.865-20.5-6.274-6.015-7.09-16.197-18.259-14.954-.204.022-5.084 10.148-7.777 13.512-3.728 4.657-2.47-4.153-6.526-4.153-.081 0-1.183-.103-1.253 0-.586.88-1.44 3.896-2.306 4.417-.265.16-1.722-.239-1.846 0-2.243 4.3 8.256 2.212 5.792 7.952-2.352 5.481-6.328-1.997-6.328 8.56M44.467 7.01c9.685 6.13.682 12.198 2.694 16.215 1.655 3.303 4.241 5.395 1.714 9.814-2.063 3.608-6.87 3.966-9.623 6.723-3.04 3.044-5.464 8.94-6.79 12.911-1.617 4.843 14.547 6.866 12.063 11.008-1.386 2.311-6.746 1.466-8.437.198-1.165-.873-3.593-.546-4.417-1.78-2.613-3.915-2.26-8.023-3.625-12.128-.938-2.822-6.313-2.12-7.844-.593-.523.522-.33 1.792-.33 2.505 0 5.285 7.12 3.316 7.12 6.46 0 14.636 3.927 6.534 11.14 11.336 10.036 6.683 7.844 7.303 14.946 14.404 3.673 3.673 7.741 3.686 9.425 9.294 1.602 5.331-9.327 5.339-11.716 7.448-1.123.991-2.813 4.146-4.219 4.615-1.792.598-3.234.496-4.944 1.78-2.427 1.82-3.9 4.932-4.02 4.81-2.148-2.147-3.52-15.479-3.89-18.257-.588-4.42-5.59-5.54-6.986-9.03-1.57-3.927 1.524-9.52-1.129-13.761-6.52-10.424-11.821-14.5-15.35-26.292-.942-3.148 3.342-6.529 4.877-8.833 1.877-2.816 2.662-5.854 4.746-8.635C22.147 24.19 40.855 9.461 43.857 8.635l.61-1.625z\"/><path d=\"M64 126c34.242 0 62-27.758 62-62 0-34.242-27.758-62-62-62C29.758 2 2 29.758 2 64c0 34.242 27.758 62 62 62zm0-6c30.928 0 56-25.072 56-56S94.928 8 64 8 8 33.072 8 64s25.072 56 56 56z\"/></g></svg>"
        },
        "$:/core/images/heading-1": {
            "title": "$:/core/images/heading-1",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-1 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M14 30h13.25v30.104H61.7V30h13.25v75.684H61.7V71.552H27.25v34.132H14V30zm70.335 13.78c2.544 0 5.017-.212 7.42-.636 2.403-.424 4.576-1.13 6.52-2.12 1.942-.99 3.603-2.261 4.981-3.816 1.378-1.555 2.28-3.463 2.703-5.724h9.858v74.2h-13.25V53.32H84.335v-9.54z\"/></svg>"
        },
        "$:/core/images/heading-2": {
            "title": "$:/core/images/heading-2",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-2 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm119.52 75.684H74.85c.07-6.148 1.555-11.519 4.452-16.112 2.897-4.593 6.855-8.586 11.872-11.978a133.725 133.725 0 017.526-5.141 59.6 59.6 0 007.208-5.353c2.19-1.908 3.993-3.975 5.406-6.201 1.413-2.226 2.155-4.788 2.226-7.685 0-1.343-.159-2.774-.477-4.293a11.357 11.357 0 00-1.855-4.24c-.919-1.307-2.19-2.403-3.816-3.286-1.625-.883-3.745-1.325-6.36-1.325-2.403 0-4.399.477-5.989 1.431-1.59.954-2.862 2.261-3.816 3.922-.954 1.66-1.66 3.622-2.12 5.883-.46 2.261-.724 4.7-.795 7.314H76.23c0-4.099.548-7.897 1.643-11.395 1.095-3.498 2.738-6.519 4.93-9.063 2.19-2.544 4.857-4.54 8.002-5.989C93.95 30.724 97.606 30 101.775 30c4.523 0 8.303.742 11.342 2.226 3.039 1.484 5.494 3.357 7.367 5.618 1.873 2.261 3.198 4.717 3.975 7.367.777 2.65 1.166 5.176 1.166 7.579 0 2.968-.46 5.653-1.378 8.056a25.942 25.942 0 01-3.71 6.625 37.5 37.5 0 01-5.3 5.565 79.468 79.468 0 01-6.148 4.77 165.627 165.627 0 01-6.36 4.24 94.28 94.28 0 00-5.883 4.028c-1.802 1.343-3.374 2.738-4.717 4.187-1.343 1.449-2.261 2.986-2.756 4.611h36.146v10.812z\"/></svg>"
        },
        "$:/core/images/heading-3": {
            "title": "$:/core/images/heading-3",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-3 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm88.885 32.224c1.979.07 3.957-.07 5.936-.424 1.979-.353 3.745-.972 5.3-1.855a10.365 10.365 0 003.763-3.657c.954-1.555 1.431-3.463 1.431-5.724 0-3.18-1.078-5.724-3.233-7.632-2.155-1.908-4.929-2.862-8.32-2.862-2.12 0-3.958.424-5.513 1.272a11.318 11.318 0 00-3.869 3.445c-1.025 1.449-1.784 3.074-2.279 4.876a18.335 18.335 0 00-.636 5.565H75.381c.141-3.604.813-6.943 2.014-10.017 1.201-3.074 2.844-5.742 4.93-8.003 2.084-2.261 4.61-4.028 7.578-5.3C92.871 30.636 96.228 30 99.973 30a29.2 29.2 0 018.533 1.272c2.791.848 5.3 2.085 7.526 3.71s4.01 3.692 5.353 6.201c1.343 2.509 2.014 5.388 2.014 8.639 0 3.745-.848 7.014-2.544 9.805-1.696 2.791-4.346 4.823-7.95 6.095v.212c4.24.848 7.544 2.95 9.911 6.307s3.551 7.438 3.551 12.243c0 3.533-.707 6.696-2.12 9.487a21.538 21.538 0 01-5.724 7.102c-2.403 1.943-5.194 3.445-8.374 4.505-3.18 1.06-6.537 1.59-10.07 1.59-4.31 0-8.074-.618-11.289-1.855s-5.9-2.986-8.056-5.247c-2.155-2.261-3.798-4.982-4.929-8.162-1.13-3.18-1.731-6.713-1.802-10.6h12.084c-.141 4.523.972 8.286 3.34 11.289 2.366 3.003 5.917 4.505 10.652 4.505 4.028 0 7.402-1.148 10.123-3.445 2.72-2.297 4.081-5.565 4.081-9.805 0-2.897-.565-5.194-1.696-6.89a10.97 10.97 0 00-4.452-3.869c-1.837-.883-3.904-1.431-6.2-1.643a58.067 58.067 0 00-7.05-.212v-9.01z\"/></svg>"
        },
        "$:/core/images/heading-4": {
            "title": "$:/core/images/heading-4",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-4 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8 30h13.25v30.104H55.7V30h13.25v75.684H55.7V71.552H21.25v34.132H8V30zm76.59 48.548h22.471V45.9h-.212L84.59 78.548zm43.46 9.54h-9.54v17.596H107.06V88.088h-31.8V76.11l31.8-44.626h11.448v47.064h9.54v9.54z\"/></svg>"
        },
        "$:/core/images/heading-5": {
            "title": "$:/core/images/heading-5",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-5 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm77.755 1.484h38.372v10.812H92.765L88.95 61.164l.212.212c1.625-1.837 3.692-3.233 6.201-4.187 2.509-.954 5-1.431 7.473-1.431 3.675 0 6.96.618 9.858 1.855 2.897 1.237 5.335 2.968 7.314 5.194s3.48 4.858 4.505 7.897c1.025 3.039 1.537 6.325 1.537 9.858 0 2.968-.477 6.024-1.43 9.169a25.161 25.161 0 01-4.559 8.586c-2.085 2.58-4.752 4.7-8.003 6.36-3.25 1.66-7.137 2.491-11.66 2.491-3.604 0-6.943-.477-10.017-1.431-3.074-.954-5.777-2.385-8.109-4.293-2.332-1.908-4.187-4.258-5.565-7.049-1.378-2.791-2.138-6.06-2.279-9.805h12.084c.353 4.028 1.731 7.12 4.134 9.275 2.403 2.155 5.583 3.233 9.54 3.233 2.544 0 4.7-.424 6.466-1.272 1.767-.848 3.198-2.014 4.293-3.498 1.095-1.484 1.873-3.215 2.332-5.194.46-1.979.69-4.099.69-6.36 0-2.05-.284-4.01-.849-5.883-.565-1.873-1.413-3.516-2.544-4.929-1.13-1.413-2.597-2.544-4.399-3.392-1.802-.848-3.904-1.272-6.307-1.272-2.544 0-4.929.477-7.155 1.431-2.226.954-3.834 2.738-4.823 5.353H75.805l7.95-40.598z\"/></svg>"
        },
        "$:/core/images/heading-6": {
            "title": "$:/core/images/heading-6",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-6 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm106.587 20.246c-.283-3.039-1.36-5.494-3.233-7.367-1.873-1.873-4.399-2.809-7.579-2.809-2.19 0-4.08.406-5.67 1.219a12.435 12.435 0 00-4.029 3.233c-1.095 1.343-1.979 2.88-2.65 4.611a37.696 37.696 0 00-1.643 5.459 46.08 46.08 0 00-.9 5.671 722.213 722.213 0 00-.478 5.247l.212.212c1.625-2.968 3.87-5.176 6.731-6.625 2.862-1.449 5.954-2.173 9.275-2.173 3.675 0 6.96.636 9.858 1.908 2.897 1.272 5.353 3.021 7.367 5.247 2.014 2.226 3.551 4.858 4.611 7.897 1.06 3.039 1.59 6.325 1.59 9.858 0 3.604-.583 6.943-1.749 10.017-1.166 3.074-2.844 5.76-5.035 8.056-2.19 2.297-4.805 4.081-7.844 5.353-3.039 1.272-6.395 1.908-10.07 1.908-5.441 0-9.91-1.007-13.409-3.021-3.498-2.014-6.254-4.77-8.268-8.268-2.014-3.498-3.41-7.597-4.187-12.296-.777-4.7-1.166-9.77-1.166-15.211 0-4.452.477-8.94 1.431-13.462.954-4.523 2.526-8.639 4.717-12.349 2.19-3.71 5.07-6.731 8.64-9.063C92.676 31.166 97.075 30 102.304 30c2.968 0 5.76.495 8.374 1.484 2.615.99 4.93 2.367 6.943 4.134 2.014 1.767 3.657 3.887 4.93 6.36 1.271 2.473 1.978 5.23 2.12 8.268h-12.085zm-11.66 46.852c2.19 0 4.099-.442 5.724-1.325a12.869 12.869 0 004.081-3.445c1.095-1.413 1.908-3.056 2.438-4.929.53-1.873.795-3.798.795-5.777s-.265-3.887-.795-5.724c-.53-1.837-1.343-3.445-2.438-4.823-1.095-1.378-2.456-2.491-4.08-3.339-1.626-.848-3.534-1.272-5.725-1.272-2.19 0-4.116.406-5.777 1.219-1.66.813-3.056 1.908-4.187 3.286-1.13 1.378-1.979 2.986-2.544 4.823-.565 1.837-.848 3.78-.848 5.83 0 2.05.283 3.993.848 5.83.565 1.837 1.413 3.48 2.544 4.929a12.39 12.39 0 004.187 3.445c1.66.848 3.586 1.272 5.777 1.272z\"/></svg>"
        },
        "$:/core/images/help": {
            "title": "$:/core/images/help",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-help tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M36.055 111.441c-5.24 4.396-15.168 7.362-26.555 7.362-1.635 0-3.24-.06-4.806-.179 7.919-2.64 14.062-8.6 16.367-16.014C8.747 92.845 1.05 78.936 1.05 63.5c0-29.547 28.206-53.5 63-53.5s63 23.953 63 53.5-28.206 53.5-63 53.5c-10.055 0-19.56-2-27.994-5.559zm35.35-33.843a536.471 536.471 0 00.018-4.682 199.02 199.02 0 00-.023-3.042c.008-1.357.595-2.087 3.727-4.235.112-.077 1.085-.74 1.386-.948 3.093-2.133 5.022-3.786 6.762-6.187 2.34-3.228 3.558-7.077 3.558-11.649 0-13.292-9.86-21.952-21.455-21.952-11.103 0-22.499 9.609-24.066 22.295a6.023 6.023 0 1011.956 1.477c.806-6.527 6.972-11.726 12.11-11.726 5.265 0 9.408 3.64 9.408 9.906 0 3.634-1.1 5.153-5.111 7.919l-1.362.93c-2.682 1.84-4.227 3.1-5.7 4.931-2.109 2.62-3.242 5.717-3.258 9.314.013.892.02 1.86.022 2.981a470.766 470.766 0 01-.022 4.943 6.023 6.023 0 1012.046.12l.003-.395zm-6.027 24.499a7.529 7.529 0 100-15.058 7.529 7.529 0 000 15.058z\"/></svg>"
        },
        "$:/core/images/home-button": {
            "title": "$:/core/images/home-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112.985 119.502c.01-.165.015-.331.015-.499V67.568c3.137 2.948 8.076 2.884 11.134-.174a7.999 7.999 0 00-.002-11.316L70.396 2.343A7.978 7.978 0 0064.734 0a7.957 7.957 0 00-5.656 2.343L33 28.42V8.007C33 3.585 29.41 0 25 0c-4.418 0-8 3.59-8 8.007V44.42L5.342 56.078c-3.125 3.125-3.12 8.198-.002 11.316a7.999 7.999 0 0011.316-.003l.344-.343v52.945a8.11 8.11 0 000 .007c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8a8.11 8.11 0 00-.015-.498zM97 112V51.574L64.737 19.31 33 51.048V112h64z\"/></svg>"
        },
        "$:/core/images/import-button": {
            "title": "$:/core/images/import-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-import-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M114.832 60.436s3.235-3.27 6.921.417c3.686 3.686.231 7.14.231 7.14l-42.153 42.92s-30.765 32.367-58.798 4.333C-7 87.213 24.59 55.623 24.59 55.623L67.363 12.85s22.725-24.6 43.587-3.738c20.862 20.862-3.96 43.09-3.96 43.09l-35.04 35.04S49.903 112.546 36.426 99.07c-13.476-13.477 11.83-35.523 11.83-35.523l35.04-35.04s3.902-3.902 7.78-.023c3.879 3.878.118 7.921.118 7.921l-35.04 35.04s-13.212 13.212-8.872 17.551c4.34 4.34 16.77-9.653 16.77-9.653l35.04-35.04s16.668-14.598 3.966-27.3c-13.893-13.892-27.565 3.702-27.565 3.702l-42.91 42.91s-23.698 23.698-3.658 43.738 43.012-4.385 43.012-4.385l42.895-42.533z\"/></svg>"
        },
        "$:/core/images/info-button": {
            "title": "$:/core/images/info-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(.05)\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\"/><circle cx=\"64\" cy=\"32\" r=\"8\"/><rect width=\"16\" height=\"56\" x=\"56\" y=\"48\" rx=\"8\"/></g></svg>"
        },
        "$:/core/images/italic": {
            "title": "$:/core/images/italic",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-italic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M66.711 0h22.41L62.408 128H40z\"/></svg>"
        },
        "$:/core/images/left-arrow": {
            "title": "$:/core/images/left-arrow",
            "created": "20150315234410875",
            "modified": "20150315235324760",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-left-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 64.177c0-2.026.771-4.054 2.317-5.6l55.98-55.98a7.92 7.92 0 0111.195.001c3.086 3.085 3.092 8.104.001 11.195L19.111 64.175l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.086-8.105 3.092-11.196.001l-55.98-55.98A7.892 7.892 0 010 64.177z\"/></svg>"
        },
        "$:/core/images/line-width": {
            "title": "$:/core/images/line-width",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-line-width tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M16 18h96a2 2 0 000-4H16a2 2 0 100 4zm0 17h96a4 4 0 100-8H16a4 4 0 100 8zm0 21h96a6 6 0 000-12H16a6 6 0 100 12zm0 29h96c5.523 0 10-4.477 10-10s-4.477-10-10-10H16c-5.523 0-10 4.477-10 10s4.477 10 10 10zm0 43h96c8.837 0 16-7.163 16-16s-7.163-16-16-16H16c-8.837 0-16 7.163-16 16s7.163 16 16 16z\"/></svg>"
        },
        "$:/core/images/link": {
            "title": "$:/core/images/link",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-link tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M42.263 69.38a31.919 31.919 0 006.841 10.13c12.5 12.5 32.758 12.496 45.255 0l22.627-22.628c12.502-12.501 12.497-32.758 0-45.255-12.5-12.5-32.758-12.496-45.254 0L49.104 34.255a32.333 32.333 0 00-2.666 3.019 36.156 36.156 0 0121.94.334l14.663-14.663c6.25-6.25 16.382-6.254 22.632-.004 6.248 6.249 6.254 16.373-.004 22.631l-22.62 22.62c-6.25 6.25-16.381 6.254-22.631.004a15.93 15.93 0 01-4.428-8.433 11.948 11.948 0 00-7.59 3.48l-6.137 6.137z\"/><path d=\"M86.35 59.234a31.919 31.919 0 00-6.84-10.13c-12.5-12.5-32.758-12.497-45.255 0L11.627 71.732c-12.501 12.5-12.496 32.758 0 45.254 12.5 12.5 32.758 12.497 45.255 0L79.51 94.36a32.333 32.333 0 002.665-3.02 36.156 36.156 0 01-21.94-.333l-14.663 14.663c-6.25 6.25-16.381 6.253-22.63.004-6.25-6.249-6.255-16.374.003-22.632l22.62-22.62c6.25-6.25 16.381-6.253 22.631-.003a15.93 15.93 0 014.428 8.432 11.948 11.948 0 007.59-3.48l6.137-6.136z\"/></g></svg>"
        },
        "$:/core/images/linkify": {
            "title": "$:/core/images/linkify",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-linkify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M17.031 31.919H9.048V96.85h7.983v6.92H0V25h17.031v6.919zm24.66 0h-7.983V96.85h7.983v6.92H24.66V25h17.03v6.919zM67.77 56.422l11.975-3.903 2.306 7.096-12.063 3.903 7.628 10.379-6.12 4.435-7.63-10.467-7.45 10.2-5.943-4.523L58.1 63.518 45.95 59.35l2.306-7.096 12.064 4.17V43.825h7.45v12.596zM86.31 96.85h7.982V31.92H86.31V25h17.031v78.77H86.31v-6.92zm24.659 0h7.983V31.92h-7.983V25H128v78.77h-17.031v-6.92z\"/></svg>"
        },
        "$:/core/images/list-bullet": {
            "title": "$:/core/images/list-bullet",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-bullet tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M11.636 40.273c6.427 0 11.637-5.21 11.637-11.637C23.273 22.21 18.063 17 11.636 17 5.21 17 0 22.21 0 28.636c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.637 0-6.426-5.21-11.636-11.637-11.636C5.21 51.91 0 57.12 0 63.545c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.636 0-6.427-5.21-11.637-11.637-11.637C5.21 86.818 0 92.028 0 98.455c0 6.426 5.21 11.636 11.636 11.636zM34.91 22.818H128v11.637H34.91V22.818zm0 34.91H128v11.636H34.91V57.727zm0 34.908H128v11.637H34.91V92.636z\"/></svg>"
        },
        "$:/core/images/list-number": {
            "title": "$:/core/images/list-number",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-number tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M33.84 22.356H128v11.77H33.84v-11.77zm0 35.31H128v11.77H33.84v-11.77zm0 35.311H128v11.77H33.84v-11.77zM.38 42.631v-2.223h.998c.826 0 1.445-.14 1.858-.42.413-.28.619-.948.619-2.002V22.769c0-1.442-.193-2.336-.58-2.683-.385-.347-1.477-.52-3.275-.52v-2.143c3.502-.147 6.252-.955 8.25-2.423h2.117v22.865c0 .921.15 1.575.449 1.963.3.387.949.58 1.948.58h.998v2.223H.38zm-.3 35.356v-1.902c7.19-6.554 10.786-12.58 10.786-18.08 0-1.562-.326-2.81-.979-3.744-.652-.934-1.524-1.402-2.616-1.402-.893 0-1.655.317-2.287.952-.633.634-.95 1.364-.95 2.192 0 .974.247 1.829.74 2.563.106.16.16.28.16.36 0 .147-.16.28-.48.4-.213.08-.752.308-1.618.681-.839.374-1.358.561-1.558.561-.24 0-.512-.37-.819-1.111A6.2 6.2 0 010 57.064c0-1.949.849-3.544 2.547-4.785 1.698-1.242 3.798-1.862 6.302-1.862 2.463 0 4.53.67 6.202 2.012 1.67 1.341 2.506 3.093 2.506 5.256a8.644 8.644 0 01-.849 3.724c-.566 1.201-1.92 3.053-4.064 5.556a165.471 165.471 0 01-6.272 6.938h11.445l-1.019 5.726h-2.117c.08-.28.12-.534.12-.76 0-.388-.1-.631-.3-.731-.2-.1-.599-.15-1.198-.15H.08zm12.124 19.207c1.745.04 3.236.637 4.474 1.792 1.239 1.154 1.858 2.773 1.858 4.855 0 2.99-1.132 5.393-3.396 7.208-2.263 1.815-5 2.723-8.209 2.723-2.01 0-3.669-.384-4.974-1.151C.652 111.853 0 110.849 0 109.607c0-.774.27-1.398.809-1.872.54-.474 1.128-.71 1.768-.71.639 0 1.162.2 1.568.6.406.4.782 1.055 1.128 1.962.466 1.268 1.239 1.902 2.317 1.902 1.265 0 2.287-.477 3.066-1.431.78-.955 1.169-2.686 1.169-5.196 0-1.709-.12-3.023-.36-3.944-.24-.921-.792-1.382-1.658-1.382-.586 0-1.185.307-1.797.921-.493.494-.932.741-1.319.741-.333 0-.602-.147-.809-.44-.206-.294-.31-.574-.31-.841 0-.32.104-.594.31-.821.207-.227.69-.594 1.449-1.102 2.876-1.922 4.314-4.017 4.314-6.287 0-1.188-.306-2.092-.919-2.713a3.001 3.001 0 00-2.217-.93c-.799 0-1.525.263-2.177.79-.653.528-.979 1.158-.979 1.892 0 .641.253 1.235.76 1.782.172.2.259.367.259.5 0 .121-.57.428-1.708.922-1.139.494-1.854.74-2.147.74-.413 0-.75-.333-1.009-1-.26-.668-.39-1.282-.39-1.842 0-1.749.93-3.224 2.787-4.425 1.858-1.202 3.965-1.802 6.322-1.802 2.064 0 3.851.447 5.363 1.341 1.511.895 2.267 2.116 2.267 3.664 0 1.362-.57 2.623-1.708 3.784a13.387 13.387 0 01-3.945 2.784z\"/></svg>"
        },
        "$:/core/images/list": {
            "title": "$:/core/images/list",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M87.748 128H23.999c-4.418 0-7.999-3.59-7.999-8.007V8.007C16 3.585 19.588 0 24 0h80c4.419 0 8 3.59 8 8.007V104H91.25c-.965 0-1.84.392-2.473 1.025a3.476 3.476 0 00-1.029 2.476V128zm8-.12l15.88-15.88h-15.88v15.88zM40 15.508A3.502 3.502 0 0143.5 12h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 20h-55a3.498 3.498 0 01-3.5-3.509v-.982zM32 22a6 6 0 100-12 6 6 0 000 12zm8 9.509A3.502 3.502 0 0143.5 28h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 36h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 44h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 52h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 60h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 68h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 76h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 84h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 92h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 100h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.505 3.505 0 0143.497 108h33.006A3.497 3.497 0 0180 111.509v.982A3.505 3.505 0 0176.503 116H43.497A3.497 3.497 0 0140 112.491v-.982zM32 38a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12z\"/></svg>"
        },
        "$:/core/images/locked-padlock": {
            "title": "$:/core/images/locked-padlock",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-locked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M96.472 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h8c.003-15.723.303-47.731 32.16-47.731 31.794 0 32.305 32.057 32.312 47.731zm-15.897 0H48.44c.002-16.287.142-32 15.719-32 15.684 0 16.977 16.136 16.415 32zM67.732 92.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
        },
        "$:/core/images/mail": {
            "title": "$:/core/images/mail",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mail tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M122.827 104.894a7.986 7.986 0 01-2.834.516H8.007c-.812 0-1.597-.12-2.335-.345l34.163-34.163 20.842 20.842a3.998 3.998 0 003.418 1.134 4.003 4.003 0 003.395-1.134L88.594 70.64c.075.09.155.176.24.26l33.993 33.994zm5.076-6.237c.064-.406.097-.823.097-1.247v-64c0-.669-.082-1.318-.237-1.94L94.23 65.006c.09.075.177.154.261.239l33.413 33.413zm-127.698.56A8.023 8.023 0 010 97.41v-64c0-.716.094-1.41.271-2.071l33.907 33.906L.205 99.218zM5.93 25.684a8.012 8.012 0 012.078-.273h111.986c.766 0 1.507.108 2.209.308L64.083 83.837 5.93 25.683z\"/></svg>"
        },
        "$:/core/images/menu-button": {
            "title": "$:/core/images/menu-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\"><rect width=\"128\" height=\"16\" y=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"56\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"96\" rx=\"8\"/></svg>"
        },
        "$:/core/images/mono-block": {
            "title": "$:/core/images/mono-block",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-block tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M23.965 32.967h.357c.755 0 1.328.192 1.72.577.39.384.586.947.586 1.688 0 .824-.206 1.418-.618 1.782-.413.363-1.094.545-2.045.545h-6.31c-.965 0-1.65-.178-2.056-.535-.405-.356-.608-.954-.608-1.792 0-.811.203-1.391.608-1.74.406-.35 1.09-.525 2.055-.525h.734l-.86-2.453H8.471l-.902 2.453h.734c.95 0 1.632.178 2.044.535.413.356.619.933.619 1.73 0 .824-.206 1.418-.619 1.782-.412.363-1.094.545-2.044.545h-5.41c-.964 0-1.649-.182-2.054-.545-.406-.364-.608-.958-.608-1.782 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.719-.577h.356l5.62-15.641H6.835c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.95-.619-1.76 0-.825.207-1.42.619-1.783.412-.363 1.094-.545 2.044-.545h7.863c1.244 0 2.118.67 2.62 2.013v.063l6.647 18.2zM12.98 17.326l-3.04 8.848h6.08l-3.04-8.848zm22.402 9.372v6.395h3.145c2.223 0 3.788-.245 4.697-.734.908-.49 1.362-1.307 1.362-2.453 0-1.16-.433-1.985-1.3-2.474-.866-.49-2.383-.734-4.55-.734h-3.354zm10.693-2.327c1.524.559 2.642 1.324 3.355 2.295.713.972 1.07 2.212 1.07 3.722 0 1.272-.308 2.432-.923 3.48-.615 1.049-1.496 1.909-2.642 2.58a7.499 7.499 0 01-2.254.849c-.832.174-2.01.262-3.533.262H30.202c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.782 0-.741.189-1.304.566-1.688.378-.385.93-.577 1.657-.577h.356V17.326h-.356c-.727 0-1.28-.196-1.657-.587-.377-.392-.566-.965-.566-1.72 0-.81.203-1.401.608-1.771.406-.37 1.062-.556 1.971-.556h9.645c2.95 0 5.19.573 6.72 1.72 1.53 1.145 2.296 2.823 2.296 5.031 0 1.09-.234 2.052-.703 2.883-.468.832-1.163 1.513-2.086 2.045zM35.381 17.2v5.284h2.83c1.72 0 2.932-.203 3.638-.609.706-.405 1.06-1.09 1.06-2.054 0-.909-.319-1.573-.955-1.992-.636-.42-1.667-.63-3.093-.63h-3.48zm35.863-3.816c.28-.503.566-.86.86-1.07.293-.21.664-.314 1.111-.314.685 0 1.17.182 1.457.545.287.364.43.986.43 1.866l.042 5.452c0 .964-.157 1.614-.472 1.95-.314.335-.884.503-1.709.503-.587 0-1.037-.14-1.352-.42-.314-.28-.584-.796-.807-1.551-.364-1.328-.944-2.282-1.74-2.862-.797-.58-1.901-.87-3.313-.87-2.153 0-3.802.727-4.948 2.18-1.147 1.454-1.72 3.558-1.72 6.311 0 2.74.58 4.844 1.74 6.311 1.16 1.468 2.817 2.202 4.97 2.202 1.467 0 3.085-.49 4.854-1.468 1.768-.978 2.883-1.467 3.344-1.467.545 0 1.003.23 1.373.692.37.46.556 1.034.556 1.719 0 1.23-1.084 2.39-3.25 3.48-2.167 1.09-4.606 1.636-7.318 1.636-3.662 0-6.625-1.21-8.89-3.627-2.264-2.419-3.396-5.578-3.396-9.478 0-3.76 1.146-6.884 3.438-9.372 2.293-2.488 5.2-3.732 8.723-3.732.992 0 1.97.112 2.935.335.964.224 1.992.574 3.082 1.049zm10.22 19.583V17.326h-.356c-.755 0-1.328-.196-1.72-.587-.39-.392-.586-.965-.586-1.72 0-.81.21-1.401.629-1.771.42-.37 1.097-.556 2.034-.556h5.178c2.922 0 5.06.126 6.416.377 1.356.252 2.51.671 3.46 1.258 1.691 1.007 2.988 2.443 3.89 4.31.9 1.865 1.352 4.021 1.352 6.467 0 2.586-.514 4.847-1.541 6.783-1.028 1.936-2.485 3.4-4.372 4.393-.853.447-1.852.772-2.998.975-1.147.203-2.852.304-5.116.304h-6.269c-.965 0-1.65-.178-2.055-.535-.406-.356-.608-.954-.608-1.792 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.72-.577h.356zm5.41-15.725v15.725h1.195c2.642 0 4.592-.646 5.85-1.94 1.258-1.292 1.887-3.28 1.887-5.965 0-2.641-.64-4.612-1.918-5.912-1.28-1.3-3.205-1.95-5.777-1.95-.335 0-.59.003-.765.01a7.992 7.992 0 00-.472.032zm35.067-.126h-9.75v5.368h3.69v-.252c0-.797.175-1.39.524-1.782.35-.392.88-.587 1.594-.587.629 0 1.142.178 1.54.534.4.357.598.808.598 1.353 0 .028.007.118.021.272.014.154.021.308.021.462v4.34c0 .936-.167 1.607-.503 2.013-.335.405-.88.608-1.635.608-.713 0-1.251-.19-1.615-.567-.363-.377-.545-.936-.545-1.677v-.377h-3.69v6.269h9.75v-2.495c0-.937.178-1.608.534-2.013.357-.405.94-.608 1.75-.608.798 0 1.367.2 1.71.597.342.399.513 1.073.513 2.024v5.074c0 .755-.146 1.258-.44 1.51-.293.251-.873.377-1.74.377h-17.172c-.923 0-1.583-.182-1.982-.545-.398-.364-.597-.958-.597-1.782 0-.741.189-1.304.566-1.688.377-.385.93-.577 1.656-.577h.357V17.326h-.357c-.712 0-1.261-.2-1.646-.598-.384-.398-.576-.968-.576-1.709 0-.81.203-1.401.608-1.771.405-.37 1.062-.556 1.97-.556h17.173c.853 0 1.43.13 1.73.388.3.258.45.772.45 1.54v4.698c0 .95-.174 1.631-.524 2.044-.35.412-.915.618-1.698.618-.81 0-1.394-.21-1.75-.629-.357-.419-.535-1.097-.535-2.033v-2.202zM19.77 47.641c.267-.504.55-.86.85-1.07.3-.21.675-.314 1.122-.314.685 0 1.17.181 1.457.545.287.363.43.985.43 1.866l.042 5.451c0 .965-.157 1.615-.472 1.95-.314.336-.891.504-1.73.504-.587 0-1.045-.144-1.373-.43-.329-.287-.598-.8-.807-1.541-.378-1.342-.958-2.3-1.74-2.873-.783-.573-1.88-.86-3.292-.86-2.153 0-3.799.727-4.938 2.181-1.14 1.454-1.709 3.557-1.709 6.311s.598 4.882 1.793 6.385C10.599 67.248 12.294 68 14.488 68c.503 0 1.077-.06 1.72-.179a23.809 23.809 0 002.264-.555v-3.313h-2.37c-.95 0-1.624-.175-2.023-.524-.398-.35-.597-.93-.597-1.74 0-.84.199-1.437.597-1.793.399-.357 1.073-.535 2.024-.535h7.569c.978 0 1.667.175 2.065.524.398.35.598.937.598 1.762 0 .74-.2 1.31-.598 1.708-.398.399-.975.598-1.73.598h-.335v5.242c0 .447-.05.758-.147.933-.098.174-.293.353-.587.534-.797.476-2.062.895-3.795 1.258a25.576 25.576 0 01-5.263.546c-3.662 0-6.625-1.21-8.89-3.628-2.264-2.418-3.397-5.577-3.397-9.477 0-3.76 1.147-6.884 3.44-9.372 2.292-2.488 5.199-3.732 8.721-3.732.979 0 1.954.112 2.925.335.972.224 2.003.573 3.093 1.049zm15.84 3.941v4.823h6.857v-4.823h-.336c-.754 0-1.331-.195-1.73-.587-.398-.391-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.364 1.093-.545 2.044-.545h5.41c.95 0 1.624.181 2.023.545.398.363.597.957.597 1.782 0 .755-.192 1.328-.576 1.72-.385.39-.947.586-1.688.586h-.357v15.642h.357c.755 0 1.328.192 1.719.576.391.385.587.947.587 1.688 0 .825-.203 1.419-.608 1.782-.405.364-1.09.546-2.055.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.2-1.303.598-1.688.398-.384.975-.576 1.73-.576h.335v-6.186h-6.856v6.186h.335c.755 0 1.331.192 1.73.576.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.412.364-1.094.546-2.044.546h-5.41c-.964 0-1.65-.179-2.055-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.392-.384.965-.576 1.72-.576h.356V51.582h-.356c-.741 0-1.304-.195-1.688-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.073-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.335zm31.754 0v15.642h3.523c.95 0 1.632.178 2.044.534.412.357.618.933.618 1.73 0 .811-.21 1.402-.629 1.772-.419.37-1.097.556-2.033.556H58.433c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.957-.619-1.782 0-.81.203-1.39.608-1.74.406-.35 1.09-.524 2.055-.524h3.523V51.582h-3.523c-.95 0-1.632-.181-2.044-.545-.412-.363-.619-.95-.619-1.761 0-.825.203-1.412.608-1.761.406-.35 1.09-.524 2.055-.524h12.455c.992 0 1.684.174 2.075.524.392.35.587.936.587 1.761 0 .81-.202 1.398-.608 1.761-.405.364-1.09.545-2.054.545h-3.523zm30.496 0v11.994c0 1.873-.122 3.228-.367 4.067a5.876 5.876 0 01-1.227 2.244c-.74.852-1.768 1.495-3.082 1.929-1.314.433-2.893.65-4.738.65-1.3 0-2.555-.126-3.764-.378a16.843 16.843 0 01-3.491-1.132c-.615-.28-1.017-.643-1.206-1.09-.188-.448-.283-1.175-.283-2.18v-4.32c0-1.202.175-2.04.525-2.516.349-.475.957-.713 1.824-.713 1.244 0 1.929.915 2.054 2.747.014.321.035.566.063.733.168 1.622.545 2.73 1.133 3.324.587.594 1.523.89 2.81.89 1.593 0 2.714-.422 3.364-1.268.65-.845.975-2.386.975-4.623V51.582H88.93c-.95 0-1.632-.181-2.044-.545-.413-.363-.619-.95-.619-1.761 0-.825.2-1.412.598-1.761.398-.35 1.086-.524 2.065-.524h10.693c.979 0 1.667.174 2.065.524.399.35.598.936.598 1.761 0 .81-.206 1.398-.619 1.761-.412.364-1.093.545-2.044.545h-1.761zm14.644 0v6.353l6.48-6.478c-.728-.084-1.238-.29-1.531-.619-.294-.328-.44-.85-.44-1.562 0-.825.198-1.419.597-1.782.398-.364 1.073-.545 2.023-.545h5.137c.95 0 1.625.181 2.023.545.399.363.598.957.598 1.782 0 .769-.2 1.345-.598 1.73-.398.384-.982.576-1.75.576h-.483l-6.101 6.06c1.132.839 2.167 1.94 3.103 3.302.937 1.363 2.034 3.456 3.292 6.28h.692c.825 0 1.44.188 1.845.566.405.377.608.943.608 1.698 0 .825-.206 1.419-.619 1.782-.412.364-1.093.546-2.044.546h-2.579c-1.132 0-2.048-.762-2.746-2.286-.126-.28-.224-.503-.294-.67-.923-1.958-1.768-3.467-2.537-4.53a16.616 16.616 0 00-2.705-2.914l-1.97 1.887v3.92h.335c.755 0 1.331.193 1.73.577.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.413.364-1.094.546-2.045.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.391-.384.965-.576 1.72-.576h.356V51.582h-.357c-.74 0-1.303-.195-1.687-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.072-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.336zM13.44 96.326l4.005-11.889c.251-.782.6-1.352 1.048-1.709.447-.356 1.041-.534 1.782-.534h3.271c.95 0 1.632.182 2.044.545.413.363.619.957.619 1.782 0 .755-.2 1.328-.598 1.72-.398.39-.975.587-1.73.587h-.335l.587 15.641h.357c.754 0 1.32.192 1.698.577.377.384.566.947.566 1.687 0 .825-.2 1.42-.598 1.783-.398.363-1.072.545-2.023.545h-4.718c-.95 0-1.624-.178-2.023-.535-.398-.356-.597-.954-.597-1.793 0-.74.192-1.303.576-1.687.385-.385.954-.577 1.709-.577h.335l-.293-12.79-3.061 9.52c-.224.712-.542 1.226-.954 1.54-.413.315-.982.472-1.709.472-.727 0-1.303-.157-1.73-.472-.426-.314-.751-.828-.975-1.54l-3.04-9.52-.294 12.79h.336c.755 0 1.324.192 1.709.577.384.384.576.947.576 1.687 0 .825-.202 1.42-.608 1.783-.405.363-1.076.545-2.013.545H2.621c-.937 0-1.608-.182-2.013-.545-.405-.364-.608-.958-.608-1.783 0-.74.192-1.303.577-1.687.384-.385.954-.577 1.708-.577h.336l.608-15.641h-.336c-.754 0-1.331-.196-1.73-.588-.398-.39-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.363 1.093-.545 2.044-.545h3.27c.728 0 1.311.175 1.752.524.44.35.8.923 1.08 1.72l4.109 11.888zm30.454 2.054V86.828H42.74c-.922 0-1.583-.182-1.981-.546-.398-.363-.598-.95-.598-1.76 0-.812.2-1.402.598-1.773.398-.37 1.059-.555 1.981-.555h5.955c.909 0 1.566.185 1.97.555.406.37.609.961.609 1.772 0 .741-.192 1.31-.577 1.709-.384.398-.933.598-1.646.598h-.356v19.038c0 .657-.07 1.069-.21 1.237-.14.167-.454.251-.943.251h-2.097c-.67 0-1.143-.07-1.415-.21-.273-.14-.507-.384-.703-.733l-8.722-15.327v11.385h1.216c.909 0 1.559.175 1.95.524.392.35.587.93.587 1.74 0 .825-.199 1.42-.597 1.783-.399.363-1.045.545-1.94.545h-6.017c-.909 0-1.566-.182-1.971-.545-.406-.364-.608-.958-.608-1.783 0-.74.188-1.303.566-1.687.377-.385.936-.577 1.677-.577h.336V86.828h-.336c-.713 0-1.265-.2-1.656-.598-.392-.398-.587-.968-.587-1.709 0-.81.206-1.401.618-1.772.413-.37 1.066-.555 1.96-.555h3.44c.824 0 1.383.108 1.677.325.293.216.622.653.985 1.31l7.989 14.551zM64.66 86.366c-1.803 0-3.218.727-4.245 2.18-1.028 1.455-1.541 3.474-1.541 6.06 0 2.586.517 4.613 1.551 6.08 1.034 1.468 2.446 2.202 4.235 2.202 1.804 0 3.222-.73 4.257-2.19 1.034-1.461 1.551-3.492 1.551-6.092 0-2.586-.513-4.605-1.54-6.06-1.028-1.453-2.45-2.18-4.268-2.18zm0-4.864c3.44 0 6.27 1.23 8.492 3.69 2.223 2.46 3.334 5.598 3.334 9.414 0 3.844-1.104 6.99-3.313 9.436-2.208 2.446-5.046 3.669-8.513 3.669-3.424 0-6.255-1.234-8.491-3.701-2.237-2.467-3.355-5.602-3.355-9.404 0-3.83 1.108-6.971 3.323-9.424 2.216-2.454 5.057-3.68 8.523-3.68zM87.461 98.17v4.298h2.16c.908 0 1.555.175 1.94.524.384.35.576.93.576 1.74 0 .825-.196 1.42-.587 1.783-.392.363-1.035.545-1.93.545h-7.254c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.783 0-.74.189-1.303.566-1.687.378-.385.93-.577 1.657-.577h.356V86.828h-.356c-.713 0-1.262-.2-1.646-.598-.385-.398-.577-.968-.577-1.709 0-.81.203-1.401.608-1.772.406-.37 1.063-.555 1.971-.555h8.66c3.424 0 6.014.657 7.768 1.97 1.754 1.315 2.631 3.25 2.631 5.809 0 2.697-.873 4.738-2.62 6.122-1.748 1.384-4.34 2.076-7.78 2.076h-3.564zm0-11.343v6.625h2.977c1.65 0 2.89-.28 3.722-.839.832-.559 1.248-1.397 1.248-2.516 0-1.048-.43-1.855-1.29-2.421-.86-.566-2.086-.85-3.68-.85h-2.977zm27.267 20.568l-1.636 1.636a12.37 12.37 0 011.772-.44c.58-.098 1.15-.147 1.709-.147 1.104 0 2.268.164 3.491.492 1.223.329 1.967.493 2.233.493.447 0 1.03-.15 1.75-.45.72-.301 1.206-.452 1.458-.452.517 0 .947.2 1.29.598.342.398.513.898.513 1.5 0 .796-.472 1.474-1.415 2.033-.944.56-2.1.839-3.47.839-.937 0-2.139-.22-3.607-.66-1.467-.441-2.53-.661-3.187-.661-.992 0-2.11.272-3.354.817-1.244.546-2.013.818-2.307.818a2.14 2.14 0 01-1.53-.597c-.42-.399-.63-.878-.63-1.437 0-.391.134-.807.4-1.247.265-.44.733-1.01 1.404-1.709l2.118-2.139c-2.335-.852-4.194-2.386-5.578-4.602-1.384-2.215-2.075-4.763-2.075-7.642 0-3.802 1.104-6.909 3.312-9.32 2.209-2.411 5.053-3.617 8.534-3.617 3.467 0 6.304 1.209 8.513 3.627 2.208 2.418 3.312 5.522 3.312 9.31 0 3.774-1.097 6.884-3.291 9.33-2.195 2.446-4.977 3.67-8.345 3.67a22.5 22.5 0 01-1.384-.043zm1.195-21.03c-1.803 0-3.218.727-4.246 2.18-1.027 1.455-1.54 3.474-1.54 6.06 0 2.586.516 4.613 1.55 6.08 1.035 1.468 2.447 2.202 4.236 2.202 1.803 0 3.222-.73 4.256-2.19 1.035-1.461 1.552-3.492 1.552-6.092 0-2.586-.514-4.605-1.541-6.06-1.028-1.453-2.45-2.18-4.267-2.18z\"/></svg>"
        },
        "$:/core/images/mono-line": {
            "title": "$:/core/images/mono-line",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-line tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.437 84.523h.908c1.922 0 3.381.489 4.378 1.468.997.979 1.495 2.411 1.495 4.298 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388h-16.07c-2.456 0-4.2-.454-5.232-1.361-1.032-.908-1.548-2.43-1.548-4.565 0-2.065.516-3.542 1.548-4.432 1.032-.89 2.776-1.334 5.232-1.334h1.869l-2.19-6.247H20.983l-2.296 6.247h1.87c2.42 0 4.155.453 5.205 1.361 1.05.908 1.575 2.376 1.575 4.405 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388H6.781c-2.456 0-4.2-.463-5.233-1.388C.516 93.9 0 92.389 0 90.289c0-1.887.498-3.32 1.495-4.298.997-.979 2.456-1.468 4.378-1.468h.908l14.308-39.83h-4.271c-2.42 0-4.156-.462-5.206-1.387-1.05-.926-1.575-2.42-1.575-4.485 0-2.1.525-3.613 1.575-4.538 1.05-.926 2.785-1.388 5.206-1.388h20.021c3.168 0 5.392 1.708 6.674 5.125v.16l16.924 46.343zm-27.976-39.83L24.72 67.225h15.483l-7.742-22.53zM89.506 68.56v16.284h8.008c5.66 0 9.646-.623 11.96-1.869 2.313-1.245 3.47-3.328 3.47-6.246 0-2.955-1.103-5.055-3.31-6.3-2.207-1.246-6.069-1.869-11.586-1.869h-8.542zm27.229-5.926c3.88 1.423 6.727 3.372 8.542 5.846 1.815 2.474 2.723 5.633 2.723 9.477 0 3.239-.783 6.193-2.35 8.862-1.565 2.67-3.808 4.859-6.726 6.567-1.709.997-3.622 1.718-5.74 2.163-2.118.445-5.116.667-8.996.667h-27.87c-2.349 0-4.03-.463-5.045-1.388-1.014-.926-1.521-2.438-1.521-4.538 0-1.887.48-3.32 1.441-4.298.961-.979 2.367-1.468 4.218-1.468h.907v-39.83h-.907c-1.851 0-3.257-.498-4.218-1.494-.961-.997-1.441-2.456-1.441-4.378 0-2.065.516-3.568 1.548-4.512 1.032-.943 2.705-1.414 5.018-1.414h24.56c7.51 0 13.214 1.459 17.111 4.377 3.898 2.92 5.847 7.19 5.847 12.814 0 2.776-.597 5.223-1.789 7.341-1.192 2.118-2.963 3.853-5.312 5.206zm-27.23-18.26v13.455h7.208c4.378 0 7.466-.516 9.264-1.549 1.797-1.032 2.696-2.776 2.696-5.232 0-2.313-.81-4.004-2.43-5.072-1.619-1.068-4.244-1.602-7.874-1.602h-8.863z\"/></svg>"
        },
        "$:/core/images/new-button": {
            "title": "$:/core/images/new-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 72H8.007C3.591 72 0 68.418 0 64c0-4.41 3.585-8 8.007-8H56V8.007C56 3.591 59.582 0 64 0c4.41 0 8 3.585 8 8.007V56h47.993c4.416 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H72v47.993c0 4.416-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V72z\"/></svg>"
        },
        "$:/core/images/new-here-button": {
            "title": "$:/core/images/new-here-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-here-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.838 20.935l-3.572.938c-3.688.968-8.23 4.43-10.136 7.731L3.37 96.738c-1.905 3.3-.771 7.524 2.534 9.432l33.717 19.466c3.297 1.904 7.53.78 9.435-2.521l38.76-67.134c1.905-3.3 2.632-8.963 1.623-12.646L83.285 20.88c-1.009-3.68-4.821-5.884-8.513-4.915l-7.603 1.995.043.287c.524 3.394 2.053 7.498 4.18 11.55.418.163.829.36 1.23.59a8.864 8.864 0 014.438 8.169c.104.132.21.264.316.395l-.386.318a8.663 8.663 0 01-1.082 3.137c-2.42 4.192-7.816 5.608-12.051 3.163-4.12-2.379-5.624-7.534-3.476-11.671-2.177-4.394-3.788-8.874-4.543-12.964z\"/><path d=\"M69.554 44.76c-5.944-7.476-10.74-17.196-11.955-25.059-1.68-10.875 3.503-18.216 15.082-18.04 10.407.158 19.975 5.851 24.728 13.785 5.208 8.695 2.95 17.868-6.855 20.496l-2.037-7.601c4.232-1.134 4.999-4.248 2.24-8.853-3.37-5.626-10.465-9.848-18.146-9.965-6.392-.097-8.31 2.62-7.323 9.01.999 6.465 5.318 15.138 10.582 21.65l-.072.06c.559 1.553-4.17 6.44-5.938 4.888l-.005.004-.028-.034a1.323 1.323 0 01-.124-.135 2.618 2.618 0 01-.149-.205z\"/><rect width=\"16\" height=\"48\" x=\"96\" y=\"80\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"80\" y=\"96\" rx=\"8\"/></g></svg>"
        },
        "$:/core/images/new-image-button": {
            "title": "$:/core/images/new-image-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-image-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.362 73.627l15.826-27.41a2.626 2.626 0 00-.962-3.59l-50.01-28.872a2.626 2.626 0 00-3.588.961L30.058 36.49l10.04-5.261c3.042-1.595 6.771.114 7.55 3.46l3.607 17.702 9.88.85a5.25 5.25 0 014.571 3.77c.034.115.1.344.199.671.165.553.353 1.172.562 1.843.595 1.914 1.23 3.85 1.872 5.678.207.588.412 1.156.614 1.701.625 1.685 1.209 3.114 1.725 4.207.255.54.485.977.726 1.427.214.212.547.425 1.011.622 1.141.482 2.784.74 4.657.758.864.008 1.71-.034 2.492-.11.448-.043.753-.085.871-.104.315-.053.625-.077.927-.076zM37.47 2.649A5.257 5.257 0 0144.649.725l63.645 36.746a5.257 5.257 0 011.923 7.178L73.47 108.294a5.257 5.257 0 01-7.177 1.923L2.649 73.47a5.257 5.257 0 01-1.924-7.177L37.471 2.649zm42.837 50.49a5.25 5.25 0 105.25-9.092 5.25 5.25 0 00-5.25 9.093zM96 112h-7.993c-4.419 0-8.007-3.582-8.007-8 0-4.41 3.585-8 8.007-8H96v-7.993C96 83.588 99.582 80 104 80c4.41 0 8 3.585 8 8.007V96h7.993c4.419 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H112v7.993c0 4.419-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V112zM33.347 51.791c7.428 7.948 9.01 10.69 7.449 13.394-1.56 2.703-13.838-2.328-16.094 1.58-2.256 3.908-.907 3.258-2.437 5.908l19.73 11.39s-5.605-8.255-4.235-10.628c2.515-4.356 8.77-1.256 10.365-4.019 2.414-4.181-5.103-9.639-14.778-17.625z\"/></svg>"
        },
        "$:/core/images/new-journal-button": {
            "title": "$:/core/images/new-journal-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-journal-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.545 112.818v11.818c0 1.306 1.086 2.364 2.425 2.364h6.06c1.34 0 2.425-1.058 2.425-2.364v-11.818h12.12c1.34 0 2.425-1.058 2.425-2.363v-5.91c0-1.305-1.085-2.363-2.424-2.363h-12.121V90.364c0-1.306-1.086-2.364-2.425-2.364h-6.06c-1.34 0-2.425 1.058-2.425 2.364v11.818h-12.12c-1.34 0-2.425 1.058-2.425 2.363v5.91c0 1.305 1.085 2.363 2.424 2.363h12.121zM60.016 4.965c-4.781-2.76-10.897-1.118-13.656 3.66L5.553 79.305A9.993 9.993 0 009.21 92.963l51.04 29.468c4.78 2.76 10.897 1.118 13.655-3.66l40.808-70.681a9.993 9.993 0 00-3.658-13.656L60.016 4.965zm-3.567 27.963a6 6 0 106-10.393 6 6 0 00-6 10.393zm31.697 17.928a6 6 0 106-10.392 6 6 0 00-6 10.392z\"/><text class=\"tc-fill-background\" font-family=\"Helvetica\" font-size=\"47.172\" font-weight=\"bold\" transform=\"rotate(30 25.742 95.82)\"><tspan x=\"42\" y=\"77.485\" text-anchor=\"middle\"><<now \"DD\">></tspan></text></g></svg>"
        },
        "$:/core/images/opacity": {
            "title": "$:/core/images/opacity",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-opacity tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.362 65a51.595 51.595 0 01-1.942 6H82.584a35.867 35.867 0 002.997-6h16.78zm.472-2c.423-1.961.734-3.963.929-6H87.656a35.78 35.78 0 01-1.368 6h16.546zm-3.249 10a51.847 51.847 0 01-3.135 6H75.812a36.205 36.205 0 005.432-6h18.341zm-4.416 8c-1.424 2.116-3 4.12-4.71 6H60.46a35.843 35.843 0 0012.874-6h21.834zm-7.513-34h16.107C101.247 20.627 79.033 0 52 0 23.281 0 0 23.281 0 52c0 25.228 17.965 46.26 41.8 51h20.4a51.66 51.66 0 0015.875-6H39v-2h42.25a52.257 52.257 0 007.288-6H39v-2h4.539C27.739 83.194 16 68.968 16 52c0-19.882 16.118-36 36-36 18.186 0 33.222 13.484 35.656 31zm.22 2h16.039a52.823 52.823 0 010 6H87.877a36.483 36.483 0 000-6z\"/><path d=\"M76 128c28.719 0 52-23.281 52-52s-23.281-52-52-52-52 23.281-52 52 23.281 52 52 52zm0-16c19.882 0 36-16.118 36-36S95.882 40 76 40 40 56.118 40 76s16.118 36 36 36z\"/><path d=\"M37 58h53v4H37v-4zm3-8h53v4H40v-4zm0-8h53v4H40v-4zm-8 24h53v4H32v-4zm-2 8h53v4H30v-4zm-3 8h53v4H27v-4z\"/></g></svg>"
        },
        "$:/core/images/open-window": {
            "title": "$:/core/images/open-window",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-open-window tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M16 112h88.994c3.87 0 7.006 3.59 7.006 8 0 4.418-3.142 8-7.006 8H7.006C3.136 128 0 124.41 0 120a9.321 9.321 0 010-.01V24.01C0 19.586 3.59 16 8 16c4.418 0 8 3.584 8 8.01V112z\"/><path d=\"M96 43.196V56a8 8 0 1016 0V24c0-4.41-3.585-8-8.007-8H72.007C67.588 16 64 19.582 64 24c0 4.41 3.585 8 8.007 8H84.57l-36.3 36.299a8 8 0 00-.001 11.316c3.117 3.117 8.19 3.123 11.316-.003L96 43.196zM32 7.999C32 3.581 35.588 0 40 0h80c4.419 0 8 3.588 8 8v80c0 4.419-3.588 8-8 8H40c-4.419 0-8-3.588-8-8V8z\"/></g></svg>"
        },
        "$:/core/images/options-button": {
            "title": "$:/core/images/options-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-options-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M110.488 76a47.712 47.712 0 01-5.134 12.384l6.724 6.724c3.123 3.123 3.132 8.192.011 11.313l-5.668 5.668c-3.12 3.12-8.186 3.117-11.313-.01l-6.724-6.725c-3.82 2.258-7.98 4-12.384 5.134v9.505c0 4.417-3.578 8.007-7.992 8.007h-8.016C55.58 128 52 124.415 52 119.993v-9.505a47.712 47.712 0 01-12.384-5.134l-6.724 6.725c-3.123 3.122-8.192 3.131-11.313.01l-5.668-5.668c-3.12-3.12-3.116-8.186.01-11.313l6.725-6.724c-2.257-3.82-4-7.98-5.134-12.384H8.007C3.591 76 0 72.422 0 68.01v-8.017C0 55.58 3.585 52 8.007 52h9.505a47.712 47.712 0 015.134-12.383l-6.724-6.725c-3.123-3.122-3.132-8.191-.011-11.312l5.668-5.669c3.12-3.12 8.186-3.116 11.313.01l6.724 6.725c3.82-2.257 7.98-4 12.384-5.134V8.007C52 3.591 55.578 0 59.992 0h8.016C72.42 0 76 3.585 76 8.007v9.505a47.712 47.712 0 0112.384 5.134l6.724-6.724c3.123-3.123 8.192-3.132 11.313-.01l5.668 5.668c3.12 3.12 3.116 8.186-.01 11.312l-6.725 6.725c2.257 3.82 4 7.979 5.134 12.383h9.505c4.416 0 8.007 3.578 8.007 7.992v8.017c0 4.411-3.585 7.991-8.007 7.991h-9.505zM64 96c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/></svg>"
        },
        "$:/core/images/paint": {
            "title": "$:/core/images/paint",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-paint tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M83.527 76.19C90.43 69.287 91.892 59 87.91 50.665l37.903-37.902c2.919-2.92 2.913-7.659 0-10.572a7.474 7.474 0 00-10.572 0L77.338 40.093c-8.335-3.982-18.622-2.521-25.526 4.383l31.715 31.715zm-2.643 2.644L49.169 47.119S8.506 81.243 0 80.282c0 0 3.782 5.592 6.827 8.039 14.024-5.69 37.326-24.6 37.326-24.6l.661.66S19.45 90.222 9.18 92.047c1.222 1.44 4.354 4.053 6.247 5.776 5.417-1.488 34.733-28.57 34.733-28.57l.661.66-32.407 31.022 5.285 5.286L56.106 75.2l.662.66s-27.864 30.536-28.684 32.432c0 0 6.032 6.853 7.569 7.824.702-2.836 27.884-33.485 27.884-33.485l.661.66s-20.597 23.755-24.964 36.732c3.21 3.549 7.5 5.137 10.926 6.298-2.19-11.817 30.724-47.487 30.724-47.487z\"/></svg>"
        },
        "$:/core/images/palette": {
            "title": "$:/core/images/palette",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-palette tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.247 39.182a93.52 93.52 0 00-16.228-1.4C28.662 37.781 0 57.131 0 81.002c0 9.642 4.676 18.546 12.58 25.735C23.504 91.19 26.34 72.395 36.89 63.562c15.183-12.713 26.538-7.828 26.538-7.828l16.82-16.552zm26.535 9.655c13.049 7.913 21.257 19.392 21.257 32.166 0 9.35.519 17.411-11.874 25.08-10.797 6.681-3.824-6.536-11.844-10.898s-19.946 1.308-18.213 7.906c3.2 12.181 19.422 11.455 6.314 16.658-13.107 5.202-18.202 4.476-28.403 4.476-7.821 0-15.315-.947-22.243-2.68 9.844-4.197 27.88-12.539 33.354-19.456C82.788 92.409 87.37 80 83.324 72.484c-.194-.359 11.215-11.668 23.458-23.647zM1.134 123.867l-.66.002c33.479-14.94 22.161-64.226 58.818-64.226.317 1.418.644 2.944 1.062 4.494-25.907-4.166-23.567 48.031-59.22 59.73zm.713-.007c38.872-.506 78.152-22.347 78.152-44.813-9.27 0-14.073-3.48-16.816-7.942-16.597-7.003-30.365 45.715-61.336 52.755zm65.351-64.008c-4.45 4.115 4.886 16.433 11.318 11.318l45.27-45.27c11.317-11.318 0-22.635-11.318-11.318-11.317 11.318-33.518 34.405-45.27 45.27z\"/></svg>"
        },
        "$:/core/images/permalink-button": {
            "title": "$:/core/images/permalink-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permalink-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.483 48l-7.387 32h-25.58l7.388-32h25.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L100.598 32h3.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-7.096l-7.387 32H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H85.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L69.402 96h-25.58L38.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L27.402 96h-3.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h7.096l7.387-32H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h18.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L58.598 32h25.58z\"/></svg>"
        },
        "$:/core/images/permaview-button": {
            "title": "$:/core/images/permaview-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permaview-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.483 48l-1.846 8h-5.58l1.847-8h5.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L101.598 32h2.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-6.096l-1.847 8h7.944c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H92.364l-1.846 8H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H86.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L70.402 96h-5.58L59.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L48.402 96h-5.58L37.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L26.402 96h-2.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h6.096l1.847-8h-7.944C19.59 72 16 68.418 16 64c0-4.41 3.581-8 8-8h11.637l1.846-8H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h17.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L57.598 32h5.58L68.8 7.642c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L79.598 32h5.58zM53.904 48l-1.847 8h5.58l1.846-8h-5.579zm22.039 24l-1.847 8h-5.58l1.847-8h5.58zm-27.58 0l-1.846 8h5.579l1.847-8h-5.58z\"/></svg>"
        },
        "$:/core/images/picture": {
            "title": "$:/core/images/picture",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-picture tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112 68.233v-48.23A4.001 4.001 0 00107.997 16H20.003A4.001 4.001 0 0016 20.003v38.31l9.241-14.593c2.8-4.422 9.023-5.008 12.6-1.186l18.247 20.613 13.687-6.407a8 8 0 018.903 1.492 264.97 264.97 0 002.92 2.739 249.44 249.44 0 006.798 6.066 166.5 166.5 0 002.106 1.778c2.108 1.747 3.967 3.188 5.482 4.237.748.518 1.383.92 2.044 1.33.444.117 1.046.144 1.809.05 1.873-.233 4.238-1.144 6.723-2.547a36.016 36.016 0 003.205-2.044c.558-.4.93-.686 1.07-.802.376-.31.765-.577 1.165-.806zM0 8.007A8.01 8.01 0 018.007 0h111.986A8.01 8.01 0 01128 8.007v111.986a8.01 8.01 0 01-8.007 8.007H8.007A8.01 8.01 0 010 119.993V8.007zM95 42a8 8 0 100-16 8 8 0 000 16zM32 76c15.859 4.83 20.035 7.244 20.035 12S32 95.471 32 102.347c0 6.876 1.285 4.99 1.285 9.653H68s-13.685-6.625-13.685-10.8c0-7.665 10.615-8.34 10.615-13.2 0-7.357-14.078-8.833-32.93-12z\"/></svg>"
        },
        "$:/core/images/plugin-generic-language": {
            "title": "$:/core/images/plugin-generic-language",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M61.207 68.137c-4.324 2.795-6.999 6.656-6.999 10.921 0 7.906 9.19 14.424 21.042 15.336 2.162 3.902 8.598 6.785 16.318 7.01-5.126-1.125-9.117-3.742-10.62-7.01C92.805 93.487 102 86.967 102 79.059c0-8.53-10.699-15.445-23.896-15.445-6.599 0-12.572 1.729-16.897 4.524zm12.794-14.158c-4.324 2.795-10.298 4.524-16.897 4.524-2.619 0-5.14-.272-7.497-.775-3.312 2.25-8.383 3.69-14.067 3.69l-.255-.002c4.119-.892 7.511-2.747 9.478-5.13-6.925-2.704-11.555-7.617-11.555-13.228 0-8.53 10.699-15.445 23.896-15.445C70.301 27.613 81 34.528 81 43.058c0 4.265-2.675 8.126-6.999 10.921zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
        },
        "$:/core/images/plugin-generic-plugin": {
            "title": "$:/core/images/plugin-generic-plugin",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M40.397 76.446V95.34h14.12l-.001-.005a6.912 6.912 0 005.364-11.593l.046-.023a6.912 6.912 0 119.979.526l.086.055a6.914 6.914 0 004.408 10.948l-.023.092h21.32V75.568l-.15.038a6.912 6.912 0 00-11.593-5.364l-.022-.046a6.912 6.912 0 11.526-9.979l.055-.086a6.914 6.914 0 0010.948-4.408c.079.018.158.038.236.059v-15.74h-21.32l.023-.094a6.914 6.914 0 01-4.408-10.947 10.23 10.23 0 00-.086-.055 6.912 6.912 0 10-9.979-.526l-.046.023a6.912 6.912 0 01-5.364 11.593l.001.005h-14.12v12.847A6.912 6.912 0 0129.5 59.843l-.054.086a6.912 6.912 0 10-.526 9.979l.023.046a6.912 6.912 0 0111.455 6.492zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
        },
        "$:/core/images/plugin-generic-theme": {
            "title": "$:/core/images/plugin-generic-theme",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M29.408 91.472L51.469 69.41l-.004-.005a2.22 2.22 0 01.004-3.146c.87-.87 2.281-.872 3.147-.005l9.465 9.464a2.22 2.22 0 01-.005 3.147c-.87.87-2.28.871-3.147.005l-.005-.005-22.061 22.062a6.686 6.686 0 11-9.455-9.455zM60.802 66.38c-2.436-2.704-4.465-5.091-5.817-6.869-6.855-9.014-10.313-4.268-14.226 0-3.913 4.268 1.03 7.726-2.683 10.741-3.713 3.015-3.484 4.06-9.752-1.455-6.267-5.516-6.7-7.034-3.823-10.181 2.877-3.147 5.281 1.808 11.159-3.785 5.877-5.593.94-10.55.94-10.55s12.237-25.014 28.588-23.167c16.351 1.848-6.186-2.392-11.792 17.226-2.4 8.4.447 6.42 4.998 9.968 1.394 1.086 6.03 4.401 11.794 8.685l20.677-20.676 1.615-4.766 7.84-4.689 3.151 3.152-4.688 7.84-4.766 1.615-20.224 20.223c12.663 9.547 28.312 22.146 28.312 26.709 0 7.217-3.071 11.526-9.535 9.164-4.693-1.715-18.768-15.192-28.753-25.897l-2.893 2.893-3.151-3.152 3.029-3.029zM63.953 0l54.56 32v64l-54.56 32-54.56-32V32l54.56-32z\"/></svg>"
        },
        "$:/core/images/preview-closed": {
            "title": "$:/core/images/preview-closed",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-closed tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M.088 64a7.144 7.144 0 001.378 5.458C16.246 88.818 39.17 100.414 64 100.414c24.83 0 47.753-11.596 62.534-30.956A7.144 7.144 0 00127.912 64C110.582 78.416 88.304 87.086 64 87.086 39.696 87.086 17.418 78.416.088 64z\"/><rect width=\"4\" height=\"16\" x=\"62\" y=\"96\" rx=\"4\"/><rect width=\"4\" height=\"16\" x=\"78\" y=\"93\" rx=\"4\" transform=\"rotate(-5 80 101)\"/><rect width=\"4\" height=\"16\" x=\"46\" y=\"93\" rx=\"4\" transform=\"rotate(5 48 101)\"/><rect width=\"4\" height=\"16\" x=\"30\" y=\"88\" rx=\"4\" transform=\"rotate(10 32 96)\"/><rect width=\"4\" height=\"16\" x=\"94\" y=\"88\" rx=\"4\" transform=\"rotate(-10 96 96)\"/><rect width=\"4\" height=\"16\" x=\"110\" y=\"80\" rx=\"4\" transform=\"rotate(-20 112 88)\"/><rect width=\"4\" height=\"16\" x=\"14\" y=\"80\" rx=\"4\" transform=\"rotate(20 16 88)\"/></g></svg>"
        },
        "$:/core/images/preview-open": {
            "title": "$:/core/images/preview-open",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-open tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.11 99.588c-24.83 0-47.754-11.596-62.534-30.957a7.148 7.148 0 010-8.675C16.356 40.596 39.28 29 64.11 29c24.83 0 47.753 11.596 62.534 30.956a7.148 7.148 0 010 8.675c-14.78 19.36-37.703 30.957-62.534 30.957zm46.104-32.007c1.44-1.524 1.44-3.638 0-5.162C99.326 50.9 82.439 44 64.147 44S28.968 50.9 18.08 62.42c-1.44 1.523-1.44 3.637 0 5.16C28.968 79.1 45.855 86 64.147 86s35.179-6.9 46.067-18.42z\"/><path d=\"M63.5 88C76.479 88 87 77.479 87 64.5S76.479 41 63.5 41 40 51.521 40 64.5 50.521 88 63.5 88z\"/></g></svg>"
        },
        "$:/core/images/print-button": {
            "title": "$:/core/images/print-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-print-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M112 71V30.5h-.032c-.035-2-.816-3.99-2.343-5.516L86.998 2.357A7.978 7.978 0 0081 .02V0H24a8 8 0 00-8 8v63h8V8h57v14.5c0 4.422 3.582 8 8 8h15V71h8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/><path d=\"M0 80.005C0 71.165 7.156 64 16 64h96c8.836 0 16 7.155 16 16.005v31.99c0 8.84-7.156 16.005-16 16.005H16c-8.836 0-16-7.155-16-16.005v-31.99zM104 96a8 8 0 100-16 8 8 0 000 16z\"/></g></svg>"
        },
        "$:/core/images/quote": {
            "title": "$:/core/images/quote",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-quote tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M51.219 117.713V62.199H27.427c0-8.891 1.683-16.401 5.047-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.36 3.184-20.728 6.669-6.368 3.484-11.835 7.87-16.401 13.157C9.524 27.113 5.98 33.241 3.456 40.21.933 47.18-.21 54.63.03 62.56v55.153H51.22zm76.781 0V62.199h-23.791c0-8.891 1.682-16.401 5.046-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.359 3.184-20.727 6.669-6.369 3.484-11.836 7.87-16.402 13.157-4.566 5.287-8.11 11.415-10.634 18.384-2.523 6.97-3.665 14.42-3.424 22.35v55.153H128z\"/></svg>"
        },
        "$:/core/images/refresh-button": {
            "title": "$:/core/images/refresh-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-refresh-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M106.369 39.433c10.16 20.879 6.57 46.764-10.771 64.106-21.87 21.87-57.327 21.87-79.196 0-21.87-21.87-21.87-57.326 0-79.196a8 8 0 1111.314 11.314c-15.621 15.62-15.621 40.947 0 56.568 15.62 15.621 40.947 15.621 56.568 0C97.72 78.79 99.6 58.175 89.924 42.73l-6.44 12.264a8 8 0 11-14.166-7.437L84.435 18.76a8 8 0 0110.838-3.345l28.873 15.345a8 8 0 11-7.51 14.129l-10.267-5.457zm-8.222-12.368c-.167-.19-.336-.38-.506-.57l.96-.296-.454.866z\"/></svg>"
        },
        "$:/core/images/right-arrow": {
            "title": "$:/core/images/right-arrow",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-right-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M99.069 64.173c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></svg>"
        },
        "$:/core/images/rotate-left": {
            "title": "$:/core/images/rotate-left",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-rotate-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"32\" height=\"80\" rx=\"8\"/><rect width=\"80\" height=\"32\" x=\"48\" y=\"96\" rx=\"8\"/><path d=\"M61.32 36.65c19.743 2.45 35.023 19.287 35.023 39.693a4 4 0 01-8 0c0-15.663-11.254-28.698-26.117-31.46l3.916 3.916a4 4 0 11-5.657 5.657L49.172 43.142a4 4 0 010-5.657l11.313-11.313a4 4 0 115.657 5.656l-4.821 4.822z\"/></g></svg>"
        },
        "$:/core/images/save-button": {
            "title": "$:/core/images/save-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M120.783 34.33c4.641 8.862 7.266 18.948 7.266 29.646 0 35.347-28.653 64-64 64-35.346 0-64-28.653-64-64 0-35.346 28.654-64 64-64 18.808 0 35.72 8.113 47.43 21.03l2.68-2.68c3.13-3.13 8.197-3.132 11.321-.008 3.118 3.118 3.121 8.193-.007 11.32l-4.69 4.691zm-12.058 12.058a47.876 47.876 0 013.324 17.588c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48c14.39 0 27.3 6.332 36.098 16.362L58.941 73.544 41.976 56.578c-3.127-3.127-8.201-3.123-11.32-.005-3.123 3.124-3.119 8.194.006 11.319l22.617 22.617a7.992 7.992 0 005.659 2.347c2.05 0 4.101-.783 5.667-2.349l44.12-44.12z\"/></svg>"
        },
        "$:/core/images/size": {
            "title": "$:/core/images/size",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-size tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M92.343 26l-9.171 9.172a4 4 0 105.656 5.656l16-16a4 4 0 000-5.656l-16-16a4 4 0 10-5.656 5.656L92.343 18H22a4 4 0 00-4 4v70.343l-9.172-9.171a4 4 0 10-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656L26 92.343V22l-4 4h70.343zM112 52v64l4-4H52a4 4 0 100 8h64a4 4 0 004-4V52a4 4 0 10-8 0z\"/></svg>"
        },
        "$:/core/images/spiral": {
            "title": "$:/core/images/spiral",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-spiral tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074a4.785 4.785 0 00-4.52-5.03 4.778 4.778 0 00-5.03 4.52c-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01a1.047 1.047 0 01-.264-.332c-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"/></svg>"
        },
        "$:/core/images/stamp": {
            "title": "$:/core/images/stamp",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-stamp tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M49.733 64H16.01C11.584 64 8 67.583 8 72.003V97h112V72.003A8 8 0 00111.99 64H78.267A22.813 22.813 0 0175.5 53.077c0-6.475 2.687-12.324 7.009-16.497A22.818 22.818 0 0087 22.952C87 10.276 76.703 0 64 0S41 10.276 41 22.952c0 5.103 1.669 9.817 4.491 13.628 4.322 4.173 7.009 10.022 7.009 16.497 0 3.954-1.002 7.675-2.767 10.923zM8 104h112v8H8v-8z\"/></svg>"
        },
        "$:/core/images/star-filled": {
            "title": "$:/core/images/star-filled",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-star-filled tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M61.836 96.823l37.327 27.287c2.72 1.99 6.379-.69 5.343-3.912L90.29 75.988l-1.26 3.91 37.285-27.345c2.718-1.993 1.32-6.327-2.041-6.33l-46.113-.036 3.3 2.416L67.176 4.416c-1.04-3.221-5.563-3.221-6.604 0L46.29 48.603l3.3-2.416-46.113.036c-3.362.003-4.759 4.337-2.04 6.33L38.72 79.898l-1.26-3.91-14.216 44.21c-1.036 3.223 2.622 5.901 5.343 3.912l37.326-27.287h-4.078z\"/></svg>"
        },
        "$:/core/images/storyview-classic": {
            "title": "$:/core/images/storyview-classic",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-classic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm0 48C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0 32C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
        },
        "$:/core/images/storyview-pop": {
            "title": "$:/core/images/storyview-pop",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-pop tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm-7.99 40C11.587 56 8 59.578 8 63.992v16.016C8 84.422 11.584 88 16.01 88h95.98c4.424 0 8.01-3.578 8.01-7.992V63.992c0-4.414-3.584-7.992-8.01-7.992H16.01zM24 96C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0-32C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
        },
        "$:/core/images/storyview-zoomin": {
            "title": "$:/core/images/storyview-zoomin",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-zoomin tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16A8 8 0 0016 24.009V71.99C16 76.414 19.588 80 24 80h80a8 8 0 008-8.009V24.01c0-4.423-3.588-8.009-8-8.009H24z\"/></svg>"
        },
        "$:/core/images/strikethrough": {
            "title": "$:/core/images/strikethrough",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-strikethrough tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M92.794 38.726h15.422c-.229-6.74-1.514-12.538-3.856-17.393-2.342-4.855-5.54-8.881-9.596-12.08-4.055-3.199-8.767-5.54-14.136-7.025C75.258.743 69.433 0 63.15 0a62.76 62.76 0 00-16.364 2.142C41.474 3.57 36.733 5.74 32.564 8.653c-4.17 2.913-7.511 6.626-10.025 11.138-2.513 4.512-3.77 9.853-3.77 16.022 0 5.597 1.115 10.252 3.342 13.965 2.228 3.712 5.198 6.74 8.91 9.081 3.713 2.342 7.911 4.227 12.595 5.655a194.641 194.641 0 0014.308 3.77c4.855 1.085 9.624 2.142 14.308 3.17 4.683 1.028 8.881 2.37 12.594 4.027 3.713 1.656 6.683 3.798 8.91 6.425 2.228 2.628 3.342 6.055 3.342 10.281 0 4.456-.914 8.111-2.742 10.967a19.953 19.953 0 01-7.197 6.768c-2.97 1.657-6.311 2.828-10.024 3.513a60.771 60.771 0 01-11.052 1.028c-4.57 0-9.025-.571-13.366-1.713-4.34-1.143-8.139-2.913-11.394-5.312-3.256-2.4-5.884-5.455-7.883-9.168-1.999-3.712-2.998-8.139-2.998-13.28H15c0 7.426 1.342 13.852 4.027 19.278 2.684 5.426 6.34 9.881 10.966 13.365 4.627 3.484 9.996 6.083 16.107 7.797 6.112 1.713 12.595 2.57 19.449 2.57 5.597 0 11.223-.657 16.878-1.97 5.655-1.314 10.767-3.428 15.336-6.34 4.57-2.914 8.31-6.683 11.224-11.31 2.913-4.626 4.37-10.195 4.37-16.707 0-6.054-1.115-11.08-3.342-15.079-2.228-3.998-5.198-7.31-8.91-9.938-3.713-2.627-7.911-4.712-12.595-6.254a170.83 170.83 0 00-14.308-4.027 549.669 549.669 0 00-14.308-3.17c-4.683-.971-8.881-2.2-12.594-3.684-3.713-1.485-6.683-3.399-8.91-5.74-2.228-2.342-3.342-5.398-3.342-9.168 0-3.998.771-7.34 2.313-10.024 1.543-2.685 3.599-4.826 6.17-6.426 2.57-1.599 5.51-2.741 8.824-3.427a49.767 49.767 0 0110.11-1.028c8.453 0 15.393 1.97 20.819 5.912 5.426 3.94 8.596 10.31 9.51 19.106z\"/><path d=\"M5 54h118v16H5z\"/></g></svg>"
        },
        "$:/core/images/subscript": {
            "title": "$:/core/images/subscript",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-subscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 128.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
        },
        "$:/core/images/superscript": {
            "title": "$:/core/images/superscript",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-superscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 63.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
        },
        "$:/core/images/tag-button": {
            "title": "$:/core/images/tag-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tag-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M18.164 47.66l.004 4.105c.003 3.823 2.19 9.097 4.885 11.792l61.85 61.85c2.697 2.697 7.068 2.69 9.769-.01L125.767 94.3a6.903 6.903 0 00.01-9.77L63.928 22.683c-2.697-2.697-7.976-4.88-11.796-4.881l-27.076-.007a6.902 6.902 0 00-6.91 6.91l.008 9.96.287.033c3.73.411 8.489-.044 13.365-1.153a9.702 9.702 0 0111.14-3.662l.291-.13.128.285a9.7 9.7 0 013.3 2.17c3.796 3.796 3.801 9.945.012 13.734-3.618 3.618-9.386 3.777-13.204.482-5.365 1.122-10.674 1.596-15.309 1.237z\"/><path d=\"M47.633 39.532l.023.051c-9.689 4.356-21.584 6.799-30.396 5.828C5.273 44.089-1.028 36.43 2.443 24.078 5.562 12.976 14.3 4.361 24.047 1.548c10.68-3.083 19.749 1.968 19.749 13.225h-8.623c0-4.859-3.078-6.573-8.735-4.94-6.91 1.995-13.392 8.383-15.694 16.577-1.915 6.818.417 9.653 7.46 10.43 7.126.785 17.531-1.352 25.917-5.121l.027.06.036-.017c1.76-.758 6.266 6.549 3.524 7.74a2.8 2.8 0 01-.075.03z\"/></g></svg>"
        },
        "$:/core/images/theme-button": {
            "title": "$:/core/images/theme-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-theme-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.854 66.945a122.626 122.626 0 01-3.9-4.819c-11.064-14.548-16.645-6.888-22.96 0-6.315 6.888 1.664 12.47-4.33 17.335-5.993 4.866-5.623 6.552-15.737-2.35-10.115-8.9-10.815-11.351-6.172-16.43 4.644-5.08 8.524 2.918 18.01-6.108 9.485-9.026 1.517-17.026 1.517-17.026S42.03-2.824 68.42.157c26.39 2.982-9.984-3.86-19.031 27.801-3.874 13.556.72 10.362 8.066 16.087 1.707 1.33 6.428 4.732 12.671 9.318-6.129 5.879-11.157 10.669-14.273 13.582zm11.641 12.947c16.013 17.036 37.742 37.726 45.117 40.42 10.432 3.813 15.388-3.141 15.388-14.79 0-7.151-23.83-26.542-43.924-41.769-7.408 7.156-13.376 12.953-16.58 16.139z\"/><path d=\"M11.069 109.828L46.31 74.587a3.56 3.56 0 115.037-5.032l15.098 15.098a3.56 3.56 0 11-5.032 5.037l-35.24 35.241c-4.171 4.17-10.933 4.17-15.104 0-4.17-4.17-4.17-10.933 0-15.103zM124.344 6.622l5.034 5.034-7.49 12.524-7.613 2.58L61.413 79.62l-5.034-5.034 52.861-52.862 2.58-7.614 12.524-7.49z\"/></g></svg>"
        },
        "$:/core/images/timestamp-off": {
            "title": "$:/core/images/timestamp-off",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-off tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M58.25 35.88c-18.777 0-33.998 15.224-33.998 33.998 0 18.773 15.22 34.002 33.998 34.002 18.784 0 34.002-15.23 34.002-34.002 0-18.774-15.218-33.998-34.002-33.998zm-3.03 50.123H44.196v-34H55.22v34zm16.976 0H61.17v-34h11.025v34z\"/></g></svg>"
        },
        "$:/core/images/timestamp-on": {
            "title": "$:/core/images/timestamp-on",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-on tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M13.41 27.178a5.005 5.005 0 01-7.045-.613 5.008 5.008 0 01.616-7.047l9.95-8.348a5 5 0 016.429 7.661l-9.95 8.348zm89.573 0a5.005 5.005 0 007.045-.613 5.008 5.008 0 00-.616-7.047l-9.95-8.348a5 5 0 00-6.428 7.661l9.95 8.348zM65.097 71.072c0 3.826-3.09 6.928-6.897 6.928-3.804.006-6.9-3.102-6.903-6.928 0 0 4.76-39.072 6.903-39.072s6.897 39.072 6.897 39.072z\"/></g></svg>"
        },
        "$:/core/images/tip": {
            "title": "$:/core/images/tip",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tip tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128.242c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64 0 35.346 28.654 64 64 64zm11.936-36.789c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349C54.33 94.05 58.824 95.82 64 95.82c5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.456c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zM64.3 24.242c11.618 0 23.699 7.82 23.699 24.2S75.92 71.754 75.92 83.576c0 5.873-5.868 9.26-11.92 9.26s-12.027-3.006-12.027-9.26C51.973 71.147 40 65.47 40 48.442s12.683-24.2 24.301-24.2z\"/></svg>"
        },
        "$:/core/images/transcludify": {
            "title": "$:/core/images/transcludify",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-transcludify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M0 59.482c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.651-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02C1.36 67.377.591 67.288 0 67.288v-7.806zm24.66 0c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.65-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02c-.946-.177-1.715-.266-2.306-.266v-7.806zm43.965-3.538L80.6 52.041l2.306 7.097-12.063 3.903 7.628 10.378-6.12 4.435-7.63-10.467-7.45 10.201-5.943-4.524 7.628-10.023-12.152-4.17 2.306-7.096 12.064 4.17V43.347h7.451v12.596zm34.425 11.344c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806zm24.66 0c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806z\"/></svg>"
        },
        "$:/core/images/twitter": {
            "title": "$:/core/images/twitter",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-twitter tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.626 115.803A73.376 73.376 0 012 104.235c2.022.238 4.08.36 6.166.36 12.111 0 23.258-4.117 32.105-11.023-11.312-.208-20.859-7.653-24.148-17.883a25.98 25.98 0 0011.674-.441C15.971 72.881 7.061 62.474 7.061 49.997c0-.108 0-.216.002-.323a25.824 25.824 0 0011.709 3.22c-6.936-4.617-11.5-12.5-11.5-21.433 0-4.719 1.274-9.142 3.5-12.945 12.75 15.579 31.797 25.83 53.281 26.904-.44-1.884-.67-3.85-.67-5.868 0-14.22 11.575-25.75 25.852-25.75a25.865 25.865 0 0118.869 8.132 51.892 51.892 0 0016.415-6.248c-1.93 6.012-6.029 11.059-11.366 14.246A51.844 51.844 0 00128 25.878a52.428 52.428 0 01-12.9 13.33c.05 1.104.075 2.214.075 3.33 0 34.028-26 73.265-73.549 73.265\"/></svg>"
        },
        "$:/core/images/underline": {
            "title": "$:/core/images/underline",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-underline tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M7 117.421h114.248V128H7v-10.579zm97.871-18.525V0h-16.26v55.856c0 4.463-.605 8.576-1.816 12.338-1.212 3.762-3.03 7.046-5.452 9.851-2.423 2.806-5.452 4.974-9.086 6.504-3.635 1.53-7.939 2.296-12.912 2.296-6.25 0-11.159-1.786-14.73-5.356-3.57-3.571-5.356-8.417-5.356-14.538V0H23v65.038c0 5.356.542 10.234 1.626 14.633 1.084 4.4 2.965 8.194 5.643 11.382 2.678 3.188 6.185 5.643 10.52 7.365 4.337 1.721 9.756 2.582 16.26 2.582 7.27 0 13.582-1.435 18.938-4.304 5.356-2.87 9.755-7.365 13.199-13.486h.382v15.686h15.303z\"/></svg>"
        },
        "$:/core/images/unfold-all-button": {
            "title": "$:/core/images/unfold-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M63.945 60.624c-2.05 0-4.101-.78-5.666-2.345L35.662 35.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 41.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 58.279a7.986 7.986 0 01-5.663 2.346zM64.004 124.565c-2.05 0-4.102-.78-5.666-2.345L35.721 99.603c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 105.255l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.662 122.22a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
        },
        "$:/core/images/unfold-button": {
            "title": "$:/core/images/unfold-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M63.945 63.624c-2.05 0-4.101-.78-5.666-2.345L35.662 38.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 44.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 61.279a7.986 7.986 0 01-5.663 2.346zM64.004 105.682c-2.05.001-4.102-.78-5.666-2.344L35.721 80.721c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 86.373l16.966-16.966c3.124-3.125 8.194-3.13 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319l-22.617 22.617a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
        },
        "$:/core/images/unlocked-padlock": {
            "title": "$:/core/images/unlocked-padlock",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unlocked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M48.627 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h6.136c-10.455-12.651-27.364-35.788-4.3-55.142 24.636-20.672 45.835 4.353 55.777 16.201 9.943 11.85-2.676 22.437-12.457 9.892-9.78-12.545-21.167-24.146-33.207-14.043-12.041 10.104-1.757 22.36 8.813 34.958 2.467 2.94 3.641 5.732 3.865 8.134zm19.105 28.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
        },
        "$:/core/images/up-arrow": {
            "title": "$:/core/images/up-arrow",
            "created": "20150316000544368",
            "modified": "20150316000831867",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-up-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M63.892.281c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.104 3.092-11.196 0L63.894 19.393 13.513 69.774a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98A7.892 7.892 0 0163.893.28z\"/></svg>"
        },
        "$:/core/images/video": {
            "title": "$:/core/images/video",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-video tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 12c-34.91 0-55.273 2.917-58.182 5.833C2.91 20.75 0 41.167 0 64.5c0 23.333 2.91 43.75 5.818 46.667C8.728 114.083 29.091 117 64 117c34.91 0 55.273-2.917 58.182-5.833C125.09 108.25 128 87.833 128 64.5c0-23.333-2.91-43.75-5.818-46.667C119.272 14.917 98.909 12 64 12zm-9.084 32.618c-3.813-2.542-6.905-.879-6.905 3.698v31.368c0 4.585 3.099 6.235 6.905 3.698l22.168-14.779c3.813-2.542 3.806-6.669 0-9.206L54.916 44.618z\"/></svg>"
        },
        "$:/core/images/warning": {
            "title": "$:/core/images/warning",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-warning tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M57.072 11c3.079-5.333 10.777-5.333 13.856 0l55.426 96c3.079 5.333-.77 12-6.928 12H8.574c-6.158 0-10.007-6.667-6.928-12l55.426-96zM64 37c-4.418 0-8 3.582-8 7.994v28.012C56 77.421 59.59 81 64 81c4.418 0 8-3.582 8-7.994V44.994C72 40.579 68.41 37 64 37zm0 67a8 8 0 100-16 8 8 0 000 16z\"/></svg>"
        },
        "$:/language/Buttons/AdvancedSearch/Caption": {
            "title": "$:/language/Buttons/AdvancedSearch/Caption",
            "text": "advanced search"
        },
        "$:/language/Buttons/AdvancedSearch/Hint": {
            "title": "$:/language/Buttons/AdvancedSearch/Hint",
            "text": "Advanced search"
        },
        "$:/language/Buttons/Cancel/Caption": {
            "title": "$:/language/Buttons/Cancel/Caption",
            "text": "cancel"
        },
        "$:/language/Buttons/Cancel/Hint": {
            "title": "$:/language/Buttons/Cancel/Hint",
            "text": "Discard changes to this tiddler"
        },
        "$:/language/Buttons/Clone/Caption": {
            "title": "$:/language/Buttons/Clone/Caption",
            "text": "clone"
        },
        "$:/language/Buttons/Clone/Hint": {
            "title": "$:/language/Buttons/Clone/Hint",
            "text": "Clone this tiddler"
        },
        "$:/language/Buttons/Close/Caption": {
            "title": "$:/language/Buttons/Close/Caption",
            "text": "close"
        },
        "$:/language/Buttons/Close/Hint": {
            "title": "$:/language/Buttons/Close/Hint",
            "text": "Close this tiddler"
        },
        "$:/language/Buttons/CloseAll/Caption": {
            "title": "$:/language/Buttons/CloseAll/Caption",
            "text": "close all"
        },
        "$:/language/Buttons/CloseAll/Hint": {
            "title": "$:/language/Buttons/CloseAll/Hint",
            "text": "Close all tiddlers"
        },
        "$:/language/Buttons/CloseOthers/Caption": {
            "title": "$:/language/Buttons/CloseOthers/Caption",
            "text": "close others"
        },
        "$:/language/Buttons/CloseOthers/Hint": {
            "title": "$:/language/Buttons/CloseOthers/Hint",
            "text": "Close other tiddlers"
        },
        "$:/language/Buttons/ControlPanel/Caption": {
            "title": "$:/language/Buttons/ControlPanel/Caption",
            "text": "control panel"
        },
        "$:/language/Buttons/ControlPanel/Hint": {
            "title": "$:/language/Buttons/ControlPanel/Hint",
            "text": "Open control panel"
        },
        "$:/language/Buttons/CopyToClipboard/Caption": {
            "title": "$:/language/Buttons/CopyToClipboard/Caption",
            "text": "copy to clipboard"
        },
        "$:/language/Buttons/CopyToClipboard/Hint": {
            "title": "$:/language/Buttons/CopyToClipboard/Hint",
            "text": "Copy this text to the clipboard"
        },
        "$:/language/Buttons/Delete/Caption": {
            "title": "$:/language/Buttons/Delete/Caption",
            "text": "delete"
        },
        "$:/language/Buttons/Delete/Hint": {
            "title": "$:/language/Buttons/Delete/Hint",
            "text": "Delete this tiddler"
        },
        "$:/language/Buttons/Edit/Caption": {
            "title": "$:/language/Buttons/Edit/Caption",
            "text": "edit"
        },
        "$:/language/Buttons/Edit/Hint": {
            "title": "$:/language/Buttons/Edit/Hint",
            "text": "Edit this tiddler"
        },
        "$:/language/Buttons/Encryption/Caption": {
            "title": "$:/language/Buttons/Encryption/Caption",
            "text": "encryption"
        },
        "$:/language/Buttons/Encryption/Hint": {
            "title": "$:/language/Buttons/Encryption/Hint",
            "text": "Set or clear a password for saving this wiki"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
            "text": "clear password"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
            "text": "Clear the password and save this wiki without encryption"
        },
        "$:/language/Buttons/Encryption/SetPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Caption",
            "text": "set password"
        },
        "$:/language/Buttons/Encryption/SetPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Hint",
            "text": "Set a password for saving this wiki with encryption"
        },
        "$:/language/Buttons/ExportPage/Caption": {
            "title": "$:/language/Buttons/ExportPage/Caption",
            "text": "export all"
        },
        "$:/language/Buttons/ExportPage/Hint": {
            "title": "$:/language/Buttons/ExportPage/Hint",
            "text": "Export all tiddlers"
        },
        "$:/language/Buttons/ExportTiddler/Caption": {
            "title": "$:/language/Buttons/ExportTiddler/Caption",
            "text": "export tiddler"
        },
        "$:/language/Buttons/ExportTiddler/Hint": {
            "title": "$:/language/Buttons/ExportTiddler/Hint",
            "text": "Export tiddler"
        },
        "$:/language/Buttons/ExportTiddlers/Caption": {
            "title": "$:/language/Buttons/ExportTiddlers/Caption",
            "text": "export tiddlers"
        },
        "$:/language/Buttons/ExportTiddlers/Hint": {
            "title": "$:/language/Buttons/ExportTiddlers/Hint",
            "text": "Export tiddlers"
        },
        "$:/language/Buttons/SidebarSearch/Hint": {
            "title": "$:/language/Buttons/SidebarSearch/Hint",
            "text": "Select the sidebar search field"
        },
        "$:/language/Buttons/Fold/Caption": {
            "title": "$:/language/Buttons/Fold/Caption",
            "text": "fold tiddler"
        },
        "$:/language/Buttons/Fold/Hint": {
            "title": "$:/language/Buttons/Fold/Hint",
            "text": "Fold the body of this tiddler"
        },
        "$:/language/Buttons/Fold/FoldBar/Caption": {
            "title": "$:/language/Buttons/Fold/FoldBar/Caption",
            "text": "fold-bar"
        },
        "$:/language/Buttons/Fold/FoldBar/Hint": {
            "title": "$:/language/Buttons/Fold/FoldBar/Hint",
            "text": "Optional bars to fold and unfold tiddlers"
        },
        "$:/language/Buttons/Unfold/Caption": {
            "title": "$:/language/Buttons/Unfold/Caption",
            "text": "unfold tiddler"
        },
        "$:/language/Buttons/Unfold/Hint": {
            "title": "$:/language/Buttons/Unfold/Hint",
            "text": "Unfold the body of this tiddler"
        },
        "$:/language/Buttons/FoldOthers/Caption": {
            "title": "$:/language/Buttons/FoldOthers/Caption",
            "text": "fold other tiddlers"
        },
        "$:/language/Buttons/FoldOthers/Hint": {
            "title": "$:/language/Buttons/FoldOthers/Hint",
            "text": "Fold the bodies of other opened tiddlers"
        },
        "$:/language/Buttons/FoldAll/Caption": {
            "title": "$:/language/Buttons/FoldAll/Caption",
            "text": "fold all tiddlers"
        },
        "$:/language/Buttons/FoldAll/Hint": {
            "title": "$:/language/Buttons/FoldAll/Hint",
            "text": "Fold the bodies of all opened tiddlers"
        },
        "$:/language/Buttons/UnfoldAll/Caption": {
            "title": "$:/language/Buttons/UnfoldAll/Caption",
            "text": "unfold all tiddlers"
        },
        "$:/language/Buttons/UnfoldAll/Hint": {
            "title": "$:/language/Buttons/UnfoldAll/Hint",
            "text": "Unfold the bodies of all opened tiddlers"
        },
        "$:/language/Buttons/FullScreen/Caption": {
            "title": "$:/language/Buttons/FullScreen/Caption",
            "text": "full-screen"
        },
        "$:/language/Buttons/FullScreen/Hint": {
            "title": "$:/language/Buttons/FullScreen/Hint",
            "text": "Enter or leave full-screen mode"
        },
        "$:/language/Buttons/Help/Caption": {
            "title": "$:/language/Buttons/Help/Caption",
            "text": "help"
        },
        "$:/language/Buttons/Help/Hint": {
            "title": "$:/language/Buttons/Help/Hint",
            "text": "Show help panel"
        },
        "$:/language/Buttons/Import/Caption": {
            "title": "$:/language/Buttons/Import/Caption",
            "text": "import"
        },
        "$:/language/Buttons/Import/Hint": {
            "title": "$:/language/Buttons/Import/Hint",
            "text": "Import many types of file including text, image, TiddlyWiki or JSON"
        },
        "$:/language/Buttons/Info/Caption": {
            "title": "$:/language/Buttons/Info/Caption",
            "text": "info"
        },
        "$:/language/Buttons/Info/Hint": {
            "title": "$:/language/Buttons/Info/Hint",
            "text": "Show information for this tiddler"
        },
        "$:/language/Buttons/Home/Caption": {
            "title": "$:/language/Buttons/Home/Caption",
            "text": "home"
        },
        "$:/language/Buttons/Home/Hint": {
            "title": "$:/language/Buttons/Home/Hint",
            "text": "Open the default tiddlers"
        },
        "$:/language/Buttons/Language/Caption": {
            "title": "$:/language/Buttons/Language/Caption",
            "text": "language"
        },
        "$:/language/Buttons/Language/Hint": {
            "title": "$:/language/Buttons/Language/Hint",
            "text": "Choose the user interface language"
        },
        "$:/language/Buttons/Manager/Caption": {
            "title": "$:/language/Buttons/Manager/Caption",
            "text": "tiddler manager"
        },
        "$:/language/Buttons/Manager/Hint": {
            "title": "$:/language/Buttons/Manager/Hint",
            "text": "Open tiddler manager"
        },
        "$:/language/Buttons/More/Caption": {
            "title": "$:/language/Buttons/More/Caption",
            "text": "more"
        },
        "$:/language/Buttons/More/Hint": {
            "title": "$:/language/Buttons/More/Hint",
            "text": "More actions"
        },
        "$:/language/Buttons/NewHere/Caption": {
            "title": "$:/language/Buttons/NewHere/Caption",
            "text": "new here"
        },
        "$:/language/Buttons/NewHere/Hint": {
            "title": "$:/language/Buttons/NewHere/Hint",
            "text": "Create a new tiddler tagged with this one"
        },
        "$:/language/Buttons/NewJournal/Caption": {
            "title": "$:/language/Buttons/NewJournal/Caption",
            "text": "new journal"
        },
        "$:/language/Buttons/NewJournal/Hint": {
            "title": "$:/language/Buttons/NewJournal/Hint",
            "text": "Create a new journal tiddler"
        },
        "$:/language/Buttons/NewJournalHere/Caption": {
            "title": "$:/language/Buttons/NewJournalHere/Caption",
            "text": "new journal here"
        },
        "$:/language/Buttons/NewJournalHere/Hint": {
            "title": "$:/language/Buttons/NewJournalHere/Hint",
            "text": "Create a new journal tiddler tagged with this one"
        },
        "$:/language/Buttons/NewImage/Caption": {
            "title": "$:/language/Buttons/NewImage/Caption",
            "text": "new image"
        },
        "$:/language/Buttons/NewImage/Hint": {
            "title": "$:/language/Buttons/NewImage/Hint",
            "text": "Create a new image tiddler"
        },
        "$:/language/Buttons/NewMarkdown/Caption": {
            "title": "$:/language/Buttons/NewMarkdown/Caption",
            "text": "new Markdown tiddler"
        },
        "$:/language/Buttons/NewMarkdown/Hint": {
            "title": "$:/language/Buttons/NewMarkdown/Hint",
            "text": "Create a new Markdown tiddler"
        },
        "$:/language/Buttons/NewTiddler/Caption": {
            "title": "$:/language/Buttons/NewTiddler/Caption",
            "text": "new tiddler"
        },
        "$:/language/Buttons/NewTiddler/Hint": {
            "title": "$:/language/Buttons/NewTiddler/Hint",
            "text": "Create a new tiddler"
        },
        "$:/language/Buttons/OpenWindow/Caption": {
            "title": "$:/language/Buttons/OpenWindow/Caption",
            "text": "open in new window"
        },
        "$:/language/Buttons/OpenWindow/Hint": {
            "title": "$:/language/Buttons/OpenWindow/Hint",
            "text": "Open tiddler in new window"
        },
        "$:/language/Buttons/Palette/Caption": {
            "title": "$:/language/Buttons/Palette/Caption",
            "text": "palette"
        },
        "$:/language/Buttons/Palette/Hint": {
            "title": "$:/language/Buttons/Palette/Hint",
            "text": "Choose the colour palette"
        },
        "$:/language/Buttons/Permalink/Caption": {
            "title": "$:/language/Buttons/Permalink/Caption",
            "text": "permalink"
        },
        "$:/language/Buttons/Permalink/Hint": {
            "title": "$:/language/Buttons/Permalink/Hint",
            "text": "Set browser address bar to a direct link to this tiddler"
        },
        "$:/language/Buttons/Permaview/Caption": {
            "title": "$:/language/Buttons/Permaview/Caption",
            "text": "permaview"
        },
        "$:/language/Buttons/Permaview/Hint": {
            "title": "$:/language/Buttons/Permaview/Hint",
            "text": "Set browser address bar to a direct link to all the tiddlers in this story"
        },
        "$:/language/Buttons/Print/Caption": {
            "title": "$:/language/Buttons/Print/Caption",
            "text": "print page"
        },
        "$:/language/Buttons/Print/Hint": {
            "title": "$:/language/Buttons/Print/Hint",
            "text": "Print the current page"
        },
        "$:/language/Buttons/Refresh/Caption": {
            "title": "$:/language/Buttons/Refresh/Caption",
            "text": "refresh"
        },
        "$:/language/Buttons/Refresh/Hint": {
            "title": "$:/language/Buttons/Refresh/Hint",
            "text": "Perform a full refresh of the wiki"
        },
        "$:/language/Buttons/Save/Caption": {
            "title": "$:/language/Buttons/Save/Caption",
            "text": "ok"
        },
        "$:/language/Buttons/Save/Hint": {
            "title": "$:/language/Buttons/Save/Hint",
            "text": "Confirm changes to this tiddler"
        },
        "$:/language/Buttons/SaveWiki/Caption": {
            "title": "$:/language/Buttons/SaveWiki/Caption",
            "text": "save changes"
        },
        "$:/language/Buttons/SaveWiki/Hint": {
            "title": "$:/language/Buttons/SaveWiki/Hint",
            "text": "Save changes"
        },
        "$:/language/Buttons/StoryView/Caption": {
            "title": "$:/language/Buttons/StoryView/Caption",
            "text": "storyview"
        },
        "$:/language/Buttons/StoryView/Hint": {
            "title": "$:/language/Buttons/StoryView/Hint",
            "text": "Choose the story visualisation"
        },
        "$:/language/Buttons/HideSideBar/Caption": {
            "title": "$:/language/Buttons/HideSideBar/Caption",
            "text": "hide sidebar"
        },
        "$:/language/Buttons/HideSideBar/Hint": {
            "title": "$:/language/Buttons/HideSideBar/Hint",
            "text": "Hide sidebar"
        },
        "$:/language/Buttons/ShowSideBar/Caption": {
            "title": "$:/language/Buttons/ShowSideBar/Caption",
            "text": "show sidebar"
        },
        "$:/language/Buttons/ShowSideBar/Hint": {
            "title": "$:/language/Buttons/ShowSideBar/Hint",
            "text": "Show sidebar"
        },
        "$:/language/Buttons/TagManager/Caption": {
            "title": "$:/language/Buttons/TagManager/Caption",
            "text": "tag manager"
        },
        "$:/language/Buttons/TagManager/Hint": {
            "title": "$:/language/Buttons/TagManager/Hint",
            "text": "Open tag manager"
        },
        "$:/language/Buttons/Timestamp/Caption": {
            "title": "$:/language/Buttons/Timestamp/Caption",
            "text": "timestamps"
        },
        "$:/language/Buttons/Timestamp/Hint": {
            "title": "$:/language/Buttons/Timestamp/Hint",
            "text": "Choose whether modifications update timestamps"
        },
        "$:/language/Buttons/Timestamp/On/Caption": {
            "title": "$:/language/Buttons/Timestamp/On/Caption",
            "text": "timestamps are on"
        },
        "$:/language/Buttons/Timestamp/On/Hint": {
            "title": "$:/language/Buttons/Timestamp/On/Hint",
            "text": "Update timestamps when tiddlers are modified"
        },
        "$:/language/Buttons/Timestamp/Off/Caption": {
            "title": "$:/language/Buttons/Timestamp/Off/Caption",
            "text": "timestamps are off"
        },
        "$:/language/Buttons/Timestamp/Off/Hint": {
            "title": "$:/language/Buttons/Timestamp/Off/Hint",
            "text": "Don't update timestamps when tiddlers are modified"
        },
        "$:/language/Buttons/Theme/Caption": {
            "title": "$:/language/Buttons/Theme/Caption",
            "text": "theme"
        },
        "$:/language/Buttons/Theme/Hint": {
            "title": "$:/language/Buttons/Theme/Hint",
            "text": "Choose the display theme"
        },
        "$:/language/Buttons/Bold/Caption": {
            "title": "$:/language/Buttons/Bold/Caption",
            "text": "bold"
        },
        "$:/language/Buttons/Bold/Hint": {
            "title": "$:/language/Buttons/Bold/Hint",
            "text": "Apply bold formatting to selection"
        },
        "$:/language/Buttons/Clear/Caption": {
            "title": "$:/language/Buttons/Clear/Caption",
            "text": "clear"
        },
        "$:/language/Buttons/Clear/Hint": {
            "title": "$:/language/Buttons/Clear/Hint",
            "text": "Clear image to solid colour"
        },
        "$:/language/Buttons/EditorHeight/Caption": {
            "title": "$:/language/Buttons/EditorHeight/Caption",
            "text": "editor height"
        },
        "$:/language/Buttons/EditorHeight/Caption/Auto": {
            "title": "$:/language/Buttons/EditorHeight/Caption/Auto",
            "text": "Automatically adjust height to fit content"
        },
        "$:/language/Buttons/EditorHeight/Caption/Fixed": {
            "title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
            "text": "Fixed height:"
        },
        "$:/language/Buttons/EditorHeight/Hint": {
            "title": "$:/language/Buttons/EditorHeight/Hint",
            "text": "Choose the height of the text editor"
        },
        "$:/language/Buttons/Excise/Caption": {
            "title": "$:/language/Buttons/Excise/Caption",
            "text": "excise"
        },
        "$:/language/Buttons/Excise/Caption/Excise": {
            "title": "$:/language/Buttons/Excise/Caption/Excise",
            "text": "Perform excision"
        },
        "$:/language/Buttons/Excise/Caption/MacroName": {
            "title": "$:/language/Buttons/Excise/Caption/MacroName",
            "text": "Macro name:"
        },
        "$:/language/Buttons/Excise/Caption/NewTitle": {
            "title": "$:/language/Buttons/Excise/Caption/NewTitle",
            "text": "Title of new tiddler:"
        },
        "$:/language/Buttons/Excise/Caption/Replace": {
            "title": "$:/language/Buttons/Excise/Caption/Replace",
            "text": "Replace excised text with:"
        },
        "$:/language/Buttons/Excise/Caption/Replace/Macro": {
            "title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
            "text": "macro"
        },
        "$:/language/Buttons/Excise/Caption/Replace/Link": {
            "title": "$:/language/Buttons/Excise/Caption/Replace/Link",
            "text": "link"
        },
        "$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
            "title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
            "text": "transclusion"
        },
        "$:/language/Buttons/Excise/Caption/Tag": {
            "title": "$:/language/Buttons/Excise/Caption/Tag",
            "text": "Tag new tiddler with the title of this tiddler"
        },
        "$:/language/Buttons/Excise/Caption/TiddlerExists": {
            "title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
            "text": "Warning: tiddler already exists"
        },
        "$:/language/Buttons/Excise/Hint": {
            "title": "$:/language/Buttons/Excise/Hint",
            "text": "Excise the selected text into a new tiddler"
        },
        "$:/language/Buttons/Heading1/Caption": {
            "title": "$:/language/Buttons/Heading1/Caption",
            "text": "heading 1"
        },
        "$:/language/Buttons/Heading1/Hint": {
            "title": "$:/language/Buttons/Heading1/Hint",
            "text": "Apply heading level 1 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading2/Caption": {
            "title": "$:/language/Buttons/Heading2/Caption",
            "text": "heading 2"
        },
        "$:/language/Buttons/Heading2/Hint": {
            "title": "$:/language/Buttons/Heading2/Hint",
            "text": "Apply heading level 2 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading3/Caption": {
            "title": "$:/language/Buttons/Heading3/Caption",
            "text": "heading 3"
        },
        "$:/language/Buttons/Heading3/Hint": {
            "title": "$:/language/Buttons/Heading3/Hint",
            "text": "Apply heading level 3 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading4/Caption": {
            "title": "$:/language/Buttons/Heading4/Caption",
            "text": "heading 4"
        },
        "$:/language/Buttons/Heading4/Hint": {
            "title": "$:/language/Buttons/Heading4/Hint",
            "text": "Apply heading level 4 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading5/Caption": {
            "title": "$:/language/Buttons/Heading5/Caption",
            "text": "heading 5"
        },
        "$:/language/Buttons/Heading5/Hint": {
            "title": "$:/language/Buttons/Heading5/Hint",
            "text": "Apply heading level 5 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading6/Caption": {
            "title": "$:/language/Buttons/Heading6/Caption",
            "text": "heading 6"
        },
        "$:/language/Buttons/Heading6/Hint": {
            "title": "$:/language/Buttons/Heading6/Hint",
            "text": "Apply heading level 6 formatting to lines containing selection"
        },
        "$:/language/Buttons/Italic/Caption": {
            "title": "$:/language/Buttons/Italic/Caption",
            "text": "italic"
        },
        "$:/language/Buttons/Italic/Hint": {
            "title": "$:/language/Buttons/Italic/Hint",
            "text": "Apply italic formatting to selection"
        },
        "$:/language/Buttons/LineWidth/Caption": {
            "title": "$:/language/Buttons/LineWidth/Caption",
            "text": "line width"
        },
        "$:/language/Buttons/LineWidth/Hint": {
            "title": "$:/language/Buttons/LineWidth/Hint",
            "text": "Set line width for painting"
        },
        "$:/language/Buttons/Link/Caption": {
            "title": "$:/language/Buttons/Link/Caption",
            "text": "link"
        },
        "$:/language/Buttons/Link/Hint": {
            "title": "$:/language/Buttons/Link/Hint",
            "text": "Create wikitext link"
        },
        "$:/language/Buttons/Linkify/Caption": {
            "title": "$:/language/Buttons/Linkify/Caption",
            "text": "wikilink"
        },
        "$:/language/Buttons/Linkify/Hint": {
            "title": "$:/language/Buttons/Linkify/Hint",
            "text": "Wrap selection in square brackets"
        },
        "$:/language/Buttons/ListBullet/Caption": {
            "title": "$:/language/Buttons/ListBullet/Caption",
            "text": "bulleted list"
        },
        "$:/language/Buttons/ListBullet/Hint": {
            "title": "$:/language/Buttons/ListBullet/Hint",
            "text": "Apply bulleted list formatting to lines containing selection"
        },
        "$:/language/Buttons/ListNumber/Caption": {
            "title": "$:/language/Buttons/ListNumber/Caption",
            "text": "numbered list"
        },
        "$:/language/Buttons/ListNumber/Hint": {
            "title": "$:/language/Buttons/ListNumber/Hint",
            "text": "Apply numbered list formatting to lines containing selection"
        },
        "$:/language/Buttons/MonoBlock/Caption": {
            "title": "$:/language/Buttons/MonoBlock/Caption",
            "text": "monospaced block"
        },
        "$:/language/Buttons/MonoBlock/Hint": {
            "title": "$:/language/Buttons/MonoBlock/Hint",
            "text": "Apply monospaced block formatting to lines containing selection"
        },
        "$:/language/Buttons/MonoLine/Caption": {
            "title": "$:/language/Buttons/MonoLine/Caption",
            "text": "monospaced"
        },
        "$:/language/Buttons/MonoLine/Hint": {
            "title": "$:/language/Buttons/MonoLine/Hint",
            "text": "Apply monospaced character formatting to selection"
        },
        "$:/language/Buttons/Opacity/Caption": {
            "title": "$:/language/Buttons/Opacity/Caption",
            "text": "opacity"
        },
        "$:/language/Buttons/Opacity/Hint": {
            "title": "$:/language/Buttons/Opacity/Hint",
            "text": "Set painting opacity"
        },
        "$:/language/Buttons/Paint/Caption": {
            "title": "$:/language/Buttons/Paint/Caption",
            "text": "paint colour"
        },
        "$:/language/Buttons/Paint/Hint": {
            "title": "$:/language/Buttons/Paint/Hint",
            "text": "Set painting colour"
        },
        "$:/language/Buttons/Picture/Caption": {
            "title": "$:/language/Buttons/Picture/Caption",
            "text": "picture"
        },
        "$:/language/Buttons/Picture/Hint": {
            "title": "$:/language/Buttons/Picture/Hint",
            "text": "Insert picture"
        },
        "$:/language/Buttons/Preview/Caption": {
            "title": "$:/language/Buttons/Preview/Caption",
            "text": "preview"
        },
        "$:/language/Buttons/Preview/Hint": {
            "title": "$:/language/Buttons/Preview/Hint",
            "text": "Show preview pane"
        },
        "$:/language/Buttons/PreviewType/Caption": {
            "title": "$:/language/Buttons/PreviewType/Caption",
            "text": "preview type"
        },
        "$:/language/Buttons/PreviewType/Hint": {
            "title": "$:/language/Buttons/PreviewType/Hint",
            "text": "Choose preview type"
        },
        "$:/language/Buttons/Quote/Caption": {
            "title": "$:/language/Buttons/Quote/Caption",
            "text": "quote"
        },
        "$:/language/Buttons/Quote/Hint": {
            "title": "$:/language/Buttons/Quote/Hint",
            "text": "Apply quoted text formatting to lines containing selection"
        },
        "$:/language/Buttons/RotateLeft/Caption": {
            "title": "$:/language/Buttons/RotateLeft/Caption",
            "text": "rotate left"
        },
        "$:/language/Buttons/RotateLeft/Hint": {
            "title": "$:/language/Buttons/RotateLeft/Hint",
            "text": "Rotate image left by 90 degrees"
        },
        "$:/language/Buttons/Size/Caption": {
            "title": "$:/language/Buttons/Size/Caption",
            "text": "image size"
        },
        "$:/language/Buttons/Size/Caption/Height": {
            "title": "$:/language/Buttons/Size/Caption/Height",
            "text": "Height:"
        },
        "$:/language/Buttons/Size/Caption/Resize": {
            "title": "$:/language/Buttons/Size/Caption/Resize",
            "text": "Resize image"
        },
        "$:/language/Buttons/Size/Caption/Width": {
            "title": "$:/language/Buttons/Size/Caption/Width",
            "text": "Width:"
        },
        "$:/language/Buttons/Size/Hint": {
            "title": "$:/language/Buttons/Size/Hint",
            "text": "Set image size"
        },
        "$:/language/Buttons/Stamp/Caption": {
            "title": "$:/language/Buttons/Stamp/Caption",
            "text": "stamp"
        },
        "$:/language/Buttons/Stamp/Caption/New": {
            "title": "$:/language/Buttons/Stamp/Caption/New",
            "text": "Add your own"
        },
        "$:/language/Buttons/Stamp/Hint": {
            "title": "$:/language/Buttons/Stamp/Hint",
            "text": "Insert a preconfigured snippet of text"
        },
        "$:/language/Buttons/Stamp/New/Title": {
            "title": "$:/language/Buttons/Stamp/New/Title",
            "text": "Name as shown in menu"
        },
        "$:/language/Buttons/Stamp/New/Text": {
            "title": "$:/language/Buttons/Stamp/New/Text",
            "text": "Text of snippet. (Remember to add a descriptive title in the caption field)."
        },
        "$:/language/Buttons/Strikethrough/Caption": {
            "title": "$:/language/Buttons/Strikethrough/Caption",
            "text": "strikethrough"
        },
        "$:/language/Buttons/Strikethrough/Hint": {
            "title": "$:/language/Buttons/Strikethrough/Hint",
            "text": "Apply strikethrough formatting to selection"
        },
        "$:/language/Buttons/Subscript/Caption": {
            "title": "$:/language/Buttons/Subscript/Caption",
            "text": "subscript"
        },
        "$:/language/Buttons/Subscript/Hint": {
            "title": "$:/language/Buttons/Subscript/Hint",
            "text": "Apply subscript formatting to selection"
        },
        "$:/language/Buttons/Superscript/Caption": {
            "title": "$:/language/Buttons/Superscript/Caption",
            "text": "superscript"
        },
        "$:/language/Buttons/Superscript/Hint": {
            "title": "$:/language/Buttons/Superscript/Hint",
            "text": "Apply superscript formatting to selection"
        },
        "$:/language/Buttons/ToggleSidebar/Hint": {
            "title": "$:/language/Buttons/ToggleSidebar/Hint",
            "text": "Toggle the sidebar visibility"
        },
        "$:/language/Buttons/Transcludify/Caption": {
            "title": "$:/language/Buttons/Transcludify/Caption",
            "text": "transclusion"
        },
        "$:/language/Buttons/Transcludify/Hint": {
            "title": "$:/language/Buttons/Transcludify/Hint",
            "text": "Wrap selection in curly brackets"
        },
        "$:/language/Buttons/Underline/Caption": {
            "title": "$:/language/Buttons/Underline/Caption",
            "text": "underline"
        },
        "$:/language/Buttons/Underline/Hint": {
            "title": "$:/language/Buttons/Underline/Hint",
            "text": "Apply underline formatting to selection"
        },
        "$:/language/ControlPanel/Advanced/Caption": {
            "title": "$:/language/ControlPanel/Advanced/Caption",
            "text": "Advanced"
        },
        "$:/language/ControlPanel/Advanced/Hint": {
            "title": "$:/language/ControlPanel/Advanced/Hint",
            "text": "Internal information about this TiddlyWiki"
        },
        "$:/language/ControlPanel/Appearance/Caption": {
            "title": "$:/language/ControlPanel/Appearance/Caption",
            "text": "Appearance"
        },
        "$:/language/ControlPanel/Appearance/Hint": {
            "title": "$:/language/ControlPanel/Appearance/Hint",
            "text": "Ways to customise the appearance of your TiddlyWiki."
        },
        "$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
            "title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
            "text": "Animation duration"
        },
        "$:/language/ControlPanel/Basics/AutoFocus/Prompt": {
            "title": "$:/language/ControlPanel/Basics/AutoFocus/Prompt",
            "text": "Default focus field for new tiddlers"
        },
        "$:/language/ControlPanel/Basics/Caption": {
            "title": "$:/language/ControlPanel/Basics/Caption",
            "text": "Basics"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
            "text": "Use &#91;&#91;double square brackets&#93;&#93; for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
            "text": "Default tiddlers"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
            "text": "Choose which tiddlers are displayed at startup"
        },
        "$:/language/ControlPanel/Basics/Language/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Language/Prompt",
            "text": "Hello! Current language:"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
            "text": "Title of new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt",
            "text": "Text for new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
            "text": "Tags for new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt",
            "text": "Title of new tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt",
            "text": "Tags for new tiddlers"
        },
        "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
            "text": "Number of overridden shadow tiddlers"
        },
        "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
            "text": "Number of shadow tiddlers"
        },
        "$:/language/ControlPanel/Basics/Subtitle/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
            "text": "Subtitle"
        },
        "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
            "text": "Number of system tiddlers"
        },
        "$:/language/ControlPanel/Basics/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tags/Prompt",
            "text": "Number of tags"
        },
        "$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
            "text": "Number of tiddlers"
        },
        "$:/language/ControlPanel/Basics/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Title/Prompt",
            "text": "Title of this ~TiddlyWiki"
        },
        "$:/language/ControlPanel/Basics/Username/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Username/Prompt",
            "text": "Username for signing edits"
        },
        "$:/language/ControlPanel/Basics/Version/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Version/Prompt",
            "text": "~TiddlyWiki version"
        },
        "$:/language/ControlPanel/EditorTypes/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Caption",
            "text": "Editor Types"
        },
        "$:/language/ControlPanel/EditorTypes/Editor/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
            "text": "Editor"
        },
        "$:/language/ControlPanel/EditorTypes/Hint": {
            "title": "$:/language/ControlPanel/EditorTypes/Hint",
            "text": "These tiddlers determine which editor is used to edit specific tiddler types."
        },
        "$:/language/ControlPanel/EditorTypes/Type/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
            "text": "Type"
        },
        "$:/language/ControlPanel/Info/Caption": {
            "title": "$:/language/ControlPanel/Info/Caption",
            "text": "Info"
        },
        "$:/language/ControlPanel/Info/Hint": {
            "title": "$:/language/ControlPanel/Info/Hint",
            "text": "Information about this TiddlyWiki"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
            "text": "Type shortcut here"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
            "text": "add shortcut"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Caption": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
            "text": "Keyboard Shortcuts"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Hint": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
            "text": "Manage keyboard shortcut assignments"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
            "text": "No keyboard shortcuts assigned"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
            "text": "remove keyboard shortcut"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
            "text": "All platforms"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
            "text": "Macintosh platform only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
            "text": "Non-Macintosh platforms only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
            "text": "Linux platform only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
            "text": "Non-Linux platforms only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
            "text": "Windows platform only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
            "text": "Non-Windows platforms only"
        },
        "$:/language/ControlPanel/LoadedModules/Caption": {
            "title": "$:/language/ControlPanel/LoadedModules/Caption",
            "text": "Loaded Modules"
        },
        "$:/language/ControlPanel/LoadedModules/Hint": {
            "title": "$:/language/ControlPanel/LoadedModules/Hint",
            "text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
        },
        "$:/language/ControlPanel/Palette/Caption": {
            "title": "$:/language/ControlPanel/Palette/Caption",
            "text": "Palette"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
            "text": "clone"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
            "text": "It is recommended that you clone this shadow palette before editing it"
        },
        "$:/language/ControlPanel/Palette/Editor/Delete/Hint": {
            "title": "$:/language/ControlPanel/Palette/Editor/Delete/Hint",
            "text": "delete this entry from the current palette"
        },
        "$:/language/ControlPanel/Palette/Editor/Names/External/Show": {
            "title": "$:/language/ControlPanel/Palette/Editor/Names/External/Show",
            "text": "Show color names that are not part of the current palette"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
            "text": "This shadow palette has been modified"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt",
            "text": "Editing"
        },
        "$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
            "text": "reset"
        },
        "$:/language/ControlPanel/Palette/HideEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
            "text": "hide editor"
        },
        "$:/language/ControlPanel/Palette/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Prompt",
            "text": "Current palette:"
        },
        "$:/language/ControlPanel/Palette/ShowEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
            "text": "show editor"
        },
        "$:/language/ControlPanel/Parsing/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Caption",
            "text": "Parsing"
        },
        "$:/language/ControlPanel/Parsing/Hint": {
            "title": "$:/language/ControlPanel/Parsing/Hint",
            "text": "Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent <$text text=\"TiddlyWiki\"/> from functioning correctly. Use [[safe mode|https://tiddlywiki.com/#SafeMode]] to restore normal operation."
        },
        "$:/language/ControlPanel/Parsing/Block/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Block/Caption",
            "text": "Block Parse Rules"
        },
        "$:/language/ControlPanel/Parsing/Inline/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Inline/Caption",
            "text": "Inline Parse Rules"
        },
        "$:/language/ControlPanel/Parsing/Pragma/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
            "text": "Pragma Parse Rules"
        },
        "$:/language/ControlPanel/Plugins/Add/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Add/Caption",
            "text": "Get more plugins"
        },
        "$:/language/ControlPanel/Plugins/Add/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Add/Hint",
            "text": "Install plugins from the official library"
        },
        "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
            "title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
            "text": "This plugin is already installed at version <$text text=<<installedVersion>>/>"
        },
        "$:/language/ControlPanel/Plugins/AlsoRequires": {
            "title": "$:/language/ControlPanel/Plugins/AlsoRequires",
            "text": "Also requires:"
        },
        "$:/language/ControlPanel/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Caption",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Disable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Caption",
            "text": "disable"
        },
        "$:/language/ControlPanel/Plugins/Disable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Hint",
            "text": "Disable this plugin when reloading page"
        },
        "$:/language/ControlPanel/Plugins/Disabled/Status": {
            "title": "$:/language/ControlPanel/Plugins/Disabled/Status",
            "text": "(disabled)"
        },
        "$:/language/ControlPanel/Plugins/Downgrade/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Downgrade/Caption",
            "text": "downgrade"
        },
        "$:/language/ControlPanel/Plugins/Empty/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Empty/Hint",
            "text": "None"
        },
        "$:/language/ControlPanel/Plugins/Enable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Caption",
            "text": "enable"
        },
        "$:/language/ControlPanel/Plugins/Enable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Hint",
            "text": "Enable this plugin when reloading page"
        },
        "$:/language/ControlPanel/Plugins/Install/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Install/Caption",
            "text": "install"
        },
        "$:/language/ControlPanel/Plugins/Installed/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Installed/Hint",
            "text": "Currently installed plugins:"
        },
        "$:/language/ControlPanel/Plugins/Languages/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Caption",
            "text": "Languages"
        },
        "$:/language/ControlPanel/Plugins/Languages/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Hint",
            "text": "Language pack plugins"
        },
        "$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
            "title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
            "text": "No ''\"<$text text=<<currentTab>>/>\"'' found"
        },
        "$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
            "title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
            "text": "This plugin is not currently installed"
        },
        "$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
            "title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
            "text": "open plugin library"
        },
        "$:/language/ControlPanel/Plugins/ClosePluginLibrary": {
            "title": "$:/language/ControlPanel/Plugins/ClosePluginLibrary",
            "text": "close plugin library"
        },
        "$:/language/ControlPanel/Plugins/PluginWillRequireReload": {
            "title": "$:/language/ControlPanel/Plugins/PluginWillRequireReload",
            "text": "(requires reload)"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Reinstall/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
            "text": "reinstall"
        },
        "$:/language/ControlPanel/Plugins/Themes/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Caption",
            "text": "Themes"
        },
        "$:/language/ControlPanel/Plugins/Themes/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Hint",
            "text": "Theme plugins"
        },
        "$:/language/ControlPanel/Plugins/Update/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Update/Caption",
            "text": "update"
        },
        "$:/language/ControlPanel/Plugins/Updates/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Updates/Caption",
            "text": "Updates"
        },
        "$:/language/ControlPanel/Plugins/Updates/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Updates/Hint",
            "text": "Available updates to installed plugins"
        },
        "$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption",
            "text": "Update <<update-count>> plugins"
        },
        "$:/language/ControlPanel/Plugins/SubPluginPrompt": {
            "title": "$:/language/ControlPanel/Plugins/SubPluginPrompt",
            "text": "With <<count>> sub-plugins available"
        },
        "$:/language/ControlPanel/Saving/Caption": {
            "title": "$:/language/ControlPanel/Saving/Caption",
            "text": "Saving"
        },
        "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description": {
            "title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description",
            "text": "Permit automatic saving for the download saver"
        },
        "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint": {
            "title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint",
            "text": "Enable Autosave for Download Saver"
        },
        "$:/language/ControlPanel/Saving/DownloadSaver/Caption": {
            "title": "$:/language/ControlPanel/Saving/DownloadSaver/Caption",
            "text": "Download Saver"
        },
        "$:/language/ControlPanel/Saving/DownloadSaver/Hint": {
            "title": "$:/language/ControlPanel/Saving/DownloadSaver/Hint",
            "text": "These settings apply to the HTML5-compatible download saver"
        },
        "$:/language/ControlPanel/Saving/General/Caption": {
            "title": "$:/language/ControlPanel/Saving/General/Caption",
            "text": "General"
        },
        "$:/language/ControlPanel/Saving/General/Hint": {
            "title": "$:/language/ControlPanel/Saving/General/Hint",
            "text": "These settings apply to all the loaded savers"
        },
        "$:/language/ControlPanel/Saving/Hint": {
            "title": "$:/language/ControlPanel/Saving/Hint",
            "text": "Settings used for saving the entire TiddlyWiki as a single file via a saver module"
        },
        "$:/language/ControlPanel/Saving/GitService/Branch": {
            "title": "$:/language/ControlPanel/Saving/GitService/Branch",
            "text": "Target branch for saving"
        },
        "$:/language/ControlPanel/Saving/GitService/CommitMessage": {
            "title": "$:/language/ControlPanel/Saving/GitService/CommitMessage",
            "text": "Saved by TiddlyWiki"
        },
        "$:/language/ControlPanel/Saving/GitService/Description": {
            "title": "$:/language/ControlPanel/Saving/GitService/Description",
            "text": "These settings are only used when saving to <<service-name>>"
        },
        "$:/language/ControlPanel/Saving/GitService/Filename": {
            "title": "$:/language/ControlPanel/Saving/GitService/Filename",
            "text": "Filename of target file (e.g. `index.html`)"
        },
        "$:/language/ControlPanel/Saving/GitService/Path": {
            "title": "$:/language/ControlPanel/Saving/GitService/Path",
            "text": "Path to target file (e.g. `/wiki/`)"
        },
        "$:/language/ControlPanel/Saving/GitService/Repo": {
            "title": "$:/language/ControlPanel/Saving/GitService/Repo",
            "text": "Target repository (e.g. `Jermolene/TiddlyWiki5`)"
        },
        "$:/language/ControlPanel/Saving/GitService/ServerURL": {
            "title": "$:/language/ControlPanel/Saving/GitService/ServerURL",
            "text": "Server API URL"
        },
        "$:/language/ControlPanel/Saving/GitService/UserName": {
            "title": "$:/language/ControlPanel/Saving/GitService/UserName",
            "text": "Username"
        },
        "$:/language/ControlPanel/Saving/GitService/GitHub/Caption": {
            "title": "$:/language/ControlPanel/Saving/GitService/GitHub/Caption",
            "text": "~GitHub Saver"
        },
        "$:/language/ControlPanel/Saving/GitService/GitHub/Password": {
            "title": "$:/language/ControlPanel/Saving/GitService/GitHub/Password",
            "text": "Password, OAUTH token, or personal access token (see [[GitHub help page|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]] for details)"
        },
        "$:/language/ControlPanel/Saving/GitService/GitLab/Caption": {
            "title": "$:/language/ControlPanel/Saving/GitService/GitLab/Caption",
            "text": "~GitLab Saver"
        },
        "$:/language/ControlPanel/Saving/GitService/GitLab/Password": {
            "title": "$:/language/ControlPanel/Saving/GitService/GitLab/Password",
            "text": "Personal access token for API (see [[GitLab help page|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]] for details)"
        },
        "$:/language/ControlPanel/Saving/GitService/Gitea/Caption": {
            "title": "$:/language/ControlPanel/Saving/GitService/Gitea/Caption",
            "text": "Gitea Saver"
        },
        "$:/language/ControlPanel/Saving/GitService/Gitea/Password": {
            "title": "$:/language/ControlPanel/Saving/GitService/Gitea/Password",
            "text": "Personal access token for API (via Gitea’s web interface: `Settings | Applications | Generate New Token`)"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
            "text": "Advanced Settings"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
            "text": "Backup Directory"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
            "text": "Backups"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Caption": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Caption",
            "text": "~TiddlySpot Saver"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Description": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
            "text": "These settings are only used when saving to http://tiddlyspot.com or a compatible remote server"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
            "text": "Upload Filename"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
            "text": "~TiddlySpot"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
            "text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Password": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
            "text": "Password"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
            "text": "Server URL"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
            "text": "Upload Directory"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
            "text": "Wiki Name"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Caption": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
            "text": "Autosave"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
            "text": "Do not save changes automatically"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
            "text": "Save changes automatically"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Hint": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
            "text": "Attempt to automatically save changes during editing when using a supporting saver"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Caption": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
            "text": "Camel Case Wiki Links"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Hint": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
            "text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Description": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Description",
            "text": "Enable automatic ~CamelCase linking"
        },
        "$:/language/ControlPanel/Settings/Caption": {
            "title": "$:/language/ControlPanel/Settings/Caption",
            "text": "Settings"
        },
        "$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
            "text": "Editor Toolbar"
        },
        "$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
            "text": "Enable or disable the editor toolbar:"
        },
        "$:/language/ControlPanel/Settings/EditorToolbar/Description": {
            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
            "text": "Show editor toolbar"
        },
        "$:/language/ControlPanel/Settings/InfoPanelMode/Caption": {
            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Caption",
            "text": "Tiddler Info Panel Mode"
        },
        "$:/language/ControlPanel/Settings/InfoPanelMode/Hint": {
            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Hint",
            "text": "Control when the tiddler info panel closes:"
        },
        "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description": {
            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description",
            "text": "Tiddler info panel closes automatically"
        },
        "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description": {
            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description",
            "text": "Tiddler info panel stays open until explicitly closed"
        },
        "$:/language/ControlPanel/Settings/Hint": {
            "title": "$:/language/ControlPanel/Settings/Hint",
            "text": "These settings let you customise the behaviour of TiddlyWiki."
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
            "text": "Navigation Address Bar"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
            "text": "Behaviour of the browser address bar when navigating to a tiddler:"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
            "text": "Do not update the address bar"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
            "text": "Include the target tiddler"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
            "text": "Include the target tiddler and the current story sequence"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
            "text": "Navigation History"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
            "text": "Update browser history when navigating to a tiddler:"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
            "text": "Do not update history"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
            "text": "Update history"
        },
        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption",
            "text": "Permalink/permaview Mode"
        },
        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint",
            "text": "Choose how permalink/permaview is handled:"
        },
        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description",
            "text": "Copy permalink/permaview URL to clipboard"
        },
        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description",
            "text": "Update address bar with permalink/permaview URL"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
            "text": "Performance Instrumentation"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
            "text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
            "text": "Enable performance instrumentation"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
            "text": "Toolbar Button Style"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
            "text": "Choose the style for toolbar buttons:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
            "text": "Borderless"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
            "text": "Boxed"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
            "text": "Rounded"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
            "text": "Toolbar Buttons"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
            "text": "Default toolbar button appearance:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
            "text": "Include icon"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
            "text": "Include text"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
            "text": "Default Sidebar Tab"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
            "text": "Specify which sidebar tab is displayed by default"
        },
        "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption": {
            "title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption",
            "text": "Default More Sidebar Tab"
        },
        "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint": {
            "title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint",
            "text": "Specify which More sidebar tab is displayed by default"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
            "text": "Tiddler Opening Behaviour"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
            "text": "Navigation from //within// the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
            "text": "Navigation from //outside// the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
            "text": "Open above the current tiddler"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
            "text": "Open below the current tiddler"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
            "text": "Open at the top of the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
            "text": "Open at the bottom of the story river"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Caption": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
            "text": "Tiddler Titles"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Hint": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
            "text": "Optionally display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
            "text": "Do not display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
            "text": "Display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/MissingLinks/Caption": {
            "title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
            "text": "Wiki Links"
        },
        "$:/language/ControlPanel/Settings/MissingLinks/Hint": {
            "title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
            "text": "Choose whether to link to tiddlers that do not exist yet"
        },
        "$:/language/ControlPanel/Settings/MissingLinks/Description": {
            "title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
            "text": "Enable links to missing tiddlers"
        },
        "$:/language/ControlPanel/StoryView/Caption": {
            "title": "$:/language/ControlPanel/StoryView/Caption",
            "text": "Story View"
        },
        "$:/language/ControlPanel/StoryView/Prompt": {
            "title": "$:/language/ControlPanel/StoryView/Prompt",
            "text": "Current view:"
        },
        "$:/language/ControlPanel/Stylesheets/Caption": {
            "title": "$:/language/ControlPanel/Stylesheets/Caption",
            "text": "Stylesheets"
        },
        "$:/language/ControlPanel/Stylesheets/Expand/Caption": {
            "title": "$:/language/ControlPanel/Stylesheets/Expand/Caption",
            "text": "Expand All"
        },
        "$:/language/ControlPanel/Stylesheets/Hint": {
            "title": "$:/language/ControlPanel/Stylesheets/Hint",
            "text": "This is the rendered CSS of the current stylesheet tiddlers tagged with <<tag \"$:/tags/Stylesheet\">>"
        },
        "$:/language/ControlPanel/Stylesheets/Restore/Caption": {
            "title": "$:/language/ControlPanel/Stylesheets/Restore/Caption",
            "text": "Restore"
        },
        "$:/language/ControlPanel/Theme/Caption": {
            "title": "$:/language/ControlPanel/Theme/Caption",
            "text": "Theme"
        },
        "$:/language/ControlPanel/Theme/Prompt": {
            "title": "$:/language/ControlPanel/Theme/Prompt",
            "text": "Current theme:"
        },
        "$:/language/ControlPanel/TiddlerFields/Caption": {
            "title": "$:/language/ControlPanel/TiddlerFields/Caption",
            "text": "Tiddler Fields"
        },
        "$:/language/ControlPanel/TiddlerFields/Hint": {
            "title": "$:/language/ControlPanel/TiddlerFields/Hint",
            "text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
        },
        "$:/language/ControlPanel/Toolbars/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/Caption",
            "text": "Toolbars"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
            "text": "Edit Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
            "text": "Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering"
        },
        "$:/language/ControlPanel/Toolbars/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/Hint",
            "text": "Select which toolbar buttons are displayed"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
            "text": "Page Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
            "text": "Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering"
        },
        "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
            "text": "Editor Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
            "text": "Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
            "text": "View Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
            "text": "Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering"
        },
        "$:/language/ControlPanel/Tools/Download/Full/Caption": {
            "title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
            "text": "Download full wiki"
        },
        "$:/language/Date/DaySuffix/1": {
            "title": "$:/language/Date/DaySuffix/1",
            "text": "st"
        },
        "$:/language/Date/DaySuffix/2": {
            "title": "$:/language/Date/DaySuffix/2",
            "text": "nd"
        },
        "$:/language/Date/DaySuffix/3": {
            "title": "$:/language/Date/DaySuffix/3",
            "text": "rd"
        },
        "$:/language/Date/DaySuffix/4": {
            "title": "$:/language/Date/DaySuffix/4",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/5": {
            "title": "$:/language/Date/DaySuffix/5",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/6": {
            "title": "$:/language/Date/DaySuffix/6",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/7": {
            "title": "$:/language/Date/DaySuffix/7",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/8": {
            "title": "$:/language/Date/DaySuffix/8",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/9": {
            "title": "$:/language/Date/DaySuffix/9",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/10": {
            "title": "$:/language/Date/DaySuffix/10",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/11": {
            "title": "$:/language/Date/DaySuffix/11",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/12": {
            "title": "$:/language/Date/DaySuffix/12",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/13": {
            "title": "$:/language/Date/DaySuffix/13",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/14": {
            "title": "$:/language/Date/DaySuffix/14",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/15": {
            "title": "$:/language/Date/DaySuffix/15",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/16": {
            "title": "$:/language/Date/DaySuffix/16",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/17": {
            "title": "$:/language/Date/DaySuffix/17",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/18": {
            "title": "$:/language/Date/DaySuffix/18",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/19": {
            "title": "$:/language/Date/DaySuffix/19",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/20": {
            "title": "$:/language/Date/DaySuffix/20",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/21": {
            "title": "$:/language/Date/DaySuffix/21",
            "text": "st"
        },
        "$:/language/Date/DaySuffix/22": {
            "title": "$:/language/Date/DaySuffix/22",
            "text": "nd"
        },
        "$:/language/Date/DaySuffix/23": {
            "title": "$:/language/Date/DaySuffix/23",
            "text": "rd"
        },
        "$:/language/Date/DaySuffix/24": {
            "title": "$:/language/Date/DaySuffix/24",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/25": {
            "title": "$:/language/Date/DaySuffix/25",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/26": {
            "title": "$:/language/Date/DaySuffix/26",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/27": {
            "title": "$:/language/Date/DaySuffix/27",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/28": {
            "title": "$:/language/Date/DaySuffix/28",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/29": {
            "title": "$:/language/Date/DaySuffix/29",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/30": {
            "title": "$:/language/Date/DaySuffix/30",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/31": {
            "title": "$:/language/Date/DaySuffix/31",
            "text": "st"
        },
        "$:/language/Date/Long/Day/0": {
            "title": "$:/language/Date/Long/Day/0",
            "text": "Sunday"
        },
        "$:/language/Date/Long/Day/1": {
            "title": "$:/language/Date/Long/Day/1",
            "text": "Monday"
        },
        "$:/language/Date/Long/Day/2": {
            "title": "$:/language/Date/Long/Day/2",
            "text": "Tuesday"
        },
        "$:/language/Date/Long/Day/3": {
            "title": "$:/language/Date/Long/Day/3",
            "text": "Wednesday"
        },
        "$:/language/Date/Long/Day/4": {
            "title": "$:/language/Date/Long/Day/4",
            "text": "Thursday"
        },
        "$:/language/Date/Long/Day/5": {
            "title": "$:/language/Date/Long/Day/5",
            "text": "Friday"
        },
        "$:/language/Date/Long/Day/6": {
            "title": "$:/language/Date/Long/Day/6",
            "text": "Saturday"
        },
        "$:/language/Date/Long/Month/1": {
            "title": "$:/language/Date/Long/Month/1",
            "text": "January"
        },
        "$:/language/Date/Long/Month/2": {
            "title": "$:/language/Date/Long/Month/2",
            "text": "February"
        },
        "$:/language/Date/Long/Month/3": {
            "title": "$:/language/Date/Long/Month/3",
            "text": "March"
        },
        "$:/language/Date/Long/Month/4": {
            "title": "$:/language/Date/Long/Month/4",
            "text": "April"
        },
        "$:/language/Date/Long/Month/5": {
            "title": "$:/language/Date/Long/Month/5",
            "text": "May"
        },
        "$:/language/Date/Long/Month/6": {
            "title": "$:/language/Date/Long/Month/6",
            "text": "June"
        },
        "$:/language/Date/Long/Month/7": {
            "title": "$:/language/Date/Long/Month/7",
            "text": "July"
        },
        "$:/language/Date/Long/Month/8": {
            "title": "$:/language/Date/Long/Month/8",
            "text": "August"
        },
        "$:/language/Date/Long/Month/9": {
            "title": "$:/language/Date/Long/Month/9",
            "text": "September"
        },
        "$:/language/Date/Long/Month/10": {
            "title": "$:/language/Date/Long/Month/10",
            "text": "October"
        },
        "$:/language/Date/Long/Month/11": {
            "title": "$:/language/Date/Long/Month/11",
            "text": "November"
        },
        "$:/language/Date/Long/Month/12": {
            "title": "$:/language/Date/Long/Month/12",
            "text": "December"
        },
        "$:/language/Date/Period/am": {
            "title": "$:/language/Date/Period/am",
            "text": "am"
        },
        "$:/language/Date/Period/pm": {
            "title": "$:/language/Date/Period/pm",
            "text": "pm"
        },
        "$:/language/Date/Short/Day/0": {
            "title": "$:/language/Date/Short/Day/0",
            "text": "Sun"
        },
        "$:/language/Date/Short/Day/1": {
            "title": "$:/language/Date/Short/Day/1",
            "text": "Mon"
        },
        "$:/language/Date/Short/Day/2": {
            "title": "$:/language/Date/Short/Day/2",
            "text": "Tue"
        },
        "$:/language/Date/Short/Day/3": {
            "title": "$:/language/Date/Short/Day/3",
            "text": "Wed"
        },
        "$:/language/Date/Short/Day/4": {
            "title": "$:/language/Date/Short/Day/4",
            "text": "Thu"
        },
        "$:/language/Date/Short/Day/5": {
            "title": "$:/language/Date/Short/Day/5",
            "text": "Fri"
        },
        "$:/language/Date/Short/Day/6": {
            "title": "$:/language/Date/Short/Day/6",
            "text": "Sat"
        },
        "$:/language/Date/Short/Month/1": {
            "title": "$:/language/Date/Short/Month/1",
            "text": "Jan"
        },
        "$:/language/Date/Short/Month/2": {
            "title": "$:/language/Date/Short/Month/2",
            "text": "Feb"
        },
        "$:/language/Date/Short/Month/3": {
            "title": "$:/language/Date/Short/Month/3",
            "text": "Mar"
        },
        "$:/language/Date/Short/Month/4": {
            "title": "$:/language/Date/Short/Month/4",
            "text": "Apr"
        },
        "$:/language/Date/Short/Month/5": {
            "title": "$:/language/Date/Short/Month/5",
            "text": "May"
        },
        "$:/language/Date/Short/Month/6": {
            "title": "$:/language/Date/Short/Month/6",
            "text": "Jun"
        },
        "$:/language/Date/Short/Month/7": {
            "title": "$:/language/Date/Short/Month/7",
            "text": "Jul"
        },
        "$:/language/Date/Short/Month/8": {
            "title": "$:/language/Date/Short/Month/8",
            "text": "Aug"
        },
        "$:/language/Date/Short/Month/9": {
            "title": "$:/language/Date/Short/Month/9",
            "text": "Sep"
        },
        "$:/language/Date/Short/Month/10": {
            "title": "$:/language/Date/Short/Month/10",
            "text": "Oct"
        },
        "$:/language/Date/Short/Month/11": {
            "title": "$:/language/Date/Short/Month/11",
            "text": "Nov"
        },
        "$:/language/Date/Short/Month/12": {
            "title": "$:/language/Date/Short/Month/12",
            "text": "Dec"
        },
        "$:/language/RelativeDate/Future/Days": {
            "title": "$:/language/RelativeDate/Future/Days",
            "text": "<<period>> days from now"
        },
        "$:/language/RelativeDate/Future/Hours": {
            "title": "$:/language/RelativeDate/Future/Hours",
            "text": "<<period>> hours from now"
        },
        "$:/language/RelativeDate/Future/Minutes": {
            "title": "$:/language/RelativeDate/Future/Minutes",
            "text": "<<period>> minutes from now"
        },
        "$:/language/RelativeDate/Future/Months": {
            "title": "$:/language/RelativeDate/Future/Months",
            "text": "<<period>> months from now"
        },
        "$:/language/RelativeDate/Future/Second": {
            "title": "$:/language/RelativeDate/Future/Second",
            "text": "1 second from now"
        },
        "$:/language/RelativeDate/Future/Seconds": {
            "title": "$:/language/RelativeDate/Future/Seconds",
            "text": "<<period>> seconds from now"
        },
        "$:/language/RelativeDate/Future/Years": {
            "title": "$:/language/RelativeDate/Future/Years",
            "text": "<<period>> years from now"
        },
        "$:/language/RelativeDate/Past/Days": {
            "title": "$:/language/RelativeDate/Past/Days",
            "text": "<<period>> days ago"
        },
        "$:/language/RelativeDate/Past/Hours": {
            "title": "$:/language/RelativeDate/Past/Hours",
            "text": "<<period>> hours ago"
        },
        "$:/language/RelativeDate/Past/Minutes": {
            "title": "$:/language/RelativeDate/Past/Minutes",
            "text": "<<period>> minutes ago"
        },
        "$:/language/RelativeDate/Past/Months": {
            "title": "$:/language/RelativeDate/Past/Months",
            "text": "<<period>> months ago"
        },
        "$:/language/RelativeDate/Past/Second": {
            "title": "$:/language/RelativeDate/Past/Second",
            "text": "1 second ago"
        },
        "$:/language/RelativeDate/Past/Seconds": {
            "title": "$:/language/RelativeDate/Past/Seconds",
            "text": "<<period>> seconds ago"
        },
        "$:/language/RelativeDate/Past/Years": {
            "title": "$:/language/RelativeDate/Past/Years",
            "text": "<<period>> years ago"
        },
        "$:/language/Docs/ModuleTypes/allfilteroperator": {
            "title": "$:/language/Docs/ModuleTypes/allfilteroperator",
            "text": "A sub-operator for the ''all'' filter operator."
        },
        "$:/language/Docs/ModuleTypes/animation": {
            "title": "$:/language/Docs/ModuleTypes/animation",
            "text": "Animations that may be used with the RevealWidget."
        },
        "$:/language/Docs/ModuleTypes/authenticator": {
            "title": "$:/language/Docs/ModuleTypes/authenticator",
            "text": "Defines how requests are authenticated by the built-in HTTP server."
        },
        "$:/language/Docs/ModuleTypes/bitmapeditoroperation": {
            "title": "$:/language/Docs/ModuleTypes/bitmapeditoroperation",
            "text": "A bitmap editor toolbar operation."
        },
        "$:/language/Docs/ModuleTypes/command": {
            "title": "$:/language/Docs/ModuleTypes/command",
            "text": "Commands that can be executed under Node.js."
        },
        "$:/language/Docs/ModuleTypes/config": {
            "title": "$:/language/Docs/ModuleTypes/config",
            "text": "Data to be inserted into `$tw.config`."
        },
        "$:/language/Docs/ModuleTypes/filteroperator": {
            "title": "$:/language/Docs/ModuleTypes/filteroperator",
            "text": "Individual filter operator methods."
        },
        "$:/language/Docs/ModuleTypes/global": {
            "title": "$:/language/Docs/ModuleTypes/global",
            "text": "Global data to be inserted into `$tw`."
        },
        "$:/language/Docs/ModuleTypes/info": {
            "title": "$:/language/Docs/ModuleTypes/info",
            "text": "Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin."
        },
        "$:/language/Docs/ModuleTypes/isfilteroperator": {
            "title": "$:/language/Docs/ModuleTypes/isfilteroperator",
            "text": "Operands for the ''is'' filter operator."
        },
        "$:/language/Docs/ModuleTypes/library": {
            "title": "$:/language/Docs/ModuleTypes/library",
            "text": "Generic module type for general purpose JavaScript modules."
        },
        "$:/language/Docs/ModuleTypes/macro": {
            "title": "$:/language/Docs/ModuleTypes/macro",
            "text": "JavaScript macro definitions."
        },
        "$:/language/Docs/ModuleTypes/parser": {
            "title": "$:/language/Docs/ModuleTypes/parser",
            "text": "Parsers for different content types."
        },
        "$:/language/Docs/ModuleTypes/route": {
            "title": "$:/language/Docs/ModuleTypes/route",
            "text": "Defines how individual URL patterns are handled by the built-in HTTP server."
        },
        "$:/language/Docs/ModuleTypes/saver": {
            "title": "$:/language/Docs/ModuleTypes/saver",
            "text": "Savers handle different methods for saving files from the browser."
        },
        "$:/language/Docs/ModuleTypes/startup": {
            "title": "$:/language/Docs/ModuleTypes/startup",
            "text": "Startup functions."
        },
        "$:/language/Docs/ModuleTypes/storyview": {
            "title": "$:/language/Docs/ModuleTypes/storyview",
            "text": "Story views customise the animation and behaviour of list widgets."
        },
        "$:/language/Docs/ModuleTypes/texteditoroperation": {
            "title": "$:/language/Docs/ModuleTypes/texteditoroperation",
            "text": "A text editor toolbar operation."
        },
        "$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
            "text": "Converts different content types into tiddlers."
        },
        "$:/language/Docs/ModuleTypes/tiddlerfield": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerfield",
            "text": "Defines the behaviour of an individual tiddler field."
        },
        "$:/language/Docs/ModuleTypes/tiddlermethod": {
            "title": "$:/language/Docs/ModuleTypes/tiddlermethod",
            "text": "Adds methods to the `$tw.Tiddler` prototype."
        },
        "$:/language/Docs/ModuleTypes/upgrader": {
            "title": "$:/language/Docs/ModuleTypes/upgrader",
            "text": "Applies upgrade processing to tiddlers during an upgrade/import."
        },
        "$:/language/Docs/ModuleTypes/utils": {
            "title": "$:/language/Docs/ModuleTypes/utils",
            "text": "Adds methods to `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/utils-node": {
            "title": "$:/language/Docs/ModuleTypes/utils-node",
            "text": "Adds Node.js-specific methods to `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/widget": {
            "title": "$:/language/Docs/ModuleTypes/widget",
            "text": "Widgets encapsulate DOM rendering and refreshing."
        },
        "$:/language/Docs/ModuleTypes/wikimethod": {
            "title": "$:/language/Docs/ModuleTypes/wikimethod",
            "text": "Adds methods to `$tw.Wiki`."
        },
        "$:/language/Docs/ModuleTypes/wikirule": {
            "title": "$:/language/Docs/ModuleTypes/wikirule",
            "text": "Individual parser rules for the main WikiText parser."
        },
        "$:/language/Docs/PaletteColours/alert-background": {
            "title": "$:/language/Docs/PaletteColours/alert-background",
            "text": "Alert background"
        },
        "$:/language/Docs/PaletteColours/alert-border": {
            "title": "$:/language/Docs/PaletteColours/alert-border",
            "text": "Alert border"
        },
        "$:/language/Docs/PaletteColours/alert-highlight": {
            "title": "$:/language/Docs/PaletteColours/alert-highlight",
            "text": "Alert highlight"
        },
        "$:/language/Docs/PaletteColours/alert-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
            "text": "Alert muted foreground"
        },
        "$:/language/Docs/PaletteColours/background": {
            "title": "$:/language/Docs/PaletteColours/background",
            "text": "General background"
        },
        "$:/language/Docs/PaletteColours/blockquote-bar": {
            "title": "$:/language/Docs/PaletteColours/blockquote-bar",
            "text": "Blockquote bar"
        },
        "$:/language/Docs/PaletteColours/button-background": {
            "title": "$:/language/Docs/PaletteColours/button-background",
            "text": "Default button background"
        },
        "$:/language/Docs/PaletteColours/button-border": {
            "title": "$:/language/Docs/PaletteColours/button-border",
            "text": "Default button border"
        },
        "$:/language/Docs/PaletteColours/button-foreground": {
            "title": "$:/language/Docs/PaletteColours/button-foreground",
            "text": "Default button foreground"
        },
        "$:/language/Docs/PaletteColours/dirty-indicator": {
            "title": "$:/language/Docs/PaletteColours/dirty-indicator",
            "text": "Unsaved changes indicator"
        },
        "$:/language/Docs/PaletteColours/code-background": {
            "title": "$:/language/Docs/PaletteColours/code-background",
            "text": "Code background"
        },
        "$:/language/Docs/PaletteColours/code-border": {
            "title": "$:/language/Docs/PaletteColours/code-border",
            "text": "Code border"
        },
        "$:/language/Docs/PaletteColours/code-foreground": {
            "title": "$:/language/Docs/PaletteColours/code-foreground",
            "text": "Code foreground"
        },
        "$:/language/Docs/PaletteColours/download-background": {
            "title": "$:/language/Docs/PaletteColours/download-background",
            "text": "Download button background"
        },
        "$:/language/Docs/PaletteColours/download-foreground": {
            "title": "$:/language/Docs/PaletteColours/download-foreground",
            "text": "Download button foreground"
        },
        "$:/language/Docs/PaletteColours/dragger-background": {
            "title": "$:/language/Docs/PaletteColours/dragger-background",
            "text": "Dragger background"
        },
        "$:/language/Docs/PaletteColours/dragger-foreground": {
            "title": "$:/language/Docs/PaletteColours/dragger-foreground",
            "text": "Dragger foreground"
        },
        "$:/language/Docs/PaletteColours/dropdown-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-background",
            "text": "Dropdown background"
        },
        "$:/language/Docs/PaletteColours/dropdown-border": {
            "title": "$:/language/Docs/PaletteColours/dropdown-border",
            "text": "Dropdown border"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
            "text": "Dropdown tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
            "text": "Dropdown tab background"
        },
        "$:/language/Docs/PaletteColours/dropzone-background": {
            "title": "$:/language/Docs/PaletteColours/dropzone-background",
            "text": "Dropzone background"
        },
        "$:/language/Docs/PaletteColours/external-link-background-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-hover",
            "text": "External link background hover"
        },
        "$:/language/Docs/PaletteColours/external-link-background-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-visited",
            "text": "External link background visited"
        },
        "$:/language/Docs/PaletteColours/external-link-background": {
            "title": "$:/language/Docs/PaletteColours/external-link-background",
            "text": "External link background"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
            "text": "External link foreground hover"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
            "text": "External link foreground visited"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground",
            "text": "External link foreground"
        },
        "$:/language/Docs/PaletteColours/foreground": {
            "title": "$:/language/Docs/PaletteColours/foreground",
            "text": "General foreground"
        },
        "$:/language/Docs/PaletteColours/menubar-background": {
            "title": "$:/language/Docs/PaletteColours/menubar-background",
            "text": "Menu bar background"
        },
        "$:/language/Docs/PaletteColours/menubar-foreground": {
            "title": "$:/language/Docs/PaletteColours/menubar-foreground",
            "text": "Menu bar foreground"
        },
        "$:/language/Docs/PaletteColours/message-background": {
            "title": "$:/language/Docs/PaletteColours/message-background",
            "text": "Message box background"
        },
        "$:/language/Docs/PaletteColours/message-border": {
            "title": "$:/language/Docs/PaletteColours/message-border",
            "text": "Message box border"
        },
        "$:/language/Docs/PaletteColours/message-foreground": {
            "title": "$:/language/Docs/PaletteColours/message-foreground",
            "text": "Message box foreground"
        },
        "$:/language/Docs/PaletteColours/modal-backdrop": {
            "title": "$:/language/Docs/PaletteColours/modal-backdrop",
            "text": "Modal backdrop"
        },
        "$:/language/Docs/PaletteColours/modal-background": {
            "title": "$:/language/Docs/PaletteColours/modal-background",
            "text": "Modal background"
        },
        "$:/language/Docs/PaletteColours/modal-border": {
            "title": "$:/language/Docs/PaletteColours/modal-border",
            "text": "Modal border"
        },
        "$:/language/Docs/PaletteColours/modal-footer-background": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-background",
            "text": "Modal footer background"
        },
        "$:/language/Docs/PaletteColours/modal-footer-border": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-border",
            "text": "Modal footer border"
        },
        "$:/language/Docs/PaletteColours/modal-header-border": {
            "title": "$:/language/Docs/PaletteColours/modal-header-border",
            "text": "Modal header border"
        },
        "$:/language/Docs/PaletteColours/muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/muted-foreground",
            "text": "General muted foreground"
        },
        "$:/language/Docs/PaletteColours/notification-background": {
            "title": "$:/language/Docs/PaletteColours/notification-background",
            "text": "Notification background"
        },
        "$:/language/Docs/PaletteColours/notification-border": {
            "title": "$:/language/Docs/PaletteColours/notification-border",
            "text": "Notification border"
        },
        "$:/language/Docs/PaletteColours/page-background": {
            "title": "$:/language/Docs/PaletteColours/page-background",
            "text": "Page background"
        },
        "$:/language/Docs/PaletteColours/pre-background": {
            "title": "$:/language/Docs/PaletteColours/pre-background",
            "text": "Preformatted code background"
        },
        "$:/language/Docs/PaletteColours/pre-border": {
            "title": "$:/language/Docs/PaletteColours/pre-border",
            "text": "Preformatted code border"
        },
        "$:/language/Docs/PaletteColours/primary": {
            "title": "$:/language/Docs/PaletteColours/primary",
            "text": "General primary"
        },
        "$:/language/Docs/PaletteColours/select-tag-background": {
            "title": "$:/language/Docs/PaletteColours/select-tag-background",
            "text": "`<select>` element background"
        },
        "$:/language/Docs/PaletteColours/select-tag-foreground": {
            "title": "$:/language/Docs/PaletteColours/select-tag-foreground",
            "text": "`<select>` element text"
        },
        "$:/language/Docs/PaletteColours/sidebar-button-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
            "text": "Sidebar button foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
            "text": "Sidebar controls foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
            "text": "Sidebar controls foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
            "text": "Sidebar foreground shadow"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground",
            "text": "Sidebar foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
            "text": "Sidebar muted foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
            "text": "Sidebar muted foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
            "text": "Sidebar tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
            "text": "Sidebar tab background"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
            "text": "Sidebar tab border for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
            "text": "Sidebar tab border"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-divider": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
            "text": "Sidebar tab divider"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
            "text": "Sidebar tab foreground for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
            "text": "Sidebar tab foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
            "text": "Sidebar tiddler link foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
            "text": "Sidebar tiddler link foreground"
        },
        "$:/language/Docs/PaletteColours/site-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/site-title-foreground",
            "text": "Site title foreground"
        },
        "$:/language/Docs/PaletteColours/static-alert-foreground": {
            "title": "$:/language/Docs/PaletteColours/static-alert-foreground",
            "text": "Static alert foreground"
        },
        "$:/language/Docs/PaletteColours/tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-background-selected",
            "text": "Tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-background": {
            "title": "$:/language/Docs/PaletteColours/tab-background",
            "text": "Tab background"
        },
        "$:/language/Docs/PaletteColours/tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-border-selected",
            "text": "Tab border for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-border": {
            "title": "$:/language/Docs/PaletteColours/tab-border",
            "text": "Tab border"
        },
        "$:/language/Docs/PaletteColours/tab-divider": {
            "title": "$:/language/Docs/PaletteColours/tab-divider",
            "text": "Tab divider"
        },
        "$:/language/Docs/PaletteColours/tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
            "text": "Tab foreground for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground",
            "text": "Tab foreground"
        },
        "$:/language/Docs/PaletteColours/table-border": {
            "title": "$:/language/Docs/PaletteColours/table-border",
            "text": "Table border"
        },
        "$:/language/Docs/PaletteColours/table-footer-background": {
            "title": "$:/language/Docs/PaletteColours/table-footer-background",
            "text": "Table footer background"
        },
        "$:/language/Docs/PaletteColours/table-header-background": {
            "title": "$:/language/Docs/PaletteColours/table-header-background",
            "text": "Table header background"
        },
        "$:/language/Docs/PaletteColours/tag-background": {
            "title": "$:/language/Docs/PaletteColours/tag-background",
            "text": "Tag background"
        },
        "$:/language/Docs/PaletteColours/tag-foreground": {
            "title": "$:/language/Docs/PaletteColours/tag-foreground",
            "text": "Tag foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-background",
            "text": "Tiddler background"
        },
        "$:/language/Docs/PaletteColours/tiddler-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-border",
            "text": "Tiddler border"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
            "text": "Tiddler controls foreground hover"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
            "text": "Tiddler controls foreground for selected controls"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
            "text": "Tiddler controls foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
            "text": "Tiddler editor background"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
            "text": "Tiddler editor border image"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
            "text": "Tiddler editor border"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
            "text": "Tiddler editor background for even fields"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
            "text": "Tiddler editor background for odd fields"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-background",
            "text": "Tiddler info panel background"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-border",
            "text": "Tiddler info panel border"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
            "text": "Tiddler info panel tab background"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-background",
            "text": "Tiddler link background"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
            "text": "Tiddler link foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
            "text": "Tiddler subtitle foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
            "text": "Tiddler title foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-new-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-new-button",
            "text": "Toolbar 'new tiddler' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-options-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-options-button",
            "text": "Toolbar 'options' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-save-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-save-button",
            "text": "Toolbar 'save' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-info-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-info-button",
            "text": "Toolbar 'info' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-edit-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
            "text": "Toolbar 'edit' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-close-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-close-button",
            "text": "Toolbar 'close' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-delete-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
            "text": "Toolbar 'delete' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-cancel-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
            "text": "Toolbar 'cancel' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-done-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-done-button",
            "text": "Toolbar 'done' button foreground"
        },
        "$:/language/Docs/PaletteColours/untagged-background": {
            "title": "$:/language/Docs/PaletteColours/untagged-background",
            "text": "Untagged pill background"
        },
        "$:/language/Docs/PaletteColours/very-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/very-muted-foreground",
            "text": "Very muted foreground"
        },
        "$:/language/EditTemplate/Body/External/Hint": {
            "title": "$:/language/EditTemplate/Body/External/Hint",
            "text": "This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
        },
        "$:/language/EditTemplate/Body/Placeholder": {
            "title": "$:/language/EditTemplate/Body/Placeholder",
            "text": "Type the text for this tiddler"
        },
        "$:/language/EditTemplate/Body/Preview/Type/Output": {
            "title": "$:/language/EditTemplate/Body/Preview/Type/Output",
            "text": "output"
        },
        "$:/language/EditTemplate/Field/Remove/Caption": {
            "title": "$:/language/EditTemplate/Field/Remove/Caption",
            "text": "remove field"
        },
        "$:/language/EditTemplate/Field/Remove/Hint": {
            "title": "$:/language/EditTemplate/Field/Remove/Hint",
            "text": "Remove field"
        },
        "$:/language/EditTemplate/Field/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Field/Dropdown/Caption",
            "text": "field list"
        },
        "$:/language/EditTemplate/Field/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Field/Dropdown/Hint",
            "text": "Show field list"
        },
        "$:/language/EditTemplate/Fields/Add/Button": {
            "title": "$:/language/EditTemplate/Fields/Add/Button",
            "text": "add"
        },
        "$:/language/EditTemplate/Fields/Add/Button/Hint": {
            "title": "$:/language/EditTemplate/Fields/Add/Button/Hint",
            "text": "Add the new field to the tiddler"
        },
        "$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
            "text": "field name"
        },
        "$:/language/EditTemplate/Fields/Add/Prompt": {
            "title": "$:/language/EditTemplate/Fields/Add/Prompt",
            "text": "Add a new field:"
        },
        "$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
            "text": "field value"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/System": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
            "text": "System fields"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/User": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
            "text": "User fields"
        },
        "$:/language/EditTemplate/Shadow/Warning": {
            "title": "$:/language/EditTemplate/Shadow/Warning",
            "text": "This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>"
        },
        "$:/language/EditTemplate/Shadow/OverriddenWarning": {
            "title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
            "text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"
        },
        "$:/language/EditTemplate/Tags/Add/Button": {
            "title": "$:/language/EditTemplate/Tags/Add/Button",
            "text": "add"
        },
        "$:/language/EditTemplate/Tags/Add/Button/Hint": {
            "title": "$:/language/EditTemplate/Tags/Add/Button/Hint",
            "text": "add tag"
        },
        "$:/language/EditTemplate/Tags/Add/Placeholder": {
            "title": "$:/language/EditTemplate/Tags/Add/Placeholder",
            "text": "tag name"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
            "text": "tag list"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
            "text": "Show tag list"
        },
        "$:/language/EditTemplate/Title/BadCharacterWarning": {
            "title": "$:/language/EditTemplate/Title/BadCharacterWarning",
            "text": "Warning: avoid using any of the characters <<bad-chars>> in tiddler titles"
        },
        "$:/language/EditTemplate/Title/Exists/Prompt": {
            "title": "$:/language/EditTemplate/Title/Exists/Prompt",
            "text": "Target tiddler already exists"
        },
        "$:/language/EditTemplate/Title/Relink/Prompt": {
            "title": "$:/language/EditTemplate/Title/Relink/Prompt",
            "text": "Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers"
        },
        "$:/language/EditTemplate/Title/References/Prompt": {
            "title": "$:/language/EditTemplate/Title/References/Prompt",
            "text": "The following references to this tiddler will not be automatically updated:"
        },
        "$:/language/EditTemplate/Type/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Caption",
            "text": "content type list"
        },
        "$:/language/EditTemplate/Type/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Hint",
            "text": "Show content type list"
        },
        "$:/language/EditTemplate/Type/Delete/Caption": {
            "title": "$:/language/EditTemplate/Type/Delete/Caption",
            "text": "delete content type"
        },
        "$:/language/EditTemplate/Type/Delete/Hint": {
            "title": "$:/language/EditTemplate/Type/Delete/Hint",
            "text": "Delete content type"
        },
        "$:/language/EditTemplate/Type/Placeholder": {
            "title": "$:/language/EditTemplate/Type/Placeholder",
            "text": "content type"
        },
        "$:/language/EditTemplate/Type/Prompt": {
            "title": "$:/language/EditTemplate/Type/Prompt",
            "text": "Type:"
        },
        "$:/language/Exporters/StaticRiver": {
            "title": "$:/language/Exporters/StaticRiver",
            "text": "Static HTML"
        },
        "$:/language/Exporters/JsonFile": {
            "title": "$:/language/Exporters/JsonFile",
            "text": "JSON file"
        },
        "$:/language/Exporters/CsvFile": {
            "title": "$:/language/Exporters/CsvFile",
            "text": "CSV file"
        },
        "$:/language/Exporters/TidFile": {
            "title": "$:/language/Exporters/TidFile",
            "text": "\".tid\" file"
        },
        "$:/language/Docs/Fields/_canonical_uri": {
            "title": "$:/language/Docs/Fields/_canonical_uri",
            "text": "The full URI of an external image tiddler"
        },
        "$:/language/Docs/Fields/bag": {
            "title": "$:/language/Docs/Fields/bag",
            "text": "The name of the bag from which a tiddler came"
        },
        "$:/language/Docs/Fields/caption": {
            "title": "$:/language/Docs/Fields/caption",
            "text": "The text to be displayed on a tab or button"
        },
        "$:/language/Docs/Fields/color": {
            "title": "$:/language/Docs/Fields/color",
            "text": "The CSS color value associated with a tiddler"
        },
        "$:/language/Docs/Fields/component": {
            "title": "$:/language/Docs/Fields/component",
            "text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
        },
        "$:/language/Docs/Fields/current-tiddler": {
            "title": "$:/language/Docs/Fields/current-tiddler",
            "text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
        },
        "$:/language/Docs/Fields/created": {
            "title": "$:/language/Docs/Fields/created",
            "text": "The date a tiddler was created"
        },
        "$:/language/Docs/Fields/creator": {
            "title": "$:/language/Docs/Fields/creator",
            "text": "The name of the person who created a tiddler"
        },
        "$:/language/Docs/Fields/dependents": {
            "title": "$:/language/Docs/Fields/dependents",
            "text": "For a plugin, lists the dependent plugin titles"
        },
        "$:/language/Docs/Fields/description": {
            "title": "$:/language/Docs/Fields/description",
            "text": "The descriptive text for a plugin, or a modal dialogue"
        },
        "$:/language/Docs/Fields/draft.of": {
            "title": "$:/language/Docs/Fields/draft.of",
            "text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
        },
        "$:/language/Docs/Fields/draft.title": {
            "title": "$:/language/Docs/Fields/draft.title",
            "text": "For draft tiddlers, contains the proposed new title of the tiddler"
        },
        "$:/language/Docs/Fields/footer": {
            "title": "$:/language/Docs/Fields/footer",
            "text": "The footer text for a wizard"
        },
        "$:/language/Docs/Fields/hide-body": {
            "title": "$:/language/Docs/Fields/hide-body",
            "text": "The view template will hide bodies of tiddlers if set to: ''yes''"
        },
        "$:/language/Docs/Fields/icon": {
            "title": "$:/language/Docs/Fields/icon",
            "text": "The title of the tiddler containing the icon associated with a tiddler"
        },
        "$:/language/Docs/Fields/library": {
            "title": "$:/language/Docs/Fields/library",
            "text": "Indicates that a tiddler should be saved as a JavaScript library if set to: ''yes''"
        },
        "$:/language/Docs/Fields/list": {
            "title": "$:/language/Docs/Fields/list",
            "text": "An ordered list of tiddler titles associated with a tiddler"
        },
        "$:/language/Docs/Fields/list-before": {
            "title": "$:/language/Docs/Fields/list-before",
            "text": "If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"
        },
        "$:/language/Docs/Fields/list-after": {
            "title": "$:/language/Docs/Fields/list-after",
            "text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty"
        },
        "$:/language/Docs/Fields/modified": {
            "title": "$:/language/Docs/Fields/modified",
            "text": "The date and time at which a tiddler was last modified"
        },
        "$:/language/Docs/Fields/modifier": {
            "title": "$:/language/Docs/Fields/modifier",
            "text": "The tiddler title associated with the person who last modified a tiddler"
        },
        "$:/language/Docs/Fields/name": {
            "title": "$:/language/Docs/Fields/name",
            "text": "The human readable name associated with a plugin tiddler"
        },
        "$:/language/Docs/Fields/plugin-priority": {
            "title": "$:/language/Docs/Fields/plugin-priority",
            "text": "A numerical value indicating the priority of a plugin tiddler"
        },
        "$:/language/Docs/Fields/plugin-type": {
            "title": "$:/language/Docs/Fields/plugin-type",
            "text": "The type of plugin in a plugin tiddler"
        },
        "$:/language/Docs/Fields/revision": {
            "title": "$:/language/Docs/Fields/revision",
            "text": "The revision of the tiddler held at the server"
        },
        "$:/language/Docs/Fields/released": {
            "title": "$:/language/Docs/Fields/released",
            "text": "Date of a TiddlyWiki release"
        },
        "$:/language/Docs/Fields/source": {
            "title": "$:/language/Docs/Fields/source",
            "text": "The source URL associated with a tiddler"
        },
        "$:/language/Docs/Fields/subtitle": {
            "title": "$:/language/Docs/Fields/subtitle",
            "text": "The subtitle text for a wizard"
        },
        "$:/language/Docs/Fields/tags": {
            "title": "$:/language/Docs/Fields/tags",
            "text": "A list of tags associated with a tiddler"
        },
        "$:/language/Docs/Fields/text": {
            "title": "$:/language/Docs/Fields/text",
            "text": "The body text of a tiddler"
        },
        "$:/language/Docs/Fields/throttle.refresh": {
            "title": "$:/language/Docs/Fields/throttle.refresh",
            "text": "If present, throttles refreshes of this tiddler"
        },
        "$:/language/Docs/Fields/title": {
            "title": "$:/language/Docs/Fields/title",
            "text": "The unique name of a tiddler"
        },
        "$:/language/Docs/Fields/toc-link": {
            "title": "$:/language/Docs/Fields/toc-link",
            "text": "Suppresses the tiddler's link in a Table of Contents tree if set to: ''no''"
        },
        "$:/language/Docs/Fields/type": {
            "title": "$:/language/Docs/Fields/type",
            "text": "The content type of a tiddler"
        },
        "$:/language/Docs/Fields/version": {
            "title": "$:/language/Docs/Fields/version",
            "text": "Version information for a plugin"
        },
        "$:/language/Docs/Fields/_is_skinny": {
            "title": "$:/language/Docs/Fields/_is_skinny",
            "text": "If present, indicates that the tiddler text field must be loaded from the server"
        },
        "$:/language/Filters/AllTiddlers": {
            "title": "$:/language/Filters/AllTiddlers",
            "text": "All tiddlers except system tiddlers"
        },
        "$:/language/Filters/RecentSystemTiddlers": {
            "title": "$:/language/Filters/RecentSystemTiddlers",
            "text": "Recently modified tiddlers, including system tiddlers"
        },
        "$:/language/Filters/RecentTiddlers": {
            "title": "$:/language/Filters/RecentTiddlers",
            "text": "Recently modified tiddlers"
        },
        "$:/language/Filters/AllTags": {
            "title": "$:/language/Filters/AllTags",
            "text": "All tags except system tags"
        },
        "$:/language/Filters/Missing": {
            "title": "$:/language/Filters/Missing",
            "text": "Missing tiddlers"
        },
        "$:/language/Filters/Drafts": {
            "title": "$:/language/Filters/Drafts",
            "text": "Draft tiddlers"
        },
        "$:/language/Filters/Orphans": {
            "title": "$:/language/Filters/Orphans",
            "text": "Orphan tiddlers"
        },
        "$:/language/Filters/SystemTiddlers": {
            "title": "$:/language/Filters/SystemTiddlers",
            "text": "System tiddlers"
        },
        "$:/language/Filters/ShadowTiddlers": {
            "title": "$:/language/Filters/ShadowTiddlers",
            "text": "Shadow tiddlers"
        },
        "$:/language/Filters/OverriddenShadowTiddlers": {
            "title": "$:/language/Filters/OverriddenShadowTiddlers",
            "text": "Overridden shadow tiddlers"
        },
        "$:/language/Filters/SessionTiddlers": {
            "title": "$:/language/Filters/SessionTiddlers",
            "text": "Tiddlers modified since the wiki was loaded"
        },
        "$:/language/Filters/SystemTags": {
            "title": "$:/language/Filters/SystemTags",
            "text": "System tags"
        },
        "$:/language/Filters/StoryList": {
            "title": "$:/language/Filters/StoryList",
            "text": "Tiddlers in the story river, excluding <$text text=\"$:/AdvancedSearch\"/>"
        },
        "$:/language/Filters/TypedTiddlers": {
            "title": "$:/language/Filters/TypedTiddlers",
            "text": "Non wiki-text tiddlers"
        },
        "GettingStarted": {
            "title": "GettingStarted",
            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
        },
        "$:/language/Help/build": {
            "title": "$:/language/Help/build",
            "description": "Automatically run configured commands",
            "text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"
        },
        "$:/language/Help/clearpassword": {
            "title": "$:/language/Help/clearpassword",
            "description": "Clear a password for subsequent crypto operations",
            "text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"
        },
        "$:/language/Help/default": {
            "title": "$:/language/Help/default",
            "text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
        },
        "$:/language/Help/deletetiddlers": {
            "title": "$:/language/Help/deletetiddlers",
            "description": "Deletes a group of tiddlers",
            "text": "<<.from-version \"5.1.20\">> Deletes a group of tiddlers identified by a filter.\n\n```\n--deletetiddlers <filter>\n```\n"
        },
        "$:/language/Help/editions": {
            "title": "$:/language/Help/editions",
            "description": "Lists the available editions of TiddlyWiki",
            "text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"
        },
        "$:/language/Help/fetch": {
            "title": "$:/language/Help/fetch",
            "description": "Fetch tiddlers from wiki by URL",
            "text": "Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.\n\n```\n--fetch file <url> <import-filter> <transform-filter>\n--fetch files <url-filter> <import-filter> <transform-filter>\n--fetch raw-file <url> <transform-filter>\n--fetch raw-files <url-filter> <transform-filter>\n```\n\nThe \"file\" and \"files\" variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The \"raw-file\" and \"raw-files\" variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.\n\nWith the \"file\" and \"raw-file\" variants only a single file is fetched and the first parameter is the URL of the file to read.\n\nWith the \"files\" and \"raw-files\" variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged \"remote-server\" that have a field \"url\" the filter `[tag[remote-server]get[url]]` will retrieve all the available URLs.\n\nFor the \"file\" and \"files\" variants, the `<import-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.\n\nFor all variants, the `<transform-filter>` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `[addprefix[$:/myimports/]]` would add the prefix `$:/myimports/` to each title.\n\nPreceding the `--fetch` command with `--verbose` will output progress information during the import.\n\nNote that TiddlyWiki will not fetch an older version of an already loaded plugin.\n\nThe following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\nThe following example retrieves the \"favicon\" file from tiddlywiki.com and saves it in a file called \"output.ico\". Note that the intermediate tiddler \"Icon Tiddler\" is quoted in the \"--fetch\" command because it is being used as a transformation filter to replace the default title, while there are no quotes for the \"--savetiddler\" command because it is being used directly as a title.\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n\n"
        },
        "$:/language/Help/help": {
            "title": "$:/language/Help/help",
            "description": "Display help for TiddlyWiki commands",
            "text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
        },
        "$:/language/Help/import": {
            "title": "$:/language/Help/import",
            "description": "Import tiddlers from a file",
            "text": "Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.\n\n```\n--import <filepath> <deserializer> [<title>] [<encoding>]\n```\n\nThe deserializers in the core include:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\nThe title of the imported tiddler defaults to the filename.\n\nThe encoding defaults to \"utf8\", but can be \"base64\" for importing binary files.\n\nNote that TiddlyWiki will not import an older version of an already loaded plugin.\n"
        },
        "$:/language/Help/init": {
            "title": "$:/language/Help/init",
            "description": "Initialise a new wiki folder",
            "text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"
        },
        "$:/language/Help/listen": {
            "title": "$:/language/Help/listen",
            "description": "Provides an HTTP server interface to TiddlyWiki",
            "text": "Serves a wiki over HTTP.\n\nThe listen command uses NamedCommandParameters:\n\n```\n--listen [<name>=<value>]...\n```\n\nAll parameters are optional with safe defaults, and can be specified in any order. The recognised parameters are:\n\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''credentials'' - pathname of credentials CSV file (relative to wiki folder)\n* ''anon-username'' - the username for signing edits for anonymous users\n* ''username'' - optional username for basic authentication\n* ''password'' - optional password for basic authentication\n* ''authenticated-user-header'' - optional name of header to be used for trusted authentication\n* ''readers'' - comma separated list of principals allowed to read from this wiki\n* ''writers'' - comma separated list of principals allowed to write to this wiki\n* ''csrf-disable'' - set to \"yes\" to disable CSRF checks (defaults to \"no\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''tls-cert'' - pathname of TLS certificate file (relative to wiki folder)\n* ''tls-key'' - pathname of TLS key file (relative to wiki folder)\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n* ''gzip'' - set to \"yes\" to enable gzip compression for some http endpoints (defaults to \"no\")\n\nFor information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\n"
        },
        "$:/language/Help/load": {
            "title": "$:/language/Help/load",
            "description": "Load tiddlers from a file",
            "text": "Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.\n\n```\n--load <filepath> [noerror]\n--load <dirpath> [noerror]\n```\n\nBy default, the load command raises an error if no tiddlers are found. The error can be suppressed by providing the optional \"noerror\" parameter.\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"
        },
        "$:/language/Help/makelibrary": {
            "title": "$:/language/Help/makelibrary",
            "description": "Construct library plugin required by upgrade process",
            "text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"
        },
        "$:/language/Help/notfound": {
            "title": "$:/language/Help/notfound",
            "text": "No such help item"
        },
        "$:/language/Help/output": {
            "title": "$:/language/Help/output",
            "description": "Set the base output directory for subsequent commands",
            "text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"
        },
        "$:/language/Help/password": {
            "title": "$:/language/Help/password",
            "description": "Set a password for subsequent crypto operations",
            "text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n"
        },
        "$:/language/Help/render": {
            "title": "$:/language/Help/render",
            "description": "Renders individual tiddlers to files",
            "text": "Render individual tiddlers identified by a filter and save the results to the specified files.\n\nOptionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the \"currentTiddler\" variable set to the title of the tiddler that is being rendered.\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [<name>] [<value>]\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be rendered\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]addsuffix[.html]]`, which uses the unchanged tiddler title as the filename\n* ''render-type'': Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)\n* ''template'': Optional template through which each tiddler is rendered\n* ''name'': Name of optional variable\n* ''value'': Value of optional variable\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--render \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated\n\nExamples:\n\n* `--render \"[!is[system]]\" \"[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]\"` -- renders all non-system tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles and the extension HTML\n\n"
        },
        "$:/language/Help/rendertiddler": {
            "title": "$:/language/Help/rendertiddler",
            "description": "Render an individual tiddler as a specified ContentType",
            "text": "(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.\n\nOptionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n\nFor example, the following command saves all tiddlers matching the filter `[tag[done]]` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```\n"
        },
        "$:/language/Help/rendertiddlers": {
            "title": "$:/language/Help/rendertiddlers",
            "description": "Render tiddlers matching a filter to a specified ContentType",
            "text": "(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers <filter> <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n"
        },
        "$:/language/Help/save": {
            "title": "$:/language/Help/save",
            "description": "Saves individual raw tiddlers to files",
            "text": "Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be saved\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]]`, which uses the unchanged tiddler title as the filename\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--save \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated\n\nExamples:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- saves all non-system image tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles\n"
        },
        "$:/language/Help/savetiddler": {
            "title": "$:/language/Help/savetiddler",
            "description": "Saves a raw tiddler to a file",
            "text": "(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
        },
        "$:/language/Help/savetiddlers": {
            "title": "$:/language/Help/savetiddlers",
            "description": "Saves a group of raw tiddlers to a directory",
            "text": "(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"
        },
        "$:/language/Help/savewikifolder": {
            "title": "$:/language/Help/savewikifolder",
            "description": "Saves a wiki to a new wiki folder",
            "text": "<<.from-version \"5.1.20\">> Saves the current wiki as a wiki folder, including tiddlers, plugins and configuration:\n\n```\n--savewikifolder <wikifolderpath> [<filter>]\n```\n\n* The target wiki folder must be empty or non-existent\n* The filter specifies which tiddlers should be included. It is optional, defaulting to `[all[tiddlers]]`\n* Plugins from the official plugin library are replaced with references to those plugins in the `tiddlywiki.info` file\n* Custom plugins are unpacked into their own folder\n\nA common usage is to convert a TiddlyWiki HTML file into a wiki folder:\n\n```\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\n```\n"
        },
        "$:/language/Help/server": {
            "title": "$:/language/Help/server",
            "description": "Provides an HTTP server interface to TiddlyWiki (deprecated in favour of the new listen command)",
            "text": "Legacy command to serve a wiki over HTTP.\n\n```\n--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>\n```\n\nThe parameters are:\n\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation should only be used on a trusted network or over HTTPS.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password.\n\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nUsing an address like this exposes your system to the local network. For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port. It can be useful to use an environment variable to pass the port number to the Node.js process. This example references an environment variable called \"MY_PORT_NUMBER\":\n\n```\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n"
        },
        "$:/language/Help/setfield": {
            "title": "$:/language/Help/setfield",
            "description": "Prepares external tiddlers for use",
            "text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"
        },
        "$:/language/Help/unpackplugin": {
            "title": "$:/language/Help/unpackplugin",
            "description": "Unpack the payload tiddlers from a plugin",
            "text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
        },
        "$:/language/Help/verbose": {
            "title": "$:/language/Help/verbose",
            "description": "Triggers verbose output mode",
            "text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"
        },
        "$:/language/Help/version": {
            "title": "$:/language/Help/version",
            "description": "Displays the version number of TiddlyWiki",
            "text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
        },
        "$:/language/Import/Imported/Hint": {
            "title": "$:/language/Import/Imported/Hint",
            "text": "The following tiddlers were imported:"
        },
        "$:/language/Import/Listing/Cancel/Caption": {
            "title": "$:/language/Import/Listing/Cancel/Caption",
            "text": "Cancel"
        },
        "$:/language/Import/Listing/Hint": {
            "title": "$:/language/Import/Listing/Hint",
            "text": "These tiddlers are ready to import:"
        },
        "$:/language/Import/Listing/Import/Caption": {
            "title": "$:/language/Import/Listing/Import/Caption",
            "text": "Import"
        },
        "$:/language/Import/Listing/Select/Caption": {
            "title": "$:/language/Import/Listing/Select/Caption",
            "text": "Select"
        },
        "$:/language/Import/Listing/Status/Caption": {
            "title": "$:/language/Import/Listing/Status/Caption",
            "text": "Status"
        },
        "$:/language/Import/Listing/Title/Caption": {
            "title": "$:/language/Import/Listing/Title/Caption",
            "text": "Title"
        },
        "$:/language/Import/Listing/Preview": {
            "title": "$:/language/Import/Listing/Preview",
            "text": "Preview:"
        },
        "$:/language/Import/Listing/Preview/Text": {
            "title": "$:/language/Import/Listing/Preview/Text",
            "text": "Text"
        },
        "$:/language/Import/Listing/Preview/TextRaw": {
            "title": "$:/language/Import/Listing/Preview/TextRaw",
            "text": "Text (Raw)"
        },
        "$:/language/Import/Listing/Preview/Fields": {
            "title": "$:/language/Import/Listing/Preview/Fields",
            "text": "Fields"
        },
        "$:/language/Import/Listing/Preview/Diff": {
            "title": "$:/language/Import/Listing/Preview/Diff",
            "text": "Diff"
        },
        "$:/language/Import/Listing/Preview/DiffFields": {
            "title": "$:/language/Import/Listing/Preview/DiffFields",
            "text": "Diff (Fields)"
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
            "text": "Blocked incompatible or obsolete plugin"
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
            "text": "Blocked plugin (due to incoming <<incoming>> being older than existing <<existing>>)"
        },
        "$:/language/Import/Upgrader/Plugins/Upgraded": {
            "title": "$:/language/Import/Upgrader/Plugins/Upgraded",
            "text": "Upgraded plugin from <<incoming>> to <<upgraded>>"
        },
        "$:/language/Import/Upgrader/State/Suppressed": {
            "title": "$:/language/Import/Upgrader/State/Suppressed",
            "text": "Blocked temporary state tiddler"
        },
        "$:/language/Import/Upgrader/System/Suppressed": {
            "title": "$:/language/Import/Upgrader/System/Suppressed",
            "text": "Blocked system tiddler"
        },
        "$:/language/Import/Upgrader/System/Warning": {
            "title": "$:/language/Import/Upgrader/System/Warning",
            "text": "Core module tiddler"
        },
        "$:/language/Import/Upgrader/System/Alert": {
            "title": "$:/language/Import/Upgrader/System/Alert",
            "text": "You are about to import a tiddler that will overwrite a core module tiddler. This is not recommended as it may make the system unstable"
        },
        "$:/language/Import/Upgrader/ThemeTweaks/Created": {
            "title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
            "text": "Migrated theme tweak from <$text text=<<from>>/>"
        },
        "$:/language/AboveStory/ClassicPlugin/Warning": {
            "title": "$:/language/AboveStory/ClassicPlugin/Warning",
            "text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"
        },
        "$:/language/BinaryWarning/Prompt": {
            "title": "$:/language/BinaryWarning/Prompt",
            "text": "This tiddler contains binary data"
        },
        "$:/language/ClassicWarning/Hint": {
            "title": "$:/language/ClassicWarning/Hint",
            "text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details."
        },
        "$:/language/ClassicWarning/Upgrade/Caption": {
            "title": "$:/language/ClassicWarning/Upgrade/Caption",
            "text": "upgrade"
        },
        "$:/language/CloseAll/Button": {
            "title": "$:/language/CloseAll/Button",
            "text": "close all"
        },
        "$:/language/ColourPicker/Recent": {
            "title": "$:/language/ColourPicker/Recent",
            "text": "Recent:"
        },
        "$:/language/ConfirmCancelTiddler": {
            "title": "$:/language/ConfirmCancelTiddler",
            "text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmDeleteTiddler": {
            "title": "$:/language/ConfirmDeleteTiddler",
            "text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmOverwriteTiddler": {
            "title": "$:/language/ConfirmOverwriteTiddler",
            "text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmEditShadowTiddler": {
            "title": "$:/language/ConfirmEditShadowTiddler",
            "text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
        },
        "$:/language/Count": {
            "title": "$:/language/Count",
            "text": "count"
        },
        "$:/language/DefaultNewTiddlerTitle": {
            "title": "$:/language/DefaultNewTiddlerTitle",
            "text": "New Tiddler"
        },
        "$:/language/Diffs/CountMessage": {
            "title": "$:/language/Diffs/CountMessage",
            "text": "<<diff-count>> differences"
        },
        "$:/language/DropMessage": {
            "title": "$:/language/DropMessage",
            "text": "Drop here (or use the 'Escape' key to cancel)"
        },
        "$:/language/Encryption/Cancel": {
            "title": "$:/language/Encryption/Cancel",
            "text": "Cancel"
        },
        "$:/language/Encryption/ConfirmClearPassword": {
            "title": "$:/language/Encryption/ConfirmClearPassword",
            "text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki"
        },
        "$:/language/Encryption/PromptSetPassword": {
            "title": "$:/language/Encryption/PromptSetPassword",
            "text": "Set a new password for this TiddlyWiki"
        },
        "$:/language/Encryption/Username": {
            "title": "$:/language/Encryption/Username",
            "text": "Username"
        },
        "$:/language/Encryption/Password": {
            "title": "$:/language/Encryption/Password",
            "text": "Password"
        },
        "$:/language/Encryption/RepeatPassword": {
            "title": "$:/language/Encryption/RepeatPassword",
            "text": "Repeat password"
        },
        "$:/language/Encryption/PasswordNoMatch": {
            "title": "$:/language/Encryption/PasswordNoMatch",
            "text": "Passwords do not match"
        },
        "$:/language/Encryption/SetPassword": {
            "title": "$:/language/Encryption/SetPassword",
            "text": "Set password"
        },
        "$:/language/Error/Caption": {
            "title": "$:/language/Error/Caption",
            "text": "Error"
        },
        "$:/language/Error/EditConflict": {
            "title": "$:/language/Error/EditConflict",
            "text": "File changed on server"
        },
        "$:/language/Error/Filter": {
            "title": "$:/language/Error/Filter",
            "text": "Filter error"
        },
        "$:/language/Error/FilterSyntax": {
            "title": "$:/language/Error/FilterSyntax",
            "text": "Syntax error in filter expression"
        },
        "$:/language/Error/IsFilterOperator": {
            "title": "$:/language/Error/IsFilterOperator",
            "text": "Filter Error: Unknown operand for the 'is' filter operator"
        },
        "$:/language/Error/LoadingPluginLibrary": {
            "title": "$:/language/Error/LoadingPluginLibrary",
            "text": "Error loading plugin library"
        },
        "$:/language/Error/NetworkErrorAlert": {
            "title": "$:/language/Error/NetworkErrorAlert",
            "text": "`<h2>''Network Error''</h2>It looks like the connection to the server has been lost. This may indicate a problem with your network connection. Please attempt to restore network connectivity before continuing.<br><br>''Any unsaved changes will be automatically synchronised when connectivity is restored''.`"
        },
        "$:/language/Error/RecursiveTransclusion": {
            "title": "$:/language/Error/RecursiveTransclusion",
            "text": "Recursive transclusion error in transclude widget"
        },
        "$:/language/Error/RetrievingSkinny": {
            "title": "$:/language/Error/RetrievingSkinny",
            "text": "Error retrieving skinny tiddler list"
        },
        "$:/language/Error/SavingToTWEdit": {
            "title": "$:/language/Error/SavingToTWEdit",
            "text": "Error saving to TWEdit"
        },
        "$:/language/Error/WhileSaving": {
            "title": "$:/language/Error/WhileSaving",
            "text": "Error while saving"
        },
        "$:/language/Error/XMLHttpRequest": {
            "title": "$:/language/Error/XMLHttpRequest",
            "text": "XMLHttpRequest error code"
        },
        "$:/language/InternalJavaScriptError/Title": {
            "title": "$:/language/InternalJavaScriptError/Title",
            "text": "Internal JavaScript Error"
        },
        "$:/language/InternalJavaScriptError/Hint": {
            "title": "$:/language/InternalJavaScriptError/Hint",
            "text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"
        },
        "$:/language/InvalidFieldName": {
            "title": "$:/language/InvalidFieldName",
            "text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
        },
        "$:/language/LazyLoadingWarning": {
            "title": "$:/language/LazyLoadingWarning",
            "text": "<p>Trying to load external content from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear, either the tiddler content type doesn't match the type of the external content, or you may be using a browser that doesn't support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText</p>"
        },
        "$:/language/LoginToTiddlySpace": {
            "title": "$:/language/LoginToTiddlySpace",
            "text": "Login to TiddlySpace"
        },
        "$:/language/Manager/Controls/FilterByTag/None": {
            "title": "$:/language/Manager/Controls/FilterByTag/None",
            "text": "(none)"
        },
        "$:/language/Manager/Controls/FilterByTag/Prompt": {
            "title": "$:/language/Manager/Controls/FilterByTag/Prompt",
            "text": "Filter by tag:"
        },
        "$:/language/Manager/Controls/Order/Prompt": {
            "title": "$:/language/Manager/Controls/Order/Prompt",
            "text": "Reverse order"
        },
        "$:/language/Manager/Controls/Search/Placeholder": {
            "title": "$:/language/Manager/Controls/Search/Placeholder",
            "text": "Search"
        },
        "$:/language/Manager/Controls/Search/Prompt": {
            "title": "$:/language/Manager/Controls/Search/Prompt",
            "text": "Search:"
        },
        "$:/language/Manager/Controls/Show/Option/Tags": {
            "title": "$:/language/Manager/Controls/Show/Option/Tags",
            "text": "tags"
        },
        "$:/language/Manager/Controls/Show/Option/Tiddlers": {
            "title": "$:/language/Manager/Controls/Show/Option/Tiddlers",
            "text": "tiddlers"
        },
        "$:/language/Manager/Controls/Show/Prompt": {
            "title": "$:/language/Manager/Controls/Show/Prompt",
            "text": "Show:"
        },
        "$:/language/Manager/Controls/Sort/Prompt": {
            "title": "$:/language/Manager/Controls/Sort/Prompt",
            "text": "Sort by:"
        },
        "$:/language/Manager/Item/Colour": {
            "title": "$:/language/Manager/Item/Colour",
            "text": "Colour"
        },
        "$:/language/Manager/Item/Fields": {
            "title": "$:/language/Manager/Item/Fields",
            "text": "Fields"
        },
        "$:/language/Manager/Item/Icon/None": {
            "title": "$:/language/Manager/Item/Icon/None",
            "text": "(none)"
        },
        "$:/language/Manager/Item/Icon": {
            "title": "$:/language/Manager/Item/Icon",
            "text": "Icon"
        },
        "$:/language/Manager/Item/RawText": {
            "title": "$:/language/Manager/Item/RawText",
            "text": "Raw text"
        },
        "$:/language/Manager/Item/Tags": {
            "title": "$:/language/Manager/Item/Tags",
            "text": "Tags"
        },
        "$:/language/Manager/Item/Tools": {
            "title": "$:/language/Manager/Item/Tools",
            "text": "Tools"
        },
        "$:/language/Manager/Item/WikifiedText": {
            "title": "$:/language/Manager/Item/WikifiedText",
            "text": "Wikified text"
        },
        "$:/language/MissingTiddler/Hint": {
            "title": "$:/language/MissingTiddler/Hint",
            "text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" -- click {{||$:/core/ui/Buttons/edit}} to create"
        },
        "$:/language/No": {
            "title": "$:/language/No",
            "text": "No"
        },
        "$:/language/OfficialPluginLibrary": {
            "title": "$:/language/OfficialPluginLibrary",
            "text": "Official ~TiddlyWiki Plugin Library"
        },
        "$:/language/OfficialPluginLibrary/Hint": {
            "title": "$:/language/OfficialPluginLibrary/Hint",
            "text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."
        },
        "$:/language/PluginReloadWarning": {
            "title": "$:/language/PluginReloadWarning",
            "text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to ~JavaScript plugins to take effect"
        },
        "$:/language/RecentChanges/DateFormat": {
            "title": "$:/language/RecentChanges/DateFormat",
            "text": "DDth MMM YYYY"
        },
        "$:/language/SystemTiddler/Tooltip": {
            "title": "$:/language/SystemTiddler/Tooltip",
            "text": "This is a system tiddler"
        },
        "$:/language/SystemTiddlers/Include/Prompt": {
            "title": "$:/language/SystemTiddlers/Include/Prompt",
            "text": "Include system tiddlers"
        },
        "$:/language/TagManager/Colour/Heading": {
            "title": "$:/language/TagManager/Colour/Heading",
            "text": "Colour"
        },
        "$:/language/TagManager/Count/Heading": {
            "title": "$:/language/TagManager/Count/Heading",
            "text": "Count"
        },
        "$:/language/TagManager/Icon/Heading": {
            "title": "$:/language/TagManager/Icon/Heading",
            "text": "Icon"
        },
        "$:/language/TagManager/Icons/None": {
            "title": "$:/language/TagManager/Icons/None",
            "text": "None"
        },
        "$:/language/TagManager/Info/Heading": {
            "title": "$:/language/TagManager/Info/Heading",
            "text": "Info"
        },
        "$:/language/TagManager/Tag/Heading": {
            "title": "$:/language/TagManager/Tag/Heading",
            "text": "Tag"
        },
        "$:/language/Tiddler/DateFormat": {
            "title": "$:/language/Tiddler/DateFormat",
            "text": "DDth MMM YYYY at hh12:0mmam"
        },
        "$:/language/UnsavedChangesWarning": {
            "title": "$:/language/UnsavedChangesWarning",
            "text": "You have unsaved changes in TiddlyWiki"
        },
        "$:/language/Yes": {
            "title": "$:/language/Yes",
            "text": "Yes"
        },
        "$:/language/Modals/Download": {
            "title": "$:/language/Modals/Download",
            "subtitle": "Download changes",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "https://tiddlywiki.com/static/DownloadingChanges.html",
            "text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
        },
        "$:/language/Modals/SaveInstructions": {
            "title": "$:/language/Modals/SaveInstructions",
            "subtitle": "Save your work",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "https://tiddlywiki.com/static/SavingChanges.html",
            "text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
        },
        "$:/config/NewJournal/Title": {
            "title": "$:/config/NewJournal/Title",
            "text": "DDth MMM YYYY"
        },
        "$:/config/NewJournal/Text": {
            "title": "$:/config/NewJournal/Text",
            "text": ""
        },
        "$:/config/NewJournal/Tags": {
            "title": "$:/config/NewJournal/Tags",
            "tags": "Journal"
        },
        "$:/language/Notifications/Save/Done": {
            "title": "$:/language/Notifications/Save/Done",
            "text": "Saved wiki"
        },
        "$:/language/Notifications/Save/Starting": {
            "title": "$:/language/Notifications/Save/Starting",
            "text": "Starting to save wiki"
        },
        "$:/language/Notifications/CopiedToClipboard/Succeeded": {
            "title": "$:/language/Notifications/CopiedToClipboard/Succeeded",
            "text": "Copied to clipboard!"
        },
        "$:/language/Notifications/CopiedToClipboard/Failed": {
            "title": "$:/language/Notifications/CopiedToClipboard/Failed",
            "text": "Failed to copy to clipboard!"
        },
        "$:/language/Search/DefaultResults/Caption": {
            "title": "$:/language/Search/DefaultResults/Caption",
            "text": "List"
        },
        "$:/language/Search/Filter/Caption": {
            "title": "$:/language/Search/Filter/Caption",
            "text": "Filter"
        },
        "$:/language/Search/Filter/Hint": {
            "title": "$:/language/Search/Filter/Hint",
            "text": "Search via a [[filter expression|https://tiddlywiki.com/static/Filters.html]]"
        },
        "$:/language/Search/Filter/Matches": {
            "title": "$:/language/Search/Filter/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Matches": {
            "title": "$:/language/Search/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Matches/All": {
            "title": "$:/language/Search/Matches/All",
            "text": "All matches:"
        },
        "$:/language/Search/Matches/Title": {
            "title": "$:/language/Search/Matches/Title",
            "text": "Title matches:"
        },
        "$:/language/Search/Search": {
            "title": "$:/language/Search/Search",
            "text": "Search"
        },
        "$:/language/Search/Search/TooShort": {
            "title": "$:/language/Search/Search/TooShort",
            "text": "Search text too short"
        },
        "$:/language/Search/Shadows/Caption": {
            "title": "$:/language/Search/Shadows/Caption",
            "text": "Shadows"
        },
        "$:/language/Search/Shadows/Hint": {
            "title": "$:/language/Search/Shadows/Hint",
            "text": "Search for shadow tiddlers"
        },
        "$:/language/Search/Shadows/Matches": {
            "title": "$:/language/Search/Shadows/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Standard/Caption": {
            "title": "$:/language/Search/Standard/Caption",
            "text": "Standard"
        },
        "$:/language/Search/Standard/Hint": {
            "title": "$:/language/Search/Standard/Hint",
            "text": "Search for standard tiddlers"
        },
        "$:/language/Search/Standard/Matches": {
            "title": "$:/language/Search/Standard/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/System/Caption": {
            "title": "$:/language/Search/System/Caption",
            "text": "System"
        },
        "$:/language/Search/System/Hint": {
            "title": "$:/language/Search/System/Hint",
            "text": "Search for system tiddlers"
        },
        "$:/language/Search/System/Matches": {
            "title": "$:/language/Search/System/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/SideBar/All/Caption": {
            "title": "$:/language/SideBar/All/Caption",
            "text": "All"
        },
        "$:/language/SideBar/Contents/Caption": {
            "title": "$:/language/SideBar/Contents/Caption",
            "text": "Contents"
        },
        "$:/language/SideBar/Drafts/Caption": {
            "title": "$:/language/SideBar/Drafts/Caption",
            "text": "Drafts"
        },
        "$:/language/SideBar/Explorer/Caption": {
            "title": "$:/language/SideBar/Explorer/Caption",
            "text": "Explorer"
        },
        "$:/language/SideBar/Missing/Caption": {
            "title": "$:/language/SideBar/Missing/Caption",
            "text": "Missing"
        },
        "$:/language/SideBar/More/Caption": {
            "title": "$:/language/SideBar/More/Caption",
            "text": "More"
        },
        "$:/language/SideBar/Open/Caption": {
            "title": "$:/language/SideBar/Open/Caption",
            "text": "Open"
        },
        "$:/language/SideBar/Orphans/Caption": {
            "title": "$:/language/SideBar/Orphans/Caption",
            "text": "Orphans"
        },
        "$:/language/SideBar/Recent/Caption": {
            "title": "$:/language/SideBar/Recent/Caption",
            "text": "Recent"
        },
        "$:/language/SideBar/Shadows/Caption": {
            "title": "$:/language/SideBar/Shadows/Caption",
            "text": "Shadows"
        },
        "$:/language/SideBar/System/Caption": {
            "title": "$:/language/SideBar/System/Caption",
            "text": "System"
        },
        "$:/language/SideBar/Tags/Caption": {
            "title": "$:/language/SideBar/Tags/Caption",
            "text": "Tags"
        },
        "$:/language/SideBar/Tags/Untagged/Caption": {
            "title": "$:/language/SideBar/Tags/Untagged/Caption",
            "text": "untagged"
        },
        "$:/language/SideBar/Tools/Caption": {
            "title": "$:/language/SideBar/Tools/Caption",
            "text": "Tools"
        },
        "$:/language/SideBar/Types/Caption": {
            "title": "$:/language/SideBar/Types/Caption",
            "text": "Types"
        },
        "$:/SiteSubtitle": {
            "title": "$:/SiteSubtitle",
            "text": "a non-linear personal web notebook"
        },
        "$:/SiteTitle": {
            "title": "$:/SiteTitle",
            "text": "My ~TiddlyWiki"
        },
        "$:/language/Snippets/ListByTag": {
            "title": "$:/language/Snippets/ListByTag",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "List of tiddlers by tag",
            "text": "<<list-links \"[tag[task]sort[title]]\">>\n"
        },
        "$:/language/Snippets/MacroDefinition": {
            "title": "$:/language/Snippets/MacroDefinition",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "Macro definition",
            "text": "\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n"
        },
        "$:/language/Snippets/Table4x3": {
            "title": "$:/language/Snippets/Table4x3",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "Table with 4 columns by 3 rows",
            "text": "|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n"
        },
        "$:/language/Snippets/TableOfContents": {
            "title": "$:/language/Snippets/TableOfContents",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "Table of Contents",
            "text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
        },
        "$:/language/ThemeTweaks/ThemeTweaks": {
            "title": "$:/language/ThemeTweaks/ThemeTweaks",
            "text": "Theme Tweaks"
        },
        "$:/language/ThemeTweaks/ThemeTweaks/Hint": {
            "title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
            "text": "You can tweak certain aspects of the ''Vanilla'' theme."
        },
        "$:/language/ThemeTweaks/Options": {
            "title": "$:/language/ThemeTweaks/Options",
            "text": "Options"
        },
        "$:/language/ThemeTweaks/Options/SidebarLayout": {
            "title": "$:/language/ThemeTweaks/Options/SidebarLayout",
            "text": "Sidebar layout"
        },
        "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
            "title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
            "text": "Fixed story, fluid sidebar"
        },
        "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
            "title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
            "text": "Fluid story, fixed sidebar"
        },
        "$:/language/ThemeTweaks/Options/StickyTitles": {
            "title": "$:/language/ThemeTweaks/Options/StickyTitles",
            "text": "Sticky titles"
        },
        "$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
            "title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
            "text": "Causes tiddler titles to \"stick\" to the top of the browser window"
        },
        "$:/language/ThemeTweaks/Options/CodeWrapping": {
            "title": "$:/language/ThemeTweaks/Options/CodeWrapping",
            "text": "Wrap long lines in code blocks"
        },
        "$:/language/ThemeTweaks/Settings": {
            "title": "$:/language/ThemeTweaks/Settings",
            "text": "Settings"
        },
        "$:/language/ThemeTweaks/Settings/FontFamily": {
            "title": "$:/language/ThemeTweaks/Settings/FontFamily",
            "text": "Font family"
        },
        "$:/language/ThemeTweaks/Settings/CodeFontFamily": {
            "title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
            "text": "Code font family"
        },
        "$:/language/ThemeTweaks/Settings/EditorFontFamily": {
            "title": "$:/language/ThemeTweaks/Settings/EditorFontFamily",
            "text": "Editor font family"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImage": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
            "text": "Page background image"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
            "text": "Page background image attachment"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
            "text": "Scroll with tiddlers"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
            "text": "Fixed to window"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
            "text": "Page background image size"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
            "text": "Auto"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
            "text": "Cover"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
            "text": "Contain"
        },
        "$:/language/ThemeTweaks/Metrics": {
            "title": "$:/language/ThemeTweaks/Metrics",
            "text": "Sizes"
        },
        "$:/language/ThemeTweaks/Metrics/FontSize": {
            "title": "$:/language/ThemeTweaks/Metrics/FontSize",
            "text": "Font size"
        },
        "$:/language/ThemeTweaks/Metrics/LineHeight": {
            "title": "$:/language/ThemeTweaks/Metrics/LineHeight",
            "text": "Line height"
        },
        "$:/language/ThemeTweaks/Metrics/BodyFontSize": {
            "title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
            "text": "Font size for tiddler body"
        },
        "$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
            "title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
            "text": "Line height for tiddler body"
        },
        "$:/language/ThemeTweaks/Metrics/StoryLeft": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
            "text": "Story left position"
        },
        "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
            "text": "how far the left margin of the story river<br>(tiddler area) is from the left of the page"
        },
        "$:/language/ThemeTweaks/Metrics/StoryTop": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryTop",
            "text": "Story top position"
        },
        "$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
            "text": "how far the top margin of the story river<br>is from the top of the page"
        },
        "$:/language/ThemeTweaks/Metrics/StoryRight": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryRight",
            "text": "Story right"
        },
        "$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
            "text": "how far the left margin of the sidebar <br>is from the left of the page"
        },
        "$:/language/ThemeTweaks/Metrics/StoryWidth": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
            "text": "Story width"
        },
        "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
            "text": "the overall width of the story river"
        },
        "$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
            "title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
            "text": "Tiddler width"
        },
        "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
            "text": "within the story river"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
            "text": "Sidebar breakpoint"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
            "text": "the minimum page width at which the story<br>river and sidebar will appear side by side"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarWidth": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
            "text": "Sidebar width"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
            "text": "the width of the sidebar in fluid-fixed layout"
        },
        "$:/language/TiddlerInfo/Advanced/Caption": {
            "title": "$:/language/TiddlerInfo/Advanced/Caption",
            "text": "Advanced"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
            "text": "none"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
            "text": "Plugin Details"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
            "text": "This plugin contains the following shadow tiddlers:"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
            "text": "Shadow Status"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
            "text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
            "text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
            "text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
            "text": "It is overridden by an ordinary tiddler"
        },
        "$:/language/TiddlerInfo/Fields/Caption": {
            "title": "$:/language/TiddlerInfo/Fields/Caption",
            "text": "Fields"
        },
        "$:/language/TiddlerInfo/List/Caption": {
            "title": "$:/language/TiddlerInfo/List/Caption",
            "text": "List"
        },
        "$:/language/TiddlerInfo/List/Empty": {
            "title": "$:/language/TiddlerInfo/List/Empty",
            "text": "This tiddler does not have a list"
        },
        "$:/language/TiddlerInfo/Listed/Caption": {
            "title": "$:/language/TiddlerInfo/Listed/Caption",
            "text": "Listed"
        },
        "$:/language/TiddlerInfo/Listed/Empty": {
            "title": "$:/language/TiddlerInfo/Listed/Empty",
            "text": "This tiddler is not listed by any others"
        },
        "$:/language/TiddlerInfo/References/Caption": {
            "title": "$:/language/TiddlerInfo/References/Caption",
            "text": "References"
        },
        "$:/language/TiddlerInfo/References/Empty": {
            "title": "$:/language/TiddlerInfo/References/Empty",
            "text": "No tiddlers link to this one"
        },
        "$:/language/TiddlerInfo/Tagging/Caption": {
            "title": "$:/language/TiddlerInfo/Tagging/Caption",
            "text": "Tagging"
        },
        "$:/language/TiddlerInfo/Tagging/Empty": {
            "title": "$:/language/TiddlerInfo/Tagging/Empty",
            "text": "No tiddlers are tagged with this one"
        },
        "$:/language/TiddlerInfo/Tools/Caption": {
            "title": "$:/language/TiddlerInfo/Tools/Caption",
            "text": "Tools"
        },
        "$:/language/Docs/Types/application/javascript": {
            "title": "$:/language/Docs/Types/application/javascript",
            "description": "JavaScript code",
            "name": "application/javascript",
            "group": "Developer",
            "group-sort": "2"
        },
        "$:/language/Docs/Types/application/json": {
            "title": "$:/language/Docs/Types/application/json",
            "description": "JSON data",
            "name": "application/json",
            "group": "Developer",
            "group-sort": "2"
        },
        "$:/language/Docs/Types/application/x-tiddler-dictionary": {
            "title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
            "description": "Data dictionary",
            "name": "application/x-tiddler-dictionary",
            "group": "Developer",
            "group-sort": "2"
        },
        "$:/language/Docs/Types/image/gif": {
            "title": "$:/language/Docs/Types/image/gif",
            "description": "GIF image",
            "name": "image/gif",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/image/jpeg": {
            "title": "$:/language/Docs/Types/image/jpeg",
            "description": "JPEG image",
            "name": "image/jpeg",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/image/png": {
            "title": "$:/language/Docs/Types/image/png",
            "description": "PNG image",
            "name": "image/png",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/image/svg+xml": {
            "title": "$:/language/Docs/Types/image/svg+xml",
            "description": "Structured Vector Graphics image",
            "name": "image/svg+xml",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/image/x-icon": {
            "title": "$:/language/Docs/Types/image/x-icon",
            "description": "ICO format icon file",
            "name": "image/x-icon",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/text/css": {
            "title": "$:/language/Docs/Types/text/css",
            "description": "Static stylesheet",
            "name": "text/css",
            "group": "Developer",
            "group-sort": "2"
        },
        "$:/language/Docs/Types/text/html": {
            "title": "$:/language/Docs/Types/text/html",
            "description": "HTML markup",
            "name": "text/html",
            "group": "Text",
            "group-sort": "0"
        },
        "$:/language/Docs/Types/text/plain": {
            "title": "$:/language/Docs/Types/text/plain",
            "description": "Plain text",
            "name": "text/plain",
            "group": "Text",
            "group-sort": "0"
        },
        "$:/language/Docs/Types/text/vnd.tiddlywiki": {
            "title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
            "description": "TiddlyWiki 5",
            "name": "text/vnd.tiddlywiki",
            "group": "Text",
            "group-sort": "0"
        },
        "$:/language/Docs/Types/text/x-tiddlywiki": {
            "title": "$:/language/Docs/Types/text/x-tiddlywiki",
            "description": "TiddlyWiki Classic",
            "name": "text/x-tiddlywiki",
            "group": "Text",
            "group-sort": "0"
        },
        "$:/languages/en-GB/icon": {
            "title": "$:/languages/en-GB/icon",
            "type": "image/svg+xml",
            "text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"
        },
        "$:/languages/en-GB": {
            "title": "$:/languages/en-GB",
            "name": "en-GB",
            "description": "English (British)",
            "author": "JeremyRuston",
            "core-version": ">=5.0.0\"",
            "text": "Stub pseudo-plugin for the default language"
        },
        "$:/core/modules/commander.js": {
            "title": "$:/core/modules/commander.js",
            "text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nLog a string if verbose flag is set\n*/\nCommander.prototype.log = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str + \"\\n\");\n\t}\n};\n\n/*\nWrite a string if verbose flag is set\n*/\nCommander.prototype.write = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str);\n\t}\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\t// Parse named parameters if required\n\t\t\t\tif(command.info.namedParameterMode) {\n\t\t\t\t\tparams = this.extractNamedParameters(params,command.info.mandatoryParameters);\n\t\t\t\t\tif(typeof params === \"string\") {\n\t\t\t\t\t\treturn this.callback(params);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nGiven an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error\n*/\nCommander.prototype.extractNamedParameters = function(params,mandatoryParameters) {\n\tmandatoryParameters = mandatoryParameters || [];\n\tvar errors = [],\n\t\tparamsByName = Object.create(null);\n\t// Extract the parameters\n\t$tw.utils.each(params,function(param) {\n\t\tvar index = param.indexOf(\"=\");\n\t\tif(index < 1) {\n\t\t\terrors.push(\"malformed named parameter: '\" + param + \"'\");\n\t\t}\n\t\tparamsByName[param.slice(0,index)] = $tw.utils.trim(param.slice(index+1));\n\t});\n\t// Check the mandatory parameters are present\n\t$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {\n\t\tif(!$tw.utils.hop(paramsByName,mandatoryParameter)) {\n\t\t\terrors.push(\"missing mandatory parameter: '\" + mandatoryParameter + \"'\");\n\t\t}\n\t});\n\t// Return any errors\n\tif(errors.length > 0) {\n\t\treturn errors.join(\" and\\n\");\n\t} else {\n\t\treturn paramsByName;\t\t\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/commands/build.js": {
            "title": "$:/core/modules/commands/build.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/clearpassword.js": {
            "title": "$:/core/modules/commands/clearpassword.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/deletetiddlers.js": {
            "title": "$:/core/modules/commands/deletetiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/deletetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to delete tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"deletetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filter\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\twiki.deleteTiddler(title);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/editions.js": {
            "title": "$:/core/modules/commands/editions.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\"    \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/fetch.js": {
            "title": "$:/core/modules/commands/fetch.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/fetch.js\ntype: application/javascript\nmodule-type: command\n\nCommands to fetch external tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"fetch\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing subcommand and url\";\n\t}\n\tswitch(this.params[0]) {\n\t\tcase \"raw-file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turl: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turl: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"raw-files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t}\n\treturn null;\n};\n\nCommand.prototype.fetchFiles = function(options) {\n\tvar self = this;\n\t// Get the list of URLs\n\tvar urls;\n\tif(options.url) {\n\t\turls = [options.url]\n\t} else if(options.urlFilter) {\n\t\turls = $tw.wiki.filterTiddlers(options.urlFilter);\n\t} else {\n\t\treturn \"Missing URL\";\n\t}\n\t// Process each URL in turn\n\tvar next = 0;\n\tvar getNextFile = function(err) {\n\t\tif(err) {\n\t\t\treturn options.callback(err);\n\t\t}\n\t\tif(next < urls.length) {\n\t\t\tself.fetchFile(urls[next++],options,getNextFile);\n\t\t} else {\n\t\t\toptions.callback(null);\n\t\t}\n\t};\n\tgetNextFile(null);\n\t// Success\n\treturn null;\n};\n\nCommand.prototype.fetchFile = function(url,options,callback,redirectCount) {\n\tif(redirectCount > 10) {\n\t\treturn callback(\"Error too many redirects retrieving \" + url);\n\t}\n\tvar self = this,\n\t\tlib = url.substr(0,8) === \"https://\" ? require(\"https\") : require(\"http\");\n\tlib.get(url).on(\"response\",function(response) {\n\t    var type = (response.headers[\"content-type\"] || \"\").split(\";\")[0],\n\t    \tdata = [];\n\t    self.commander.write(\"Reading \" + url + \": \");\n\t    response.on(\"data\",function(chunk) {\n\t        data.push(chunk);\n\t        self.commander.write(\".\");\n\t    });\n\t    response.on(\"end\",function() {\n\t        self.commander.write(\"\\n\");\n\t        if(response.statusCode === 200) {\n\t\t        self.processBody(Buffer.concat(data),type,options,url);\n\t\t        callback(null);\n\t        } else {\n\t        \tif(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n\t        \t\treturn self.fetchFile(response.headers.location,options,callback,redirectCount + 1);\n\t        \t} else {\n\t\t        \treturn callback(\"Error \" + response.statusCode + \" retrieving \" + url)\t        \t\t\n\t        \t}\n\t        }\n\t   \t});\n\t   \tresponse.on(\"error\",function(e) {\n\t\t\tconsole.log(\"Error on GET request: \" + e);\n\t\t\tcallback(e);\n\t   \t});\n\t});\n\treturn null;\n};\n\nCommand.prototype.processBody = function(body,type,options,url) {\n\tvar self = this;\n\t// Collect the tiddlers in a wiki\n\tvar incomingWiki = new $tw.Wiki();\n\tif(options.raw) {\n\t\tvar typeInfo = type ? $tw.config.contentTypeInfo[type] : null,\n\t\t\tencoding = typeInfo ? typeInfo.encoding : \"utf8\";\n\t\tincomingWiki.addTiddler(new $tw.Tiddler({\n\t\t\ttitle: url,\n\t\t\ttype: type,\n\t\t\ttext: body.toString(encoding)\n\t\t}));\n\t} else {\n\t\t// Deserialise the file to extract the tiddlers\n\t\tvar tiddlers = this.commander.wiki.deserializeTiddlers(type || \"text/html\",body.toString(\"utf8\"),{});\n\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\tincomingWiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t});\n\t}\n\t// Filter the tiddlers to select the ones we want\n\tvar filteredTitles = incomingWiki.filterTiddlers(options.importFilter || \"[all[tiddlers]]\");\n\t// Import the selected tiddlers\n\tvar count = 0;\n\tincomingWiki.each(function(tiddler,title) {\n\t\tif(filteredTitles.indexOf(title) !== -1) {\n\t\t\tvar newTiddler;\n\t\t\tif(options.transformFilter) {\n\t\t\t\tvar transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [\"\"])[0];\n\t\t\t\tif(transformedTitle) {\n\t\t\t\t\tself.commander.log(\"Importing \" + title + \" as \" + transformedTitle)\n\t\t\t\t\tnewTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.commander.log(\"Importing \" + title)\n\t\t\t\tnewTiddler = tiddler;\n\t\t\t}\n\t\t\tself.commander.wiki.importTiddler(newTiddler);\n\t\t\tcount++;\n\t\t}\n\t});\n\tself.commander.log(\"Imported \" + count + \" tiddlers\")\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/help.js": {
            "title": "$:/core/modules/commands/help.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/import.js": {
            "title": "$:/core/modules/commands/import.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/import.js\ntype: application/javascript\nmodule-type: command\n\nCommand to import tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"import\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 2) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar filename = self.params[0],\n\t\tdeserializer = self.params[1],\n\t\ttitle = self.params[2] || filename,\n\t\tencoding = self.params[3] || \"utf8\",\n\t\ttext = fs.readFileSync(filename,encoding),\n\t\ttiddlers = this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});\n\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t});\n\tthis.commander.log(tiddlers.length + \" tiddler(s) imported\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/init.js": {
            "title": "$:/core/modules/commands/init.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/listen.js": {
            "title": "$:/core/modules/commands/listen.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/listen.js\ntype: application/javascript\nmodule-type: command\n\nListen for HTTP requests and serve tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"listen\",\n\tsynchronous: true,\n\tnamedParameterMode: true,\n\tmandatoryParameters: [],\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: self.params\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/load.js": {
            "title": "$:/core/modules/commands/load.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file or directory\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar tiddlers = $tw.loadTiddlersFromPath(self.params[0]),\n\t\tcount = 0;\n\t$tw.utils.each(tiddlers,function(tiddlerInfo) {\n\t\t$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {\n\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t\t\tcount++;\n\t\t});\n\t});\n\tif(!count && self.params[1] !== \"noerror\") {\n\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t} else {\n\t\tself.callback(null);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/makelibrary.js": {
            "title": "$:/core/modules/commands/makelibrary.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = fs.readdirSync(folder);\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = fs.readdirSync(folder);\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.pluginsPath,$tw.config.pluginsEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.themesPath,$tw.config.themesEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.languagesPath,$tw.config.languagesEnvVar),collectPlugins);\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers})\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/output.js": {
            "title": "$:/core/modules/commands/output.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/password.js": {
            "title": "$:/core/modules/commands/password.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/render.js": {
            "title": "$:/core/modules/commands/render.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/render.js\ntype: application/javascript\nmodule-type: command\n\nRender individual tiddlers and save the results to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"render\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing tiddler filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]addsuffix[.html]]\",\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tvarName = this.params[4],\n\t\tvarValue = this.params[5],\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template || title),\n\t\t\tvariables = {currentTiddler: title};\n\t\tif(varName) {\n\t\t\tvariables[varName] = varValue || \"\";\n\t\t}\n\t\tvar widgetNode = wiki.makeWidget(parser,{variables: variables}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Rendering \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/rendertiddler.js": {
            "title": "$:/core/modules/commands/rendertiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tname = this.params[4],\n\t\tvalue = this.params[5],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tif(name && value) {\n\t\tvariables[name] = value;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/rendertiddlers.js": {
            "title": "$:/core/modules/commands/rendertiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\t\t\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/save.js": {
            "title": "$:/core/modules/commands/save.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/save.js\ntype: application/javascript\nmodule-type: command\n\nSaves individual tiddlers in their raw text or binary format to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"save\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]]\",\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Saving \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savelibrarytiddlers.js": {
            "title": "$:/core/modules/commands/savelibrarytiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = JSON.parse(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\tdoesRequireReload = !!$tw.wiki.doesPluginInfoRequireReload(pluginTiddlers),\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{\n\t\t\ttext: undefined,\n\t\t\treadme: readmeContent,\n\t\t\t\"requires-reload\": doesRequireReload ? \"yes\" : \"no\",\n\t\t\ticon: iconContent\n\t\t}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savetiddler.js": {
            "title": "$:/core/modules/commands/savetiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savetiddlers.js": {
            "title": "$:/core/modules/commands/savetiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savewikifolder.js": {
            "title": "$:/core/modules/commands/savewikifolder.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/savewikifolder.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the current wiki as a wiki folder\n\n--savewikifolder <wikifolderpath> [<filter>]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savewikifolder\",\n\tsynchronous: true\n};\n\nvar fs,path;\nif($tw.node) {\n\tfs = require(\"fs\");\n\tpath = require(\"path\");\n}\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing wiki folder path\";\n\t}\n\tvar wikifoldermaker = new WikiFolderMaker(this.params[0],this.params[1],this.commander);\n\treturn wikifoldermaker.save();\n};\n\nfunction WikiFolderMaker(wikiFolderPath,wikiFilter,commander) {\n\tthis.wikiFolderPath = wikiFolderPath;\n\tthis.wikiFilter = wikiFilter || \"[all[tiddlers]]\";\n\tthis.commander = commander;\n\tthis.wiki = commander.wiki;\n\tthis.savedPaths = []; // So that we can detect filename clashes\n}\n\nWikiFolderMaker.prototype.log = function(str) {\n\tif(this.commander.verbose) {\n\t\tconsole.log(str);\n\t}\n};\n\nWikiFolderMaker.prototype.tiddlersToIgnore = [\n\t\"$:/boot/boot.css\",\n\t\"$:/boot/boot.js\",\n\t\"$:/boot/bootprefix.js\",\n\t\"$:/core\",\n\t\"$:/library/sjcl.js\",\n\t\"$:/temp/info-plugin\"\n];\n\n/*\nReturns null if successful, or an error string if there was an error\n*/\nWikiFolderMaker.prototype.save = function() {\n\tvar self = this;\n\t// Check that the output directory doesn't exist\n\tif(fs.existsSync(this.wikiFolderPath) && !$tw.utils.isDirectoryEmpty(this.wikiFolderPath)) {\n\t\treturn \"The unpackwiki command requires that the output wiki folder be empty\";\n\t}\n\t// Get the tiddlers from the source wiki\n\tvar tiddlerTitles = this.wiki.filterTiddlers(this.wikiFilter);\n\t// Initialise a new tiddlwiki.info file\n\tvar newWikiInfo = {};\n\t// Process each incoming tiddler in turn\n\t$tw.utils.each(tiddlerTitles,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tif(self.tiddlersToIgnore.indexOf(title) !== -1) {\n\t\t\t\t// Ignore the core plugin and the ephemeral info plugin\n\t\t\t\tself.log(\"Ignoring tiddler: \" + title);\n\t\t\t} else {\n\t\t\t\tvar type = tiddler.fields.type,\n\t\t\t\t\tpluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif(type === \"application/json\" && pluginType) {\n\t\t\t\t\t// Plugin tiddler\n\t\t\t\t\tvar libraryDetails = self.findPluginInLibrary(title);\n\t\t\t\t\tif(libraryDetails) {\n\t\t\t\t\t\t// A plugin from the core library\n\t\t\t\t\t\tself.log(\"Adding built-in plugin: \" + libraryDetails.name);\n\t\t\t\t\t\tnewWikiInfo[libraryDetails.type] = newWikiInfo[libraryDetails.type]  || [];\n\t\t\t\t\t\t$tw.utils.pushTop(newWikiInfo[libraryDetails.type],libraryDetails.name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// A custom plugin\n\t\t\t\t\t\tself.log(\"Processing custom plugin: \" + title);\n\t\t\t\t\t\tself.saveCustomPlugin(tiddler);\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t// Ordinary tiddler\n\t\t\t\t\tself.saveTiddler(\"tiddlers\",tiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Save the tiddlywiki.info file\n\tthis.saveJSONFile(\"tiddlywiki.info\",newWikiInfo);\n\tself.log(\"Writing tiddlywiki.info: \" + JSON.stringify(newWikiInfo,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\n/*\nTest whether the specified tiddler is a plugin in the plugin library\n*/\nWikiFolderMaker.prototype.findPluginInLibrary = function(title) {\n\tvar parts = title.split(\"/\"),\n\t\tpluginPath, type, name;\n\tif(parts[0] === \"$:\") {\n\t\tif(parts[1] === \"languages\" && parts.length === 3) {\n\t\t\tpluginPath = \"languages\" + path.sep + parts[2];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2];\n\t\t} else if(parts[1] === \"plugins\" || parts[1] === \"themes\" && parts.length === 4) {\n\t\t\tpluginPath = parts[1] + path.sep + parts[2] + path.sep + parts[3];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2] + \"/\" + parts[3];\n\t\t}\n\t}\n\tif(pluginPath && type && name) {\n\t\tpluginPath = path.resolve($tw.boot.bootPath,\"..\",pluginPath);\n\t\tif(fs.existsSync(pluginPath)) {\n\t\t\treturn {\n\t\t\t\tpluginPath: pluginPath,\n\t\t\t\ttype: type,\n\t\t\t\tname: name\n\t\t\t};\n\t\t}\n\t}\n\treturn false;\n};\n\nWikiFolderMaker.prototype.saveCustomPlugin = function(pluginTiddler) {\n\tvar self = this,\n\t\tpluginTitle = pluginTiddler.fields.title,\n\t\ttitleParts = pluginTitle.split(\"/\"),\n\t\tdirectory = $tw.utils.generateTiddlerFilepath(titleParts[titleParts.length - 1],{\n\t\t\tdirectory: path.resolve(this.wikiFolderPath,pluginTiddler.fields[\"plugin-type\"] + \"s\")\n\t\t}),\n\t\tpluginInfo = pluginTiddler.getFieldStrings({exclude: [\"text\",\"type\"]});\n\tthis.saveJSONFile(directory + path.sep + \"plugin.info\",pluginInfo);\n\tself.log(\"Writing \" + directory + path.sep + \"plugin.info: \" + JSON.stringify(pluginInfo,null,$tw.config.preferences.jsonSpaces));\n\tvar pluginTiddlers = JSON.parse(pluginTiddler.fields.text).tiddlers; // A hashmap of tiddlers in the plugin\n\t$tw.utils.each(pluginTiddlers,function(tiddler) {\n\t\tself.saveTiddler(directory,new $tw.Tiddler(tiddler));\n\t});\n};\n\nWikiFolderMaker.prototype.saveTiddler = function(directory,tiddler) {\n\tvar fileInfo = $tw.utils.generateTiddlerFileInfo(tiddler,{\n\t\tdirectory: path.resolve(this.wikiFolderPath,directory),\n\t\twiki: this.wiki\n\t});\n\t$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);\n};\n\nWikiFolderMaker.prototype.saveJSONFile = function(filename,json) {\n\tthis.saveTextFile(filename,JSON.stringify(json,null,$tw.config.preferences.jsonSpaces));\n};\n\nWikiFolderMaker.prototype.saveTextFile = function(filename,data) {\n\tthis.saveFile(filename,\"utf8\",data);\n};\n\nWikiFolderMaker.prototype.saveFile = function(filename,encoding,data) {\n\tvar filepath = path.resolve(this.wikiFolderPath,filename);\n\t$tw.utils.createFileDirectories(filepath);\n\tfs.writeFileSync(filepath,data,encoding);\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/server.js": {
            "title": "$:/core/modules/commands/server.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nDeprecated legacy command for serving tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: {\n\t\t\tport: this.params[0],\n\t\t\thost: this.params[6],\n\t\t\t\"root-tiddler\": this.params[1],\n\t\t\t\"root-render-type\": this.params[2],\n\t\t\t\"root-serve-type\": this.params[3],\n\t\t\tusername: this.params[4],\n\t\t\tpassword: this.params[5],\n\t\t\t\"path-prefix\": this.params[7],\n\t\t\t\"debug-level\": this.params[8]\n\t\t}\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/setfield.js": {
            "title": "$:/core/modules/commands/setfield.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/unpackplugin.js": {
            "title": "$:/core/modules/commands/unpackplugin.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/verbose.js": {
            "title": "$:/core/modules/commands/verbose.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n  \" + $tw.boot.logMessages.join(\"\\n  \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/version.js": {
            "title": "$:/core/modules/commands/version.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/config.js": {
            "title": "$:/core/modules/config.js",
            "text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter:   \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n",
            "type": "application/javascript",
            "module-type": "config"
        },
        "$:/core/modules/deserializers.js": {
            "title": "$:/core/modules/deserializers.js",
            "text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming,\n\t\tresults = [];\n\ttry {\n\t\tincoming = JSON.parse(text);\n\t} catch(e) {\n\t\tincoming = [{\n\t\t\ttitle: \"JSON error: \" + e,\n\t\t\ttext: \"\"\n\t\t}]\n\t}\n\tif(!$tw.utils.isArray(incoming)) {\n\t\tincoming = [incoming];\n\t}\n\tfor(var t=0; t<incoming.length; t++) {\n\t\tvar incomingFields = incoming[t],\n\t\t\tfields = {};\n\t\tfor(var f in incomingFields) {\n\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t}\n\t\t}\n\t\tresults.push(fields);\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "tiddlerdeserializer"
        },
        "$:/core/modules/editor/engines/framed.js": {
            "title": "$:/core/modules/editor/engines/framed.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/engines/framed.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\n\n\\*/\n(function(){\n\n/*jslint node: true,browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction FramedEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create our hidden dummy text area for reading styles\n\tthis.dummyTextArea = this.widget.document.createElement(\"textarea\");\n\tif(this.widget.editClass) {\n\t\tthis.dummyTextArea.className = this.widget.editClass;\n\t}\n\tthis.dummyTextArea.setAttribute(\"hidden\",\"true\");\n\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\n\tthis.widget.domNodes.push(this.dummyTextArea);\n\t// Create the iframe\n\tthis.iframeNode = this.widget.document.createElement(\"iframe\");\n\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\n\tthis.iframeDoc = this.iframeNode.contentWindow.document;\n\t// (Firefox requires us to put some empty content in the iframe)\n\tthis.iframeDoc.open();\n\tthis.iframeDoc.write(\"\");\n\tthis.iframeDoc.close();\n\t// Style the iframe\n\tthis.iframeNode.className = this.dummyTextArea.className;\n\tthis.iframeNode.style.border = \"none\";\n\tthis.iframeNode.style.padding = \"0\";\n\tthis.iframeNode.style.resize = \"none\";\n\tthis.iframeNode.style[\"background-color\"] = this.widget.wiki.extractTiddlerDataItem(this.widget.wiki.getTiddlerText(\"$:/palette\"),\"tiddler-editor-background\");\n\tthis.iframeDoc.body.style.margin = \"0\";\n\tthis.iframeDoc.body.style.padding = \"0\";\n\tthis.widget.domNodes.push(this.iframeNode);\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.iframeDoc.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.iframeNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\t// Copy the styles from the dummy textarea\n\tthis.copyStyles();\n\t// Add event listeners\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"click\",handlerObject: this,handlerMethod: \"handleClickEvent\"},\n\t\t{name: \"input\",handlerObject: this,handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"keydown\",handlerObject: this.widget,handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.iframeDoc.body.appendChild(this.domNode);\n}\n\n/*\nCopy styles from the dummy text area to the textarea in the iframe\n*/\nFramedEngine.prototype.copyStyles = function() {\n\t// Copy all styles\n\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\n\t// Override the ones that should not be set the same as the dummy textarea\n\tthis.domNode.style.display = \"block\";\n\tthis.domNode.style.width = \"100%\";\n\tthis.domNode.style.margin = \"0\";\n\tthis.domNode.style[\"background-color\"] = this.widget.wiki.extractTiddlerDataItem(this.widget.wiki.getTiddlerText(\"$:/palette\"),\"tiddler-editor-background\");\n\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\n\tthis.domNode.style[\"-webkit-text-fill-color\"] = \"currentcolor\";\n};\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nFramedEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nFramedEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nFramedEngine.prototype.fixHeight = function() {\n\t// Make sure styles are updated\n\tthis.copyStyles();\n\t// Adjust height\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tvar newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t\tthis.iframeNode.style.height = (newHeight + 14) + \"px\"; // +14 for the border on the textarea\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t\tthis.iframeNode.style.height = (fixedHeight + 14) + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nFramedEngine.prototype.focus  = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a click\n*/\nFramedEngine.prototype.handleClickEvent = function(event) {\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nFramedEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nFramedEngine.prototype.createTextOperation = function() {\n\tvar operation = {\n\t\ttext: this.domNode.value,\n\t\tselStart: this.domNode.selectionStart,\n\t\tselEnd: this.domNode.selectionEnd,\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nFramedEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t\t// Attempt to use a execCommand to modify the value of the control\n\t\tif(this.iframeDoc.queryCommandSupported(\"insertText\") && this.iframeDoc.queryCommandSupported(\"delete\") && !$tw.browser.isFirefox) {\n\t\t\tthis.domNode.focus();\n\t\t\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\n\t\t\tif(operation.replacement === \"\") {\n\t\t\t\tthis.iframeDoc.execCommand(\"delete\",false,\"\");\n\t\t\t} else {\n\t\t\t\tthis.iframeDoc.execCommand(\"insertText\",false,operation.replacement);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domNode.value = newText;\n\t\t}\n\t\tthis.domNode.focus();\n\t\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\n\t}\n\tthis.domNode.focus();\n\treturn newText;\n};\n\nexports.FramedEngine = FramedEngine;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/editor/engines/simple.js": {
            "title": "$:/core/modules/editor/engines/simple.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/engines/simple.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction SimpleEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.widget.document.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.domNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nSimpleEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode || text === \"\") {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nSimpleEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nSimpleEngine.prototype.fixHeight = function() {\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nSimpleEngine.prototype.focus  = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nSimpleEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"focus\" event\n*/\nSimpleEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNode,\n\t\t\ttitle: this.widget.editFocusPopup,\n\t\t\twiki: this.widget.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nSimpleEngine.prototype.createTextOperation = function() {\n\treturn null;\n};\n\n/*\nExecute a text operation\n*/\nSimpleEngine.prototype.executeTextOperation = function(operation) {\n};\n\nexports.SimpleEngine = SimpleEngine;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/editor/factory.js": {
            "title": "$:/core/modules/editor/factory.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/factory.js\ntype: application/javascript\nmodule-type: library\n\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\n// Configuration tiddlers\nvar HEIGHT_MODE_TITLE = \"$:/config/TextEditor/EditorHeight/Mode\";\nvar ENABLE_TOOLBAR_TITLE = \"$:/config/TextEditor/EnableToolbar\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\n\n\tvar EditTextWidget = function(parseTreeNode,options) {\n\t\t// Initialise the editor operations if they've not been done already\n\t\tif(!this.editorOperations) {\n\t\t\tEditTextWidget.prototype.editorOperations = {};\n\t\t\t$tw.modules.applyMethods(\"texteditoroperation\",this.editorOperations);\n\t\t}\n\t\tthis.initialise(parseTreeNode,options);\n\t};\n\n\t/*\n\tInherit from the base widget class\n\t*/\n\tEditTextWidget.prototype = new Widget();\n\n\t/*\n\tRender this widget into the DOM\n\t*/\n\tEditTextWidget.prototype.render = function(parent,nextSibling) {\n\t\t// Save the parent dom node\n\t\tthis.parentDomNode = parent;\n\t\t// Compute our attributes\n\t\tthis.computeAttributes();\n\t\t// Execute our logic\n\t\tthis.execute();\n\t\t// Create the wrapper for the toolbar and render its content\n\t\tif(this.editShowToolbar) {\n\t\t\tthis.toolbarNode = this.document.createElement(\"div\");\n\t\t\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\t\t\tparent.insertBefore(this.toolbarNode,nextSibling);\n\t\t\tthis.renderChildren(this.toolbarNode,null);\n\t\t\tthis.domNodes.push(this.toolbarNode);\n\t\t}\n\t\t// Create our element\n\t\tvar editInfo = this.getEditInfo(),\n\t\t\tEngine = this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\n\t\tthis.engine = new Engine({\n\t\t\t\twidget: this,\n\t\t\t\tvalue: editInfo.value,\n\t\t\t\ttype: editInfo.type,\n\t\t\t\tparentNode: parent,\n\t\t\t\tnextSibling: nextSibling\n\t\t\t});\n\t\t// Call the postRender hook\n\t\tif(this.postRender) {\n\t\t\tthis.postRender();\n\t\t}\n\t\t// Fix height\n\t\tthis.engine.fixHeight();\n\t\t// Focus if required\n\t\tif(this.editFocus === \"true\" || this.editFocus === \"yes\") {\n\t\t\tthis.engine.focus();\n\t\t}\n\t\t// Add widget message listeners\n\t\tthis.addEventListeners([\n\t\t\t{type: \"tm-edit-text-operation\", handler: \"handleEditTextOperationMessage\"}\n\t\t]);\n\t};\n\n\t/*\n\tGet the tiddler being edited and current value\n\t*/\n\tEditTextWidget.prototype.getEditInfo = function() {\n\t\t// Get the edit value\n\t\tvar self = this,\n\t\t\tvalue,\n\t\t\ttype = \"text/plain\",\n\t\t\tupdate;\n\t\tif(this.editIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\t\tupdate = function(value) {\n\t\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\t// Get the current tiddler and the field name\n\t\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\t\tif(tiddler) {\n\t\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\t\tif(this.editField === \"text\") {\n\t\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\t\tswitch(this.editField) {\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\t\tvalue = this.editDefault;\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdate = function(value) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\t\tupdateFields = {\n\t\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t\t};\n\t\t\t\tupdateFields[self.editField] = value;\n\t\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t\t};\n\t\t}\n\t\tif(this.editType) {\n\t\t\ttype = this.editType;\n\t\t}\n\t\treturn {value: value || \"\", type: type, update: update};\n\t};\n\n\t/*\n\tHandle an edit text operation message from the toolbar\n\t*/\n\tEditTextWidget.prototype.handleEditTextOperationMessage = function(event) {\n\t\t// Prepare information about the operation\n\t\tvar operation = this.engine.createTextOperation();\n\t\t// Invoke the handler for the selected operation\n\t\tvar handler = this.editorOperations[event.param];\n\t\tif(handler) {\n\t\t\thandler.call(this,event,operation);\n\t\t}\n\t\t// Execute the operation via the engine\n\t\tvar newText = this.engine.executeTextOperation(operation);\n\t\t// Fix the tiddler height and save changes\n\t\tthis.engine.fixHeight();\n\t\tthis.saveChanges(newText);\n\t};\n\n\t/*\n\tCompute the internal state of the widget\n\t*/\n\tEditTextWidget.prototype.execute = function() {\n\t\t// Get our parameters\n\t\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t\tthis.editField = this.getAttribute(\"field\",\"text\");\n\t\tthis.editIndex = this.getAttribute(\"index\");\n\t\tthis.editDefault = this.getAttribute(\"default\");\n\t\tthis.editClass = this.getAttribute(\"class\");\n\t\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t\tthis.editSize = this.getAttribute(\"size\");\n\t\tthis.editRows = this.getAttribute(\"rows\");\n\t\tthis.editAutoHeight = this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\"auto\");\n\t\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",this.editAutoHeight === \"auto\" ? \"yes\" : \"no\") === \"yes\";\n\t\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\t\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t\tthis.editFocus = this.getAttribute(\"focus\");\n\t\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\t\t// Get the default editor element tag and type\n\t\tvar tag,type;\n\t\tif(this.editField === \"text\") {\n\t\t\ttag = \"textarea\";\n\t\t} else {\n\t\t\ttag = \"input\";\n\t\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\t\ttag = fieldModule.editTag;\n\t\t\t}\n\t\t\tif(fieldModule && fieldModule.editType) {\n\t\t\t\ttype = fieldModule.editType;\n\t\t\t}\n\t\t\ttype = type || \"text\";\n\t\t}\n\t\t// Get the rest of our parameters\n\t\tthis.editTag = this.getAttribute(\"tag\",tag) || \"input\";\n\t\tthis.editType = this.getAttribute(\"type\",type);\n\t\t// Make the child widgets\n\t\tthis.makeChildWidgets();\n\t\t// Determine whether to show the toolbar\n\t\tthis.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\"yes\");\n\t\tthis.editShowToolbar = (this.editShowToolbar === \"yes\") && !!(this.children && this.children.length > 0) && (!this.document.isTiddlyWikiFakeDom);\n\t};\n\n\t/*\n\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n\t*/\n\tEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\t\tvar changedAttributes = this.computeAttributes();\n\t\t// Completely rerender if any of our attributes have changed\n\t\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup ||  changedAttributes.rows || changedAttributes.tabindex || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE]) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t\t} else if(changedTiddlers[this.editTitle]) {\n\t\t\tvar editInfo = this.getEditInfo();\n\t\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\t}\n\t\tthis.engine.fixHeight();\n\t\tif(this.editShowToolbar) {\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/*\n\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\n\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\n\t*/\n\tEditTextWidget.prototype.updateEditor = function(text,type) {\n\t\tthis.updateEditorDomNode(text,type);\n\t};\n\n\t/*\n\tUpdate the editor dom node with new text\n\t*/\n\tEditTextWidget.prototype.updateEditorDomNode = function(text,type) {\n\t\tthis.engine.setText(text,type);\n\t};\n\n\t/*\n\tSave changes back to the tiddler store\n\t*/\n\tEditTextWidget.prototype.saveChanges = function(text) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t};\n\n\t/*\n\tHandle a dom \"keydown\" event, which we'll bubble up to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.handleKeydownEvent = function(event) {\n\t\t// Check for a keyboard shortcut\n\t\tif(this.toolbarNode) {\n\t\t\tvar shortcutElements = this.toolbarNode.querySelectorAll(\"[data-tw-keyboard-shortcut]\");\n\t\t\tfor(var index=0; index<shortcutElements.length; index++) {\n\t\t\t\tvar el = shortcutElements[index],\n\t\t\t\t\tshortcutData = el.getAttribute(\"data-tw-keyboard-shortcut\"),\n\t\t\t\t\tkeyInfoArray = $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\n\t\t\t\t\t\twiki: this.wiki\n\t\t\t\t\t});\n\t\t\t\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\n\t\t\t\t\tvar clickEvent = this.document.createEvent(\"Events\");\n\t\t\t\t    clickEvent.initEvent(\"click\",true,false);\n\t\t\t\t    el.dispatchEvent(clickEvent);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Propogate the event to the container\n\t\tif(this.propogateKeydownEvent(event)) {\n\t\t\t// Ignore the keydown if it was already handled\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise, process the keydown normally\n\t\treturn false;\n\t};\n\n\t/*\n\tPropogate keydown events to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.propogateKeydownEvent = function(event) {\n\t\tvar newEvent = this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\"Events\");\n\t\tif(newEvent.initEvent) {\n\t\t\tnewEvent.initEvent(\"keydown\", true, true);\n\t\t}\n\t\tnewEvent.keyCode = event.keyCode;\n\t\tnewEvent.which = event.which;\n\t\tnewEvent.metaKey = event.metaKey;\n\t\tnewEvent.ctrlKey = event.ctrlKey;\n\t\tnewEvent.altKey = event.altKey;\n\t\tnewEvent.shiftKey = event.shiftKey;\n\t\treturn !this.parentDomNode.dispatchEvent(newEvent);\n\t};\n\n\treturn EditTextWidget;\n\n}\n\nexports.editTextWidgetFactory = editTextWidgetFactory;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/editor/operations/bitmap/clear.js": {
            "title": "$:/core/modules/editor/operations/bitmap/clear.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to clear the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"clear\"] = function(event) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.globalAlpha = 1;\n\tctx.fillStyle = event.paramObject.colour || \"white\";\n\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\n\t// Save changes\n\tthis.strokeEnd();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "bitmapeditoroperation"
        },
        "$:/core/modules/editor/operations/bitmap/resize.js": {
            "title": "$:/core/modules/editor/operations/bitmap/resize.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to resize the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"resize\"] = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(event.paramObject.width || this.canvasDomNode.width,10),\n\t\tnewHeight = parseInt(event.paramObject.height || this.canvasDomNode.height,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newHeight > 0 && !(newWidth === this.currCanvas.width && newHeight === this.currCanvas.height)) {\n\t\tthis.changeCanvasSize(newWidth,newHeight);\n\t}\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "bitmapeditoroperation"
        },
        "$:/core/modules/editor/operations/bitmap/rotate-left.js": {
            "title": "$:/core/modules/editor/operations/bitmap/rotate-left.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/rotate-left.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to rotate the image left by 90 degrees\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"rotate-left\"] = function(event) {\n\t// Rotate the canvas left by 90 degrees\n\tthis.rotateCanvasLeft();\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "bitmapeditoroperation"
        },
        "$:/core/modules/editor/operations/text/excise.js": {
            "title": "$:/core/modules/editor/operations/text/excise.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/excise.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excise\"] = function(event,operation) {\n\tvar editTiddler = this.wiki.getTiddler(this.editTitle),\n\t\teditTiddlerTitle = this.editTitle;\n\tif(editTiddler && editTiddler.fields[\"draft.of\"]) {\n\t\teditTiddlerTitle = editTiddler.fields[\"draft.of\"];\n\t}\n\tvar excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(\"New Excision\");\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: excisionTitle,\n\t\t\ttext: operation.selection,\n\t\t\ttags: event.paramObject.tagnew === \"yes\" ?  [editTiddlerTitle] : []\n\t\t}\n\t));\n\toperation.replacement = excisionTitle;\n\tswitch(event.paramObject.type || \"transclude\") {\n\t\tcase \"transclude\":\n\t\t\toperation.replacement = \"{{\" + operation.replacement+ \"}}\";\n\t\t\tbreak;\n\t\tcase \"link\":\n\t\t\toperation.replacement = \"[[\" + operation.replacement+ \"]]\";\n\t\t\tbreak;\n\t\tcase \"macro\":\n\t\t\toperation.replacement = \"<<\" + (event.paramObject.macro || \"translink\") + \" \\\"\\\"\\\"\" + operation.replacement + \"\\\"\\\"\\\">>\";\n\t\t\tbreak;\n\t}\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/make-link.js": {
            "title": "$:/core/modules/editor/operations/text/make-link.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to make a link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"make-link\"] = function(event,operation) {\n\tif(operation.selection) {\n\t\toperation.replacement = \"[[\" + operation.selection + \"|\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t} else {\n\t\toperation.replacement = \"[[\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t}\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/prefix-lines.js": {
            "title": "$:/core/modules/editor/operations/text/prefix-lines.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to add a prefix to the selected lines\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"prefix-lines\"] = function(event,operation) {\n\tvar targetCount = parseInt(event.paramObject.count + \"\",10);\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Compose the required prefix\n\tvar prefix = $tw.utils.repeat(event.paramObject.character,targetCount);\n\t// Process each line\n\tvar lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\r?\\n/mg);\n\t$tw.utils.each(lines,function(line,index) {\n\t\t// Remove and count any existing prefix characters\n\t\tvar count = 0;\n\t\twhile(line.charAt(0) === event.paramObject.character) {\n\t\t\tline = line.substring(1);\n\t\t\tcount++;\n\t\t}\n\t\t// Remove any whitespace\n\t\twhile(line.charAt(0) === \" \") {\n\t\t\tline = line.substring(1);\n\t\t}\n\t\t// We're done if we removed the exact required prefix, otherwise add it\n\t\tif(count !== targetCount) {\n\t\t\t// Apply the prefix\n\t\t\tline =  prefix + \" \" + line;\n\t\t}\n\t\t// Save the modified line\n\t\tlines[index] = line;\n\t});\n\t// Stitch the replacement text together and set the selection\n\toperation.replacement = lines.join(\"\\n\");\n\tif(lines.length === 1) {\n\t\toperation.newSelStart = operation.cutStart + operation.replacement.length;\n\t\toperation.newSelEnd = operation.newSelStart;\n\t} else {\n\t\toperation.newSelStart = operation.cutStart;\n\t\toperation.newSelEnd = operation.newSelStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/replace-all.js": {
            "title": "$:/core/modules/editor/operations/text/replace-all.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the entire text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-all\"] = function(event,operation) {\n\toperation.cutStart = 0;\n\toperation.cutEnd = operation.text.length;\n\toperation.replacement = event.paramObject.text;\n\toperation.newSelStart = 0;\n\toperation.newSelEnd = operation.replacement.length;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/replace-selection.js": {
            "title": "$:/core/modules/editor/operations/text/replace-selection.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-selection\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/save-selection.js": {
            "title": "$:/core/modules/editor/operations/text/save-selection.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/save-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to save the current selection in a specified tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"save-selection\"] = function(event,operation) {\n\tvar tiddler = event.paramObject.tiddler,\n\t\tfield = event.paramObject.field || \"text\";\n\tif(tiddler && field) {\n\t\tthis.wiki.setText(tiddler,field,null,operation.text.substring(operation.selStart,operation.selEnd));\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/wrap-lines.js": {
            "title": "$:/core/modules/editor/operations/text/wrap-lines.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selected lines with a prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Add the prefix and suffix\n\toperation.replacement = event.paramObject.prefix + \"\\n\" +\n\t\t\t\toperation.text.substring(operation.cutStart,operation.cutEnd) + \"\\n\" +\n\t\t\t\tevent.paramObject.suffix + \"\\n\";\n\toperation.newSelStart = operation.cutStart + event.paramObject.prefix.length + 1;\n\toperation.newSelEnd = operation.newSelStart + (operation.cutEnd - operation.cutStart);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/wrap-selection.js": {
            "title": "$:/core/modules/editor/operations/text/wrap-selection.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selection with the specified prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-selection\"] = function(event,operation) {\n\tif(operation.selStart === operation.selEnd) {\n\t\t// No selection; check if we're within the prefix/suffix\n\t\tif(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {\n\t\t\t// Remove the prefix and suffix\n\t\t\toperation.cutStart = operation.selStart - event.paramObject.prefix.length;\n\t\t\toperation.cutEnd = operation.selEnd + event.paramObject.suffix.length;\n\t\t\toperation.replacement = \"\";\n\t\t\toperation.newSelStart = operation.cutStart;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t} else {\n\t\t\t// Wrap the cursor instead\n\t\t\toperation.cutStart = operation.selStart;\n\t\t\toperation.cutEnd = operation.selEnd;\n\t\t\toperation.replacement = event.paramObject.prefix + event.paramObject.suffix;\n\t\t\toperation.newSelStart = operation.selStart + event.paramObject.prefix.length;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t}\n\t} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) {\n\t\t// Prefix and suffix are already present, so remove them\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length);\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t} else {\n\t\t// Add the prefix and suffix\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/filters/addprefix.js": {
            "title": "$:/core/modules/filters/addprefix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/addsuffix.js": {
            "title": "$:/core/modules/filters/addsuffix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/after.js": {
            "title": "$:/core/modules/filters/after.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/all/current.js": {
            "title": "$:/core/modules/filters/all/current.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/missing.js": {
            "title": "$:/core/modules/filters/all/missing.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/orphans.js": {
            "title": "$:/core/modules/filters/all/orphans.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/shadows.js": {
            "title": "$:/core/modules/filters/all/shadows.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/tags.js": {
            "title": "$:/core/modules/filters/all/tags.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/tags.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tags]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,prefix,options) {\n\treturn Object.keys(options.wiki.getTagMap());\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/tiddlers.js": {
            "title": "$:/core/modules/filters/all/tiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all.js": {
            "title": "$:/core/modules/filters/all.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = [],\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\t$tw.utils.pushTop(results,subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/backlinks.js": {
            "title": "$:/core/modules/filters/backlinks.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/before.js": {
            "title": "$:/core/modules/filters/before.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/commands.js": {
            "title": "$:/core/modules/filters/commands.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/compare.js": {
            "title": "$:/core/modules/filters/compare.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/compare.js\ntype: application/javascript\nmodule-type: filteroperator\n\nGeneral purpose comparison operator\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.compare = function(source,operator,options) {\n\tvar suffixes = operator.suffixes || [],\n\t\ttype = (suffixes[0] || [])[0],\n\t\tmode = (suffixes[1] || [])[0],\n\t\ttypeFn = types[type] || types.number,\n\t\tmodeFn = modes[mode] || modes.eq,\n\t\tinvert = operator.prefix === \"!\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tif(modeFn(typeFn(title,operator.operand)) !== invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\nvar types = {\n\t\"number\": function(a,b) {\n\t\treturn compare($tw.utils.parseNumber(a),$tw.utils.parseNumber(b));\n\t},\n\t\"integer\": function(a,b) {\n\t\treturn compare($tw.utils.parseInt(a),$tw.utils.parseInt(b));\n\t},\n\t\"string\": function(a,b) {\n\t\treturn compare(\"\" + a,\"\" +b);\n\t},\n\t\"date\": function(a,b) {\n\t\tvar dateA = $tw.utils.parseDate(a),\n\t\t\tdateB = $tw.utils.parseDate(b);\n\t\tif(!isFinite(dateA)) {\n\t\t\tdateA = new Date(0);\n\t\t}\n\t\tif(!isFinite(dateB)) {\n\t\t\tdateB = new Date(0);\n\t\t}\n\t\treturn compare(dateA,dateB);\n\t},\n\t\"version\": function(a,b) {\n\t\treturn $tw.utils.compareVersions(a,b);\n\t}\n};\n\nfunction compare(a,b) {\n\tif(a > b) {\n\t\treturn +1;\n\t} else if(a < b) {\n\t\treturn -1;\n\t} else {\n\t\treturn 0;\n\t}\n};\n\nvar modes = {\n\t\"eq\": function(value) {return value === 0;},\n\t\"ne\": function(value) {return value !== 0;},\n\t\"gteq\": function(value) {return value >= 0;},\n\t\"gt\": function(value) {return value > 0;},\n\t\"lteq\": function(value) {return value <= 0;},\n\t\"lt\": function(value) {return value < 0;}\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/contains.js": {
            "title": "$:/core/modules/filters/contains.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/contains.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for finding values in array fields\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.contains = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"list\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/count.js": {
            "title": "$:/core/modules/filters/count.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/count.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the number of entries in the current list.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.count = function(source,operator,options) {\n\tvar count = 0;\n\tsource(function(tiddler,title) {\n\t\tcount++;\n\t});\n\treturn [count + \"\"];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/days.js": {
            "title": "$:/core/modules/filters/days.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\ttargetTimeStamp = targetTimeStamp - 1000*60*60*24*dayIntervalSign;\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/each.js": {
            "title": "$:/core/modules/filters/each.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\tvalue,values = {},\n\tfield = operator.operand || \"title\";\n\tif(operator.suffix === \"value\" && field === \"title\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(values,title)) {\n\t\t\t\tvalues[title] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else if(operator.suffix !== \"list-item\") {\n\t\tif(field === \"title\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && !$tw.utils.hop(values,title)) {\n\t\t\t\t\tvalues[title] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvalue = tiddler.getFieldString(field);\n\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/eachday.js": {
            "title": "$:/core/modules/filters/eachday.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [],\n\t\tfieldName = operator.operand || \"modified\";\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tvar value = toDate($tw.utils.parseDate(tiddler.fields[fieldName]));\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/editiondescription.js": {
            "title": "$:/core/modules/filters/editiondescription.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/editiondescription.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the descriptions of the specified edition names\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editiondescription = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\tresults.push(editionInfo[title].description || \"\");\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/editions.js": {
            "title": "$:/core/modules/filters/editions.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/editions.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the available editions in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editions = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\tresults.push(name);\n\t\t});\n\t}\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/else.js": {
            "title": "$:/core/modules/filters/else.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/else.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing an empty input list with a constant, passing a non-empty input list straight through\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.else = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tif(results.length === 0) {\n\t\treturn [operator.operand];\n\t} else {\n\t\treturn results;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/decodeuricomponent.js": {
            "title": "$:/core/modules/filters/decodeuricomponent.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/decodeuricomponent.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for applying decodeURIComponent() to each item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter functions\n*/\n\nexports.decodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURIComponent(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURIComponent(title));\n\t});\n\treturn results;\n};\n\nexports.decodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURI(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURI(title));\n\t});\n\treturn results;\n};\n\nexports.decodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlDecode(title));\n\t});\n\treturn results;\n};\n\nexports.encodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlEncode(title));\n\t});\n\treturn results;\n};\n\nexports.stringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.stringify(title));\n\t});\n\treturn results;\n};\n\nexports.jsonstringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.jsonStringify(title));\n\t});\n\treturn results;\n};\n\nexports.escaperegexp = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.escapeRegExp(title));\n\t});\n\treturn results;\n};\n\nexports.escapecss = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t// escape any character with a special meaning in CSS using CSS.escape()\n\t\tresults.push(CSS.escape(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/enlist.js": {
            "title": "$:/core/modules/filters/enlist.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/enlist.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand parsed as a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.enlist = function(source,operator,options) {\n\tvar allowDuplicates = false;\n\tswitch(operator.suffix) {\n\t\tcase \"raw\":\n\t\t\tallowDuplicates = true;\n\t\t\tbreak;\n\t\tcase \"dedupe\":\n\t\t\tallowDuplicates = false;\n\t\t\tbreak;\n\t}\n\tvar list = $tw.utils.parseStringArray(operator.operand,allowDuplicates);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/field.js": {
            "title": "$:/core/modules/filters/field.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],indexedResults,\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif(source.byField && operator.operand) {\n\t\t\t\tindexedResults = source.byField(fieldname,operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults\n\t\t\t\t}\n\t\t\t}\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/fields.js": {
            "title": "$:/core/modules/filters/fields.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName,\n\t\tsuffixes = (operator.suffixes || [])[0] || [],\n\t\toperand = $tw.utils.parseStringArray(operator.operand);\n\t\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(suffixes.indexOf(\"include\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? $tw.utils.pushTop(results,fieldName) : \"\";\n\t\t\t\t}\n\t\t\t} else if (suffixes.indexOf(\"exclude\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? \"\" : $tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else if\n\t\t\telse {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else\n\t\t} // if (tiddler)\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/get.js": {
            "title": "$:/core/modules/filters/get.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/getindex.js": {
            "title": "$:/core/modules/filters/getindex.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/getindex.js\ntype: application/javascript\nmodule-type: filteroperator\n\nreturns the value at a given index of datatiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getindex = function(source,operator,options) {\n\tvar data,title,results = [];\n\tif(operator.operand){\n\t\tsource(function(tiddler,title) {\n\t\t\ttitle = tiddler ? tiddler.fields.title : title;\n\t\t\tdata = options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\n\t\t\tif(data) {\n\t\t\t\tresults.push(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/getvariable.js": {
            "title": "$:/core/modules/filters/getvariable.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/getvariable.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing input values by the value of the variable with the same name, or blank if the variable is missing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getvariable = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.widget.getVariable(title) || \"\");\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/has.js": {
            "title": "$:/core/modules/filters/has.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field or index\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [],\n\t\tinvert = operator.prefix === \"!\";\n\n\tif(operator.suffix === \"field\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse if(operator.suffix === \"index\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop($tw.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop($tw.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,operator.operand) || (tiddler.fields[operator.operand] === \"\")) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && !(tiddler.fields[operator.operand] === \"\" || tiddler.fields[operator.operand].length === 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\t\t\t\t\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/haschanged.js": {
            "title": "$:/core/modules/filters/haschanged.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/haschanged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returns tiddlers from the list that have a non-zero changecount.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.haschanged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) === 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) > 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/indexes.js": {
            "title": "$:/core/modules/filters/indexes.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/insertbefore.js": {
            "title": "$:/core/modules/filters/insertbefore.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/insertbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nInsert an item before another item in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.insertbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar target = options.widget && options.widget.getVariable(operator.suffix || \"currentTiddler\");\n\tif(target !== operator.operand) {\n\t\t// Remove the entry from the list if it is present\n\t\tvar pos = results.indexOf(operator.operand);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,1);\n\t\t}\n\t\t// Insert the entry before the target marker\n\t\tpos = results.indexOf(target);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,0,operator.operand);\n\t\t} else {\n\t\t\tresults.push(operator.operand);\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/is/binary.js": {
            "title": "$:/core/modules/filters/is/binary.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/binary.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[binary]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.binary = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/blank.js": {
            "title": "$:/core/modules/filters/is/blank.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/blank.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[blank]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.blank = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/current.js": {
            "title": "$:/core/modules/filters/is/current.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/image.js": {
            "title": "$:/core/modules/filters/is/image.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/missing.js": {
            "title": "$:/core/modules/filters/is/missing.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/orphan.js": {
            "title": "$:/core/modules/filters/is/orphan.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/shadow.js": {
            "title": "$:/core/modules/filters/is/shadow.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/system.js": {
            "title": "$:/core/modules/filters/is/system.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/tag.js": {
            "title": "$:/core/modules/filters/is/tag.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/tiddler.js": {
            "title": "$:/core/modules/filters/is/tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/variable.js": {
            "title": "$:/core/modules/filters/is/variable.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/variable.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[variable]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variable = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!(title in options.widget.variables)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title in options.widget.variables) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is.js": {
            "title": "$:/core/modules/filters/is.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tif(operator.operand) {\n\t\tvar isFilterOperator = isFilterOperators[operator.operand];\n\t\tif(isFilterOperator) {\n\t\t\treturn isFilterOperator(source,operator.prefix,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/IsFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all tiddlers if the operand is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/limit.js": {
            "title": "$:/core/modules/filters/limit.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/links.js": {
            "title": "$:/core/modules/filters/links.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/list.js": {
            "title": "$:/core/modules/filters/list.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/listed.js": {
            "title": "$:/core/modules/filters/listed.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/listops.js": {
            "title": "$:/core/modules/filters/listops.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.order = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.operand.toLowerCase() === \"reverse\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.unshift(title);\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/lookup.js": {
            "title": "$:/core/modules/filters/lookup.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/lookup.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that looks up values via a title prefix\n\n[lookup:<field>[<prefix>]]\n\nPrepends the prefix to the selected items and returns the specified field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.lookup = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.getTiddlerText(operator.operand + title) || options.wiki.getTiddlerText(operator.operand + operator.suffix));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/match.js": {
            "title": "$:/core/modules/filters/match.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/match.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title matches a string\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.match = function(source,operator,options) {\n\tvar results = [],\n\t\tsuffixes = (operator.suffixes || [])[0] || [];\n\tif(suffixes.indexOf(\"caseinsensitive\") !== -1) {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() !== (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() === (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title !== operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title === operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/math.js": {
            "title": "$:/core/modules/filters/math.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/math.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for math. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\nNote that strings are converted to numbers automatically. Trailing non-digits are ignored.\n\n* \"\" converts to 0\n* \"12kk\" converts to 12\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.negate = makeNumericBinaryOperator(\n\tfunction(a) {return -a}\n);\n\nexports.abs = makeNumericBinaryOperator(\n\tfunction(a) {return Math.abs(a)}\n);\n\nexports.ceil = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(a)}\n);\n\nexports.floor = makeNumericBinaryOperator(\n\tfunction(a) {return Math.floor(a)}\n);\n\nexports.round = makeNumericBinaryOperator(\n\tfunction(a) {return Math.round(a)}\n);\n\nexports.trunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.trunc(a)}\n);\n\nexports.untrunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(Math.abs(a)) * Math.sign(a)}\n);\n\nexports.sign = makeNumericBinaryOperator(\n\tfunction(a) {return Math.sign(a)}\n);\n\nexports.add = makeNumericBinaryOperator(\n\tfunction(a,b) {return a + b;}\n);\n\nexports.subtract = makeNumericBinaryOperator(\n\tfunction(a,b) {return a - b;}\n);\n\nexports.multiply = makeNumericBinaryOperator(\n\tfunction(a,b) {return a * b;}\n);\n\nexports.divide = makeNumericBinaryOperator(\n\tfunction(a,b) {return a / b;}\n);\n\nexports.remainder = makeNumericBinaryOperator(\n\tfunction(a,b) {return a % b;}\n);\n\nexports.max = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.max(a,b);}\n);\n\nexports.min = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.min(a,b);}\n);\n\nexports.fixed = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toFixed.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.precision = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toPrecision.call(a,Math.min(Math.max(b,1),100));}\n);\n\nexports.exponential = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toExponential.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.sum = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator + value},\n\t0 // Initial value\n);\n\nexports.product = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator * value},\n\t1 // Initial value\n);\n\nexports.maxall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.max(accumulator,value)},\n\t-Infinity // Initial value\n);\n\nexports.minall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.min(accumulator,value)},\n\tInfinity // Initial value\n);\n\nfunction makeNumericBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [],\n\t\t\tnumOperand = $tw.utils.parseNumber(operator.operand);\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push($tw.utils.stringifyNumber(fnCalc($tw.utils.parseNumber(title),numOperand)));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeNumericReducingOperator(fnCalc,initialValue) {\n\tinitialValue = initialValue || 0;\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [$tw.utils.stringifyNumber(result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,$tw.utils.parseNumber(currentValue));\n\t\t},initialValue))];\n\t};\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/minlength.js": {
            "title": "$:/core/modules/filters/minlength.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/minlength.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for filtering out titles that don't meet the minimum length in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.minlength = function(source,operator,options) {\n\tvar results = [],\n\t\tminLength = parseInt(operator.operand || \"\",10) || 0;\n\tsource(function(tiddler,title) {\n\t\tif(title.length >= minLength) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/modules.js": {
            "title": "$:/core/modules/filters/modules.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/moduletypes.js": {
            "title": "$:/core/modules/filters/moduletypes.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/next.js": {
            "title": "$:/core/modules/filters/next.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/plugintiddlers.js": {
            "title": "$:/core/modules/filters/plugintiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/prefix.js": {
            "title": "$:/core/modules/filters/prefix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/previous.js": {
            "title": "$:/core/modules/filters/previous.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/range.js": {
            "title": "$:/core/modules/filters/range.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/range.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for generating a numeric range.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.range = function(source,operator,options) {\n\tvar results = [];\n\t// Split the operand into numbers delimited by these symbols\n\tvar parts = operator.operand.split(/[,:;]/g),\n\t\tbeg, end, inc, i, fixed = 0;\n\tfor (i=0; i<parts.length; i++) {\n\t\t// Validate real number\n\t\tif(!/^\\s*[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))\\s*$/.test(parts[i])) {\n\t\t\treturn [\"range: bad number \\\"\" + parts[i] + \"\\\"\"];\n\t\t}\n\t\t// Count digits; the most precise number determines decimal places in output.\n\t\tvar frac = /\\.\\d+/.exec(parts[i]);\n\t\tif(frac) {\n\t\t\tfixed = Math.max(fixed,frac[0].length-1);\n\t\t}\n\t\tparts[i] = parseFloat(parts[i]);\n\t}\n\tswitch(parts.length) {\n\t\tcase 1:\n\t\t\tend = parts[0];\n\t\t\tif (end >= 1) {\n\t\t\t\tbeg = 1;\n\t\t\t}\n\t\t\telse if (end <= -1) {\n\t\t\t\tbeg = -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = Math.abs(parts[2]);\n\t\t\tbreak;\n\t}\n\tif(inc === 0) {\n\t\treturn [\"range: increment 0 causes infinite loop\"];\n\t}\n\t// May need to count backwards\n\tvar direction = ((end < beg) ? -1 : 1);\n\tinc *= direction;\n\t// Estimate number of resulting elements\n\tif((end - beg) / inc > 10000) {\n\t\treturn [\"range: too many steps (over 10K)\"];\n\t}\n\t// Avoid rounding error on last step\n\tend += direction * 0.5 * Math.pow(0.1,fixed);\n\tvar safety = 10010;\n\t// Enumerate the range\n\tif (end<beg) {\n\t\tfor(i=beg; i>end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor(i=beg; i<end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif(safety<0) {\n\t\treturn [\"range: unexpectedly large output\"];\n\t}\n\t// Reverse?\n\tif(operator.prefix === \"!\") {\n\t\tresults.reverse();\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/regexp.js": {
            "title": "$:/core/modules/filters/regexp.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/removeprefix.js": {
            "title": "$:/core/modules/filters/removeprefix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/removesuffix.js": {
            "title": "$:/core/modules/filters/removesuffix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title && title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/sameday.js": {
            "title": "$:/core/modules/filters/sameday.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(tiddler.getFieldDay(fieldName) === targetDate) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/search.js": {
            "title": "$:/core/modules/filters/search.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffixes) {\n\t\tvar hasFlag = function(flag) {\n\t\t\t\treturn (operator.suffixes[1] || []).indexOf(flag) !== -1;\n\t\t\t},\n\t\t\texcludeFields = false,\n\t\t\tfieldList = operator.suffixes[0] || [],\n\t\t\tfirstField = fieldList[0] || \"\", \n\t\t\tfirstChar = firstField.charAt(0),\n\t\t\tfields;\n\t\tif(firstChar === \"-\") {\n\t\t\tfields = [firstField.slice(1)].concat(fieldList.slice(1));\n\t\t\texcludeFields = true;\n\t\t} else if(fieldList[0] === \"*\"){\n\t\t\tfields = [];\n\t\t\texcludeFields = true;\n\t\t} else {\n\t\t\tfields = fieldList.slice(0);\n\t\t}\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: fields,\n\t\t\texcludeField: excludeFields,\n\t\t\tcaseSensitive: hasFlag(\"casesensitive\"),\n\t\t\tliteral: hasFlag(\"literal\"),\n\t\t\twhitespace: hasFlag(\"whitespace\"),\n\t\t\tanchored: hasFlag(\"anchored\"),\n\t\t\tregexp: hasFlag(\"regexp\"),\n\t\t\twords: hasFlag(\"words\")\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/shadowsource.js": {
            "title": "$:/core/modules/filters/shadowsource.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/sort.js": {
            "title": "$:/core/modules/filters/sort.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortan = function(source, operator, options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results, operator.operand || \"title\", operator.prefix === \"!\",false,false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/splitbefore.js": {
            "title": "$:/core/modules/filters/splitbefore.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/storyviews.js": {
            "title": "$:/core/modules/filters/storyviews.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/strings.js": {
            "title": "$:/core/modules/filters/strings.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/strings.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for strings. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.length = makeStringBinaryOperator(\n\tfunction(a) {return [\"\" + (\"\" + a).length];}\n);\n\nexports.uppercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toUpperCase()];}\n);\n\nexports.lowercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toLowerCase()];}\n);\n\nexports.sentencecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toSentenceCase(a)];}\n);\n\nexports.titlecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toTitleCase(a)];}\n);\n\nexports.trim = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.trim(a)];}\n);\n\nexports.split = makeStringBinaryOperator(\n\tfunction(a,b) {return (\"\" + a).split(b);}\n);\n\nexports.join = makeStringReducingOperator(\n\tfunction(accumulator,value,operand) {\n\t\tif(accumulator === null) {\n\t\t\treturn value;\n\t\t} else {\n\t\t\treturn accumulator + operand + value;\n\t\t}\n\t},null\n);\n\nfunction makeStringBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tArray.prototype.push.apply(result,fnCalc(title,operator.operand || \"\"));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeStringReducingOperator(fnCalc,initialValue) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,currentValue,operator.operand || \"\");\n\t\t},initialValue) || \"\"];\n\t};\n}\n\nexports.splitregexp = function(source,operator,options) {\n\tvar result = [],\n\t\tsuffix = operator.suffix || \"\",\n\t\tflags = (suffix.indexOf(\"m\") !== -1 ? \"m\" : \"\") + (suffix.indexOf(\"i\") !== -1 ? \"i\" : \"\"),\n\t\tregExp;\n\ttry {\n\t\tregExp = new RegExp(operator.operand || \"\",flags);\t\t\n\t} catch(ex) {\n\t\treturn [\"RegExp error: \" + ex];\n\t}\n\tsource(function(tiddler,title) {\n\t\tArray.prototype.push.apply(result,title.split(regExp));\n\t});\t\t\n\treturn result;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/subfilter.js": {
            "title": "$:/core/modules/filters/subfilter.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/subfilter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand evaluated as a filter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subfilter = function(source,operator,options) {\n\tvar list = options.wiki.filterTiddlers(operator.operand,options.widget,source);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/subtiddlerfields.js": {
            "title": "$:/core/modules/filters/subtiddlerfields.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/subtiddlerfields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected subtiddlers of the plugin named in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subtiddlerfields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar subtiddler = options.wiki.getSubTiddler(operator.operand,title);\n\t\tif(subtiddler) {\n\t\t\tfor(var fieldName in subtiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/suffix.js": {
            "title": "$:/core/modules/filters/suffix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tag.js": {
            "title": "$:/core/modules/filters/tag.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [],indexedResults;\n\tif((operator.suffix || \"\").toLowerCase() === \"strict\" && !operator.operand) {\n\t\t// New semantics:\n\t\t// Always return copy of input if operator.operand is missing\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t} else {\n\t\t// Old semantics:\n\t\tvar tiddlers;\n\t\tif(operator.prefix === \"!\") {\n\t\t\t// Returns a copy of the input if operator.operand is missing\n\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddlers.indexOf(title) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Returns empty results if operator.operand is missing\n\t\t\tif(source.byTag) {\n\t\t\t\tindexedResults = source.byTag(operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\t\tsource(function(tiddler,title) {\n\t\t\t\t\tif(tiddlers.indexOf(title) !== -1) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t\t\t}\n\t\t}\t\t\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tagging.js": {
            "title": "$:/core/modules/filters/tagging.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tags.js": {
            "title": "$:/core/modules/filters/tags.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/then.js": {
            "title": "$:/core/modules/filters/then.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/then.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing any titles with a constant\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.then = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/title.js": {
            "title": "$:/core/modules/filters/title.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/untagged.js": {
            "title": "$:/core/modules/filters/untagged.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/variables.js": {
            "title": "$:/core/modules/filters/variables.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/variables.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the active variables\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variables = function(source,operator,options) {\n\tvar names = [];\n\tfor(var variable in options.widget.variables) {\n\t\tnames.push(variable);\n\t}\n\treturn names.sort();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/wikiparserrules.js": {
            "title": "$:/core/modules/filters/wikiparserrules.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [],\n\t\toperand = operator.operand;\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(!operand || exp.types[operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/x-listops.js": {
            "title": "$:/core/modules/filters/x-listops.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n    /*jslint node: true, browser: true */\n    /*global $tw: false */\n    \"use strict\";\n\n    /*\n    Fetch titles from the current list\n    */\n    var prepare_results = function (source) {\n    var results = [];\n        source(function (tiddler, title) {\n            results.push(title);\n        });\n        return results;\n    };\n\n    /*\n    Moves a number of items from the tail of the current list before the item named in the operand\n    */\n    exports.putbefore = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = $tw.utils.getInt(operator.suffix,1);\n        return (index === -1) ?\n            results.slice(0, -1) :\n            results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n    };\n\n    /*\n    Moves a number of items from the tail of the current list after the item named in the operand\n    */\n    exports.putafter = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = $tw.utils.getInt(operator.suffix,1);\n        return (index === -1) ?\n            results.slice(0, -1) :\n            results.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n    };\n\n    /*\n    Replaces the item named in the operand with a number of items from the tail of the current list\n    */\n    exports.replace = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = $tw.utils.getInt(operator.suffix,1);\n        return (index === -1) ?\n            results.slice(0, -count) :\n            results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n    };\n\n    /*\n    Moves a number of items from the tail of the current list to the head of the list\n    */\n    exports.putfirst = function (source, operator) {\n        var results = prepare_results(source),\n            count = $tw.utils.getInt(operator.suffix,1);\n        return results.slice(-count).concat(results.slice(0, -count));\n    };\n\n    /*\n    Moves a number of items from the head of the current list to the tail of the list\n    */\n    exports.putlast = function (source, operator) {\n        var results = prepare_results(source),\n            count = $tw.utils.getInt(operator.suffix,1);\n        return results.slice(count).concat(results.slice(0, count));\n    };\n\n    /*\n    Moves the item named in the operand a number of places forward or backward in the list\n    */\n    exports.move = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = $tw.utils.getInt(operator.suffix,1),\n            marker = results.splice(index, 1),\n            offset =  (index + count) > 0 ? index + count : 0;\n        return results.slice(0, offset).concat(marker).concat(results.slice(offset));\n    };\n\n    /*\n    Returns the items from the current list that are after the item named in the operand\n    */\n    exports.allafter = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand);\n        return (index === -1) ? [] :\n            (operator.suffix) ? results.slice(index) :\n            results.slice(index + 1);\n    };\n\n    /*\n    Returns the items from the current list that are before the item named in the operand\n    */\n    exports.allbefore = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand);\n        return (index === -1) ? [] :\n            (operator.suffix) ? results.slice(0, index + 1) :\n            results.slice(0, index);\n    };\n\n    /*\n    Appends the items listed in the operand array to the tail of the current list\n    */\n    exports.append = function (source, operator) {\n        var append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n            results = prepare_results(source),\n            count = parseInt(operator.suffix) || append.length;\n        return (append.length === 0) ? results :\n            (operator.prefix) ? results.concat(append.slice(-count)) :\n            results.concat(append.slice(0, count));\n    };\n\n    /*\n    Prepends the items listed in the operand array to the head of the current list\n    */\n    exports.prepend = function (source, operator) {\n        var prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n            results = prepare_results(source),\n            count = $tw.utils.getInt(operator.suffix,prepend.length);\n        return (prepend.length === 0) ? results :\n            (operator.prefix) ? prepend.slice(-count).concat(results) :\n            prepend.slice(0, count).concat(results);\n    };\n\n    /*\n    Returns all items from the current list except the items listed in the operand array\n    */\n    exports.remove = function (source, operator) {\n        var array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n            results = prepare_results(source),\n            count = parseInt(operator.suffix) || array.length,\n            p,\n            len,\n            index;\n        len = array.length - 1;\n        for (p = 0; p < count; ++p) {\n            if (operator.prefix) {\n                index = results.indexOf(array[len - p]);\n            } else {\n                index = results.indexOf(array[p]);\n            }\n            if (index !== -1) {\n                results.splice(index, 1);\n            }\n        }\n        return results;\n    };\n\n    /*\n    Returns all items from the current list sorted in the order of the items in the operand array\n    */\n    exports.sortby = function (source, operator) {\n        var results = prepare_results(source);\n        if (!results || results.length < 2) {\n            return results;\n        }\n        var lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n        results.sort(function (a, b) {\n            return lookup.indexOf(a) - lookup.indexOf(b);\n        });\n        return results;\n    };\n\n    /*\n    Removes all duplicate items from the current list\n    */\n    exports.unique = function (source, operator) {\n        var results = prepare_results(source);\n        var set = results.reduce(function (a, b) {\n            if (a.indexOf(b) < 0) {\n                a.push(b);\n            }\n            return a;\n        }, []);\n        return set;\n    };\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters.js": {
            "title": "$:/core/modules/filters.js",
            "text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation (i.e. a run) within a filter string\n\toperators: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar nextBracketPos, operator;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tnextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\t// The raw suffix for older filters\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t\t// The processed suffix for newer filters\n\t\t\toperator.suffixes = [];\n\t\t\t$tw.utils.each(operator.suffix.split(\":\"),function(subsuffix) {\n\t\t\t\toperator.suffixes.push([]);\n\t\t\t\t$tw.utils.each(subsuffix.split(\",\"),function(entry) {\n\t\t\t\t\tentry = $tw.utils.trim(entry);\n\t\t\t\t\tif(entry) {\n\t\t\t\t\t\toperator.suffixes[operator.suffixes.length - 1].push(entry); \n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\t\tcase \"{\": // Curly brackets\n\t\t\t\toperator.indirect = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"[\": // Square brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"<\": // Angle brackets\n\t\t\t\toperator.variable = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"/\": // regexp brackets\n\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\tif(rexMatch) {\n\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n// DEPRECATION WARNING\nconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t}\n\t\tif(!operator.regexp) {\n\t\t\toperator.operand = filterString.substring(p,nextBracketPos);\n\t\t}\n\t\tp = nextBracketPos + 1;\n\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-|~|=)?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow $tw.language.getString(\"Error/FilterSyntax\");\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[3] || match[4] || match[5]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operand: match[3] || match[4] || match[5]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [$tw.language.getString(\"Error/Filter\") + \": \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operand = operator.operand,\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\t\t\t\tif(operator.indirect) {\n\t\t\t\t\toperand = self.getTextReference(operator.operand,\"\",currTiddlerTitle);\n\t\t\t\t}\n\t\t\t\tif(operator.variable) {\n\t\t\t\t\toperand = widget.getVariable(operator.operand,{defaultValue: \"\"});\n\t\t\t\t}\n\t\t\t\t// Invoke the appropriate filteroperator module\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operand,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tsuffixes: operator.suffixes,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"=\": // The results of the operation are pushed into the result without deduplication\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\tArray.prototype.push.apply(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.removeArrayEntries(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\t\t\t\t\tsource = self.makeTiddlerIterator(results);\n\t\t\t\t\t\tresults.splice(0,results.length);\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"~\": // This operation is unioned into the result only if the main result so far is empty\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\tif(results.length === 0) {\n\t\t\t\t\t\t\t// Main result so far is empty\n\t\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter: \" + filterString,function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tvar results = [];\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results;\n\t});\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/core/modules/indexers/backlinks-indexer.js": {
            "title": "$:/core/modules/indexers/backlinks-indexer.js",
            "text": "/*\\\ntitle: $:/core/modules/indexers/backlinks-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers' backlinks\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\n\nfunction BacklinksIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nBacklinksIndexer.prototype.init = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype.rebuild = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype._getLinks = function(tiddler) {\n\tvar parser =  this.wiki.parseText(tiddler.fields.type, tiddler.fields.text, {});\n\tif(parser) {\n\t\treturn this.wiki.extractLinks(parser.tree);\n\t}\n\treturn [];\n}\n\nBacklinksIndexer.prototype.update = function(updateDescriptor) {\n\tif(!this.index) {\n\t\treturn;\n\t}\n\tvar newLinks = [],\n\t    oldLinks = [],\n\t    self = this;\n\tif(updateDescriptor.old.exists) {\n\t\toldLinks = this._getLinks(updateDescriptor.old.tiddler);\n\t}\n\tif(updateDescriptor.new.exists) {\n\t\tnewLinks = this._getLinks(updateDescriptor.new.tiddler);\n\t}\n\n\t$tw.utils.each(oldLinks,function(link) {\n\t\tif(self.index[link]) {\n\t\t\tdelete self.index[link][updateDescriptor.old.tiddler.fields.title];\n\t\t}\n\t});\n\t$tw.utils.each(newLinks,function(link) {\n\t\tif(!self.index[link]) {\n\t\t\tself.index[link] = Object.create(null);\n\t\t}\n\t\tself.index[link][updateDescriptor.new.tiddler.fields.title] = true;\n\t});\n}\n\nBacklinksIndexer.prototype.lookup = function(title) {\n\tif(!this.index) {\n\t\tthis.index = Object.create(null);\n\t\tvar self = this;\n\t\tthis.wiki.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self._getLinks(tiddler);\n\t\t\t$tw.utils.each(links, function(link) {\n\t\t\t\tif(!self.index[link]) {\n\t\t\t\t\tself.index[link] = Object.create(null);\n\t\t\t\t}\n\t\t\t\tself.index[link][title] = true;\n\t\t\t});\n\t\t});\n\t}\n\tif(this.index[title]) {\n\t\treturn Object.keys(this.index[title]);\n\t} else {\n\t\treturn [];\n\t}\n}\n\nexports.BacklinksIndexer = BacklinksIndexer;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "indexer"
        },
        "$:/core/modules/indexers/field-indexer.js": {
            "title": "$:/core/modules/indexers/field-indexer.js",
            "text": "/*\\\ntitle: $:/core/modules/indexers/field-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nvar DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH = 128;\n\nfunction FieldIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nFieldIndexer.prototype.init = function() {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH;\n\tthis.addIndexMethods();\n}\n\n// Provided for testing\nFieldIndexer.prototype.setMaxIndexedValueLength = function(length) {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = length;\n};\n\nFieldIndexer.prototype.addIndexMethods = function() {\n\tvar self = this;\n\tthis.wiki.each.byField = function(name,value) {\n\t\tvar titles = self.wiki.allTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachShadow.byField = function(name,value) {\n\t\tvar titles = self.wiki.allShadowTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachTiddlerPlusShadows.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n\tthis.wiki.eachShadowPlusTiddlers.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n};\n\n/*\nTear down and then rebuild the index as if all tiddlers have changed\n*/\nFieldIndexer.prototype.rebuild = function() {\n\t// Invalidate the index so that it will be rebuilt when it is next used\n\tthis.index = null;\n};\n\n/*\nBuild the index for a particular field\n*/\nFieldIndexer.prototype.buildIndexForField = function(name) {\n\tvar self = this;\n\t// Hashmap by field name of hashmap by field value of array of tiddler titles\n\tthis.index = this.index || Object.create(null);\n\tthis.index[name] = Object.create(null);\n\tvar baseIndex = this.index[name];\n\t// Update the index for each tiddler\n\tthis.wiki.eachTiddlerPlusShadows(function(tiddler,title) {\n\t\tif(name in tiddler.fields) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t// Skip any values above the maximum length\n\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\tbaseIndex[value] = baseIndex[value] || [];\n\t\t\t\tbaseIndex[value].push(title);\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nUpdate the index in the light of a tiddler value changing; note that the title must be identical. (Renames are handled as a separate delete and create)\nupdateDescriptor: {old: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>},new: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>}}\n*/\nFieldIndexer.prototype.update = function(updateDescriptor) {\n\tvar self = this;\n\t// Don't do anything if the index hasn't been built yet\n\tif(this.index === null) {\n\t\treturn;\n\t}\n\t// Remove the old tiddler from the index\n\tif(updateDescriptor.old.tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor.old.tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor.old.tiddler.getFieldString(name),\n\t\t\t\t\ttiddlerList = indexEntry[value];\n\t\t\t\tif(tiddlerList) {\n\t\t\t\t\tvar index = tiddlerList.indexOf(updateDescriptor.old.tiddler.fields.title);\n\t\t\t\t\tif(index !== -1) {\n\t\t\t\t\t\ttiddlerList.splice(index,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// Add the new tiddler to the index\n\tif(updateDescriptor[\"new\"].tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor[\"new\"].tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor[\"new\"].tiddler.getFieldString(name);\n\t\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\t\tindexEntry[value] = indexEntry[value] || [];\n\t\t\t\t\tindexEntry[value].push(updateDescriptor[\"new\"].tiddler.fields.title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n// Lookup the given field returning a list of tiddler titles\nFieldIndexer.prototype.lookup = function(name,value) {\n\t// Fail the lookup if the value is too long\n\tif(value.length >= this.maxIndexedValueLength) {\n\t\treturn null;\n\t}\n\t// Update the index if it has yet to be built\n\tif(this.index === null || !this.index[name]) {\n\t\tthis.buildIndexForField(name);\n\t}\n\treturn this.index[name][value] || [];\n};\n\nexports.FieldIndexer = FieldIndexer;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "indexer"
        },
        "$:/core/modules/indexers/tag-indexer.js": {
            "title": "$:/core/modules/indexers/tag-indexer.js",
            "text": "/*\\\ntitle: $:/core/modules/indexers/tag-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nfunction TagIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nTagIndexer.prototype.init = function() {\n\tthis.subIndexers = [\n\t\tnew TagSubIndexer(this,\"each\"),\n\t\tnew TagSubIndexer(this,\"eachShadow\"),\n\t\tnew TagSubIndexer(this,\"eachTiddlerPlusShadows\"),\n\t\tnew TagSubIndexer(this,\"eachShadowPlusTiddlers\")\n\t];\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.addIndexMethod();\n\t});\n};\n\nTagIndexer.prototype.rebuild = function() {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.rebuild();\n\t});\n};\n\nTagIndexer.prototype.update = function(updateDescriptor) {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.update(updateDescriptor);\n\t});\n};\n\nfunction TagSubIndexer(indexer,iteratorMethod) {\n\tthis.indexer = indexer;\n\tthis.iteratorMethod = iteratorMethod;\n\tthis.index = null; // Hashmap of tag title to {isSorted: bool, titles: [array]} or null if not yet initialised\n}\n\nTagSubIndexer.prototype.addIndexMethod = function() {\n\tvar self = this;\n\tthis.indexer.wiki[this.iteratorMethod].byTag = function(tag) {\n\t\treturn self.lookup(tag).slice(0);\n\t};\n};\n\nTagSubIndexer.prototype.rebuild = function() {\n\tvar self = this;\n\t// Hashmap by tag of array of {isSorted:, titles:[]}\n\tthis.index = Object.create(null);\n\t// Add all the tags\n\tthis.indexer.wiki[this.iteratorMethod](function(tiddler,title) {\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\tif(!self.index[tag]) {\n\t\t\t\tself.index[tag] = {isSorted: false, titles: [title]};\n\t\t\t} else {\n\t\t\t\tself.index[tag].titles.push(title);\n\t\t\t}\n\t\t});\t\t\n\t});\n};\n\nTagSubIndexer.prototype.update = function(updateDescriptor) {\n\tthis.index = null;\n};\n\nTagSubIndexer.prototype.lookup = function(tag) {\n\t// Update the index if it has yet to be built\n\tif(this.index === null) {\n\t\tthis.rebuild();\n\t}\n\tvar indexRecord = this.index[tag];\n\tif(indexRecord) {\n\t\tif(!indexRecord.isSorted) {\n\t\t\tif(this.indexer.wiki.sortByList) {\n\t\t\t\tindexRecord.titles = this.indexer.wiki.sortByList(indexRecord.titles,tag);\n\t\t\t}\t\t\t\n\t\t\tindexRecord.isSorted = true;\n\t\t}\n\t\treturn indexRecord.titles;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n\nexports.TagIndexer = TagIndexer;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "indexer"
        },
        "$:/core/modules/info/platform.js": {
            "title": "$:/core/modules/info/platform.js",
            "text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function() {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\tif($tw.browser) {\n\t\t// Document location\n\t\tvar setLocationProperty = function(name,value) {\n\t\t\t\tinfoTiddlerFields.push({title: \"$:/info/url/\" + name, text: value});\t\t\t\n\t\t\t},\n\t\t\tlocation = document.location;\n\t\tsetLocationProperty(\"full\", (location.toString()).split(\"#\")[0]);\n\t\tsetLocationProperty(\"host\", location.host);\n\t\tsetLocationProperty(\"hostname\", location.hostname);\n\t\tsetLocationProperty(\"protocol\", location.protocol);\n\t\tsetLocationProperty(\"port\", location.port);\n\t\tsetLocationProperty(\"pathname\", location.pathname);\n\t\tsetLocationProperty(\"search\", location.search);\n\t\tsetLocationProperty(\"origin\", location.origin);\n\t\t// Screen size\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/width\", text: window.screen.width.toString()});\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/height\", text: window.screen.height.toString()});\n\t\t// Language\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/language\", text: navigator.language || \"\"});\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "info"
        },
        "$:/core/modules/keyboard.js": {
            "title": "$:/core/modules/keyboard.js",
            "text": "/*\\\ntitle: $:/core/modules/keyboard.js\ntype: application/javascript\nmodule-type: global\n\nKeyboard handling utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"cancel\": 3,\n\t\"help\": 6,\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"clear\": 12,\n\t\"return\": 13,\n\t\"enter\": 13,\n\t\"pause\": 19,\n\t\"escape\": 27,\n\t\"space\": 32,\n\t\"page_up\": 33,\n\t\"page_down\": 34,\n\t\"end\": 35,\n\t\"home\": 36,\n\t\"left\": 37,\n\t\"up\": 38,\n\t\"right\": 39,\n\t\"down\": 40,\n\t\"printscreen\": 44,\n\t\"insert\": 45,\n\t\"delete\": 46,\n\t\"0\": 48,\n\t\"1\": 49,\n\t\"2\": 50,\n\t\"3\": 51,\n\t\"4\": 52,\n\t\"5\": 53,\n\t\"6\": 54,\n\t\"7\": 55,\n\t\"8\": 56,\n\t\"9\": 57,\n\t\"firefoxsemicolon\": 59,\n\t\"firefoxequals\": 61,\n\t\"a\": 65,\n\t\"b\": 66,\n\t\"c\": 67,\n\t\"d\": 68,\n\t\"e\": 69,\n\t\"f\": 70,\n\t\"g\": 71,\n\t\"h\": 72,\n\t\"i\": 73,\n\t\"j\": 74,\n\t\"k\": 75,\n\t\"l\": 76,\n\t\"m\": 77,\n\t\"n\": 78,\n\t\"o\": 79,\n\t\"p\": 80,\n\t\"q\": 81,\n\t\"r\": 82,\n\t\"s\": 83,\n\t\"t\": 84,\n\t\"u\": 85,\n\t\"v\": 86,\n\t\"w\": 87,\n\t\"x\": 88,\n\t\"y\": 89,\n\t\"z\": 90,\n\t\"numpad0\": 96,\n\t\"numpad1\": 97,\n\t\"numpad2\": 98,\n\t\"numpad3\": 99,\n\t\"numpad4\": 100,\n\t\"numpad5\": 101,\n\t\"numpad6\": 102,\n\t\"numpad7\": 103,\n\t\"numpad8\": 104,\n\t\"numpad9\": 105,\n\t\"multiply\": 106,\n\t\"add\": 107,\n\t\"separator\": 108,\n\t\"subtract\": 109,\n\t\"decimal\": 110,\n\t\"divide\": 111,\n\t\"f1\": 112,\n\t\"f2\": 113,\n\t\"f3\": 114,\n\t\"f4\": 115,\n\t\"f5\": 116,\n\t\"f6\": 117,\n\t\"f7\": 118,\n\t\"f8\": 119,\n\t\"f9\": 120,\n\t\"f10\": 121,\n\t\"f11\": 122,\n\t\"f12\": 123,\n\t\"f13\": 124,\n\t\"f14\": 125,\n\t\"f15\": 126,\n\t\"f16\": 127,\n\t\"f17\": 128,\n\t\"f18\": 129,\n\t\"f19\": 130,\n\t\"f20\": 131,\n\t\"f21\": 132,\n\t\"f22\": 133,\n\t\"f23\": 134,\n\t\"f24\": 135,\n\t\"firefoxminus\": 173,\n\t\"semicolon\": 186,\n\t\"equals\": 187,\n\t\"comma\": 188,\n\t\"dash\": 189,\n\t\"period\": 190,\n\t\"slash\": 191,\n\t\"backquote\": 192,\n\t\"openbracket\": 219,\n\t\"backslash\": 220,\n\t\"closebracket\": 221,\n\t\"quote\": 222\n};\n\nfunction KeyboardManager(options) {\n\tvar self = this;\n\toptions = options || \"\";\n\t// Save the named key hashmap\n\tthis.namedKeys = namedKeys;\n\t// Create a reverse mapping of code to keyname\n\tthis.keyNames = [];\n\t$tw.utils.each(namedKeys,function(keyCode,name) {\n\t\tself.keyNames[keyCode] = name.substr(0,1).toUpperCase() + name.substr(1);\n\t});\n\t// Save the platform-specific name of the \"meta\" key\n\tthis.metaKeyName = $tw.platform.isMac ? \"cmd-\" : \"win-\";\n\tthis.shortcutKeysList = [], // Stores the shortcut-key descriptors\n\tthis.shortcutActionList = [], // Stores the corresponding action strings\n\tthis.shortcutParsedList = []; // Stores the parsed key descriptors\n\tthis.lookupNames = [\"shortcuts\"];\n\tthis.lookupNames.push($tw.platform.isMac ? \"shortcuts-mac\" : \"shortcuts-not-mac\")\n\tthis.lookupNames.push($tw.platform.isWindows ? \"shortcuts-windows\" : \"shortcuts-not-windows\");\n\tthis.lookupNames.push($tw.platform.isLinux ? \"shortcuts-linux\" : \"shortcuts-not-linux\");\n\tthis.updateShortcutLists(this.getShortcutTiddlerList());\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.handleShortcutChanges(changes);\n\t});\n}\n\n/*\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\n*/\nKeyboardManager.prototype.getModifierKeys = function() {\n\treturn [\n\t\t16, // Shift\n\t\t17, // Ctrl\n\t\t18, // Alt\n\t\t20, // CAPS LOCK\n\t\t91, // Meta (left)\n\t\t93, // Meta (right)\n\t\t224 // Meta (Firefox)\n\t]\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n\tmetaKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nKeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(/\\+|\\-/),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase(),\n\t\t\tc = s.charCodeAt(0);\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\" || s === \"cmd\" || s === \"win\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(this.namedKeys[s]) {\n\t\t\tinfo.keyCode = this.namedKeys[s];\n\t\t}\n\t}\n\tif(info.keyCode) {\n\t\treturn info;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\n*/\nKeyboardManager.prototype.parseKeyDescriptors = function(keyDescriptors,options) {\n\tvar self = this;\n\toptions = options || {};\n\toptions.stack = options.stack || [];\n\tvar wiki = options.wiki || $tw.wiki;\n\tif(typeof keyDescriptors === \"string\" && keyDescriptors === \"\") {\n\t\treturn [];\n\t}\n\tif(!$tw.utils.isArray(keyDescriptors)) {\n\t\tkeyDescriptors = keyDescriptors.split(\" \");\n\t}\n\tvar result = [];\n\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\n\t\t// Look for a named shortcut\n\t\tif(keyDescriptor.substr(0,2) === \"((\" && keyDescriptor.substr(-2,2) === \"))\") {\n\t\t\tif(options.stack.indexOf(keyDescriptor) === -1) {\n\t\t\t\toptions.stack.push(keyDescriptor);\n\t\t\t\tvar name = keyDescriptor.substring(2,keyDescriptor.length - 2),\n\t\t\t\t\tlookupName = function(configName) {\n\t\t\t\t\t\tvar keyDescriptors = wiki.getTiddlerText(\"$:/config/\" + configName + \"/\" + name);\n\t\t\t\t\t\tif(keyDescriptors) {\n\t\t\t\t\t\t\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t$tw.utils.each(self.lookupNames,function(platformDescriptor) {\n\t\t\t\t\tlookupName(platformDescriptor);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push(self.parseKeyDescriptor(keyDescriptor));\n\t\t}\n\t});\n\treturn result;\n};\n\nKeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {\n\tvar self = this,\n\t\tresult = [];\n\t$tw.utils.each(keyInfoArray,function(keyInfo) {\n\t\tif(keyInfo) {\n\t\t\tresult.push((keyInfo.ctrlKey ? \"ctrl-\" : \"\") + \n\t\t\t\t   (keyInfo.shiftKey ? \"shift-\" : \"\") + \n\t\t\t\t   (keyInfo.altKey ? \"alt-\" : \"\") + \n\t\t\t\t   (keyInfo.metaKey ? self.metaKeyName : \"\") + \n\t\t\t\t   (self.keyNames[keyInfo.keyCode]));\n\t\t}\n\t});\n\treturn result;\n}\n\nKeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {\n\treturn keyInfo &&\n\t\t\tevent.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === keyInfo.metaKey;\n};\n\nKeyboardManager.prototype.checkKeyDescriptors = function(event,keyInfoArray) {\n\tfor(var t=0; t<keyInfoArray.length; t++) {\n\t\tif(this.checkKeyDescriptor(event,keyInfoArray[t])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.getShortcutTiddlerList = function() {\n\treturn $tw.wiki.getTiddlersWithTag(\"$:/tags/KeyboardShortcut\");\n};\n\nKeyboardManager.prototype.updateShortcutLists = function(tiddlerList) {\n\tthis.shortcutTiddlers = tiddlerList;\n\tfor(var i=0; i<tiddlerList.length; i++) {\n\t\tvar title = tiddlerList[i],\n\t\t\ttiddlerFields = $tw.wiki.getTiddler(title).fields;\n\t\tthis.shortcutKeysList[i] = tiddlerFields.key !== undefined ? tiddlerFields.key : undefined;\n\t\tthis.shortcutActionList[i] = tiddlerFields.text;\n\t\tthis.shortcutParsedList[i] = this.shortcutKeysList[i] !== undefined ? this.parseKeyDescriptors(this.shortcutKeysList[i]) : undefined;\n\t}\n};\n\nKeyboardManager.prototype.handleKeydownEvent = function(event) {\n\tvar key, action;\n\tfor(var i=0; i<this.shortcutTiddlers.length; i++) {\n\t\tif(this.shortcutParsedList[i] !== undefined && this.checkKeyDescriptors(event,this.shortcutParsedList[i])) {\n\t\t\tkey = this.shortcutParsedList[i];\n\t\t\taction = this.shortcutActionList[i];\n\t\t}\n\t}\n\tif(key !== undefined) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\t$tw.rootWidget.invokeActionString(action,$tw.rootWidget);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.detectNewShortcuts = function(changedTiddlers) {\n\tvar shortcutConfigTiddlers = [],\n\t\thandled = false;\n\t$tw.utils.each(this.lookupNames,function(platformDescriptor) {\n\t\tvar descriptorString = \"$:/config/\" + platformDescriptor + \"/\";\n\t\tObject.keys(changedTiddlers).forEach(function(configTiddler) {\n\t\t\tvar configString = configTiddler.substr(0, configTiddler.lastIndexOf(\"/\") + 1);\n\t\t\tif(configString === descriptorString) {\n\t\t\t\tshortcutConfigTiddlers.push(configTiddler);\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t});\n\t});\n\tif(handled) {\n\t\treturn $tw.utils.hopArray(changedTiddlers,shortcutConfigTiddlers);\n\t} else {\n\t\treturn false;\n\t}\n};\n\nKeyboardManager.prototype.handleShortcutChanges = function(changedTiddlers) {\n\tvar newList = this.getShortcutTiddlerList();\n\tvar hasChanged = $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) ? true :\n\t\t($tw.utils.hopArray(changedTiddlers,newList) ? true :\n\t\t(this.detectNewShortcuts(changedTiddlers))\n\t);\n\t// Re-cache shortcuts if something changed\n\tif(hasChanged) {\n\t\tthis.updateShortcutLists(newList);\n\t}\n};\n\nexports.KeyboardManager = KeyboardManager;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/language.js": {
            "title": "$:/core/modules/language.js",
            "text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/macros/changecount.js": {
            "title": "$:/core/modules/macros/changecount.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/contrastcolour.js": {
            "title": "$:/core/modules/macros/contrastcolour.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB);\n\tif(rgbColourA && !rgbColourB) {\n\t\treturn rgbColourA;\n\t}\n\tif(rgbColourB && !rgbColourA) {\n\t\treturn rgbColourB;\n\t}\n\tif(!rgbColourA && !rgbColourB) {\n\t\t// If neither colour is readable, return a crude inverse of the target\n\t\treturn [255 - rgbTarget[0],255 - rgbTarget[1],255 - rgbTarget[2],rgbTarget[3]];\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar brightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/csvtiddlers.js": {
            "title": "$:/core/modules/macros/csvtiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/displayshortcuts.js": {
            "title": "$:/core/modules/macros/displayshortcuts.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/displayshortcuts.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"displayshortcuts\";\n\nexports.params = [\n\t{name: \"shortcuts\"},\n\t{name: \"prefix\"},\n\t{name: \"separator\"},\n\t{name: \"suffix\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(shortcuts,prefix,separator,suffix) {\n\tvar shortcutArray = $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\n\t\twiki: this.wiki\n\t}));\n\tif(shortcutArray.length > 0) {\n\t\tshortcutArray.sort(function(a,b) {\n\t\t    return a.toLowerCase().localeCompare(b.toLowerCase());\n\t\t})\n\t\treturn prefix + shortcutArray.join(separator) + suffix;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/jsontiddler.js": {
            "title": "$:/core/modules/macros/jsontiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/jsontiddler.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output a single tiddler to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddler\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\ttitle = title || this.getVariable(\"currentTiddler\");\n\tvar tiddler = !!title && this.wiki.getTiddler(title),\n\t\tfields = new Object();\n\tif(tiddler) {\n\t\tfor(var field in tiddler.fields) {\n\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t}\n\t}\n\treturn JSON.stringify(fields,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/jsontiddlers.js": {
            "title": "$:/core/modules/macros/jsontiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"spaces\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,spaces) {\n\treturn this.wiki.getTiddlersAsJson(filter,$tw.utils.parseInt(spaces));\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/makedatauri.js": {
            "title": "$:/core/modules/macros/makedatauri.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert a string of text to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"},\n\t{name: \"_canonical_uri\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type,_canonical_uri) {\n\treturn $tw.utils.makeDataUri(text,type,_canonical_uri);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/now.js": {
            "title": "$:/core/modules/macros/now.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/qualify.js": {
            "title": "$:/core/modules/macros/qualify.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/resolvepath.js": {
            "title": "$:/core/modules/macros/resolvepath.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/resolvepath.js\ntype: application/javascript\nmodule-type: macro\n\nResolves a relative path for an absolute rootpath.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"resolvepath\";\n\nexports.params = [\n\t{name: \"source\"},\n\t{name: \"root\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(source, root) {\n\treturn $tw.utils.resolvePath(source, root);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/unusedtitle.js": {
            "title": "$:/core/modules/macros/unusedtitle.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/unusedtitle.js\ntype: application/javascript\nmodule-type: macro\nMacro to return a new title that is unused in the wiki. It can be given a name as a base.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"unusedtitle\";\n\nexports.params = [\n\t{name: \"baseName\"},\n\t{name: \"options\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(baseName, options) {\n\tif(!baseName) {\n\t\tbaseName = $tw.language.getString(\"DefaultNewTiddlerTitle\");\n\t}\n\treturn this.wiki.generateNewTitle(baseName, options);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/version.js": {
            "title": "$:/core/modules/macros/version.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/parsers/audioparser.js": {
            "title": "$:/core/modules/parsers/audioparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/binaryparser.js": {
            "title": "$:/core/modules/parsers/binaryparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/binaryparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe binary parser parses a binary tiddler into a warning message and download link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar BinaryParser = function(type,text,options) {\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on binary tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!title\"}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to external or internal data URI\n\tif(options._canonical_uri) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: options._canonical_uri\n\t\t};\n\t} else if(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/octet-stream\"] = BinaryParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/csvparser.js": {
            "title": "$:/core/modules/parsers/csvparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/htmlparser.js": {
            "title": "$:/core/modules/parsers/htmlparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src},\n\t\t\tsandbox: {type: \"string\", value: \"\"}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/imageparser.js": {
            "title": "$:/core/modules/parsers/imageparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t};\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\tif(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"image/webp\"] = ImageParser;\nexports[\"image/heic\"] = ImageParser;\nexports[\"image/heif\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/utils/parseutils.js": {
            "title": "$:/core/modules/utils/parseutils.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treFilteredValue = /\\{\\{\\{(.+?)\\}\\}\\}/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for a filtered value\n\t\t\tvar filteredValue = $tw.utils.parseTokenRegExp(source,pos,reFilteredValue);\n\t\t\tif(filteredValue) {\n\t\t\t\tpos = filteredValue.end;\n\t\t\t\tnode.type = \"filtered\";\n\t\t\t\tnode.filter = filteredValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for an indirect value\n\t\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\t\tif(indirectValue) {\n\t\t\t\t\tpos = indirectValue.end;\n\t\t\t\t\tnode.type = \"indirect\";\n\t\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a unquoted value\n\t\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\t\tif(unquotedValue) {\n\t\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/parsers/pdfparser.js": {
            "title": "$:/core/modules/parsers/pdfparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/pdfparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe PDF parser embeds a PDF viewer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"embed\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/pdf\"] = ImageParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/textparser.js": {
            "title": "$:/core/modules/parsers/textparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/videoparser.js": {
            "title": "$:/core/modules/parsers/videoparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar VideoParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/ogg\"] = VideoParser;\nexports[\"video/webm\"] = VideoParser;\nexports[\"video/mp4\"] = VideoParser;\nexports[\"video/quicktime\"] = VideoParser;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/dash.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"&ndash;\" : \"&mdash;\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/entity.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: &copy;\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/extlink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: https://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/heading.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/html.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/html.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.slice(1).indexOf(\"$\") !== -1) {\n\t\treturn null;\n\t}\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Check that the tag is terminated by a space, / or >\n\tif(!$tw.utils.parseWhiteSpace(source,pos) && !(source.charAt(pos) === \"/\") && !(source.charAt(pos) === \">\") ) {\n\t\treturn null;\n\t}\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/image.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/image.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[https://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [https://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [https://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|https://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/import.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/import.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/import.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for importing variable definitions\n\n```\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"import\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\import[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the filter terminated by a line break\n\tvar reMatch = /(.*)(\\r?\\n)|$/mg;\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\tthis.parser.pos = reMatch.lastIndex;\n\t// Parse tree nodes to return\n\treturn [{\n\t\ttype: \"importvariables\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: match[1]}\n\t\t},\n\t\tchildren: []\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/list.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/list.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"div\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]|| paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /($|\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params,\n\t\tisMacroDefinition: true\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[https://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|https://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\tnode.attributes.rel = {type: \"string\", value: \"noopener noreferrer\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif($tw.utils.isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/rules.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/syslink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/syslink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for system tiddler links.\nCan be suppressed preceding them with `~`.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"syslink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp(\n\t\t\"~?\\\\$:\\\\/[\" +\n\t\t$tw.config.textPrimitives.anyLetter.substr(1,$tw.config.textPrimitives.anyLetter.length - 2) +\n\t\t\"\\/._-]+\",\n\t\t\"mg\"\n\t);\n};\n\nexports.parse = function() {\n\tvar match = this.match[0];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(match.substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: match.substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: match}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: match\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/table.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/table.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n  <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/whitespace.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/whitespace.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/whitespace.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for whitespace specifications\n\n```\n\\whitespace trim\n\\whitespace notrim\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"whitespace\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\whitespace[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\t$tw.utils.each(tokens,function(token) {\n\t\tswitch(token) {\n\t\t\tcase \"trim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = true;\n\t\t\t\tbreak;\n\t\t\tcase \"notrim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = false;\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/wikiparser.js": {
            "title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\t{type: \"macro\", macro: <TBD>} - indirect through a macro invocation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Flag for ignoring whitespace\n\tthis.configTrimWhiteSpace = false;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = [];\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined  && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t//  Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t//  Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex));\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index));\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex));\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\n*/\nWikiParser.prototype.pushTextWidget = function(array,text) {\n\tif(this.configTrimWhiteSpace) {\n\t\ttext = $tw.utils.trim(text);\n\t}\n\tif(text) {\n\t\tarray.push({type: \"text\", text: text});\t\t\n\t}\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar keepFilter;\n\tif(type === \"only\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) !== -1;\n\t\t};\n\t} else if(type === \"except\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) === -1;\n\t\t};\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif(!keepFilter(ruleArray[t].rule.name)) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/pluginswitcher.js": {
            "title": "$:/core/modules/pluginswitcher.js",
            "text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\nonSwitch: callback when plugin is switched (single parameter is array of plugin titles)\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\tthis.onSwitch = options.onSwitch;\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Read the plugin info for the incoming plugins\n\tvar changes = $tw.wiki.readPluginInfo(plugins);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n\t// Call the switch handler\n\tif(this.onSwitch) {\n\t\tthis.onSwitch(plugins);\n\t}\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/saver-handler.js": {
            "title": "$:/core/modules/saver-handler.js",
            "text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.preloadDirty = options.preloadDirty || [];\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(self.preloadDirty,function(title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t});\n\t\tthis.numChanges = filteredChanges.length;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\";\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\") {\n\t\treturn false;\n\t}\n\tvar\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert($tw.language.getString(\"Error/WhileSaving\") + \":\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/savers/andtidwiki.js": {
            "title": "$:/core/modules/savers/andtidwiki.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback,options) {\n\tvar filename = options && options.variables ? options.variables.filename : null;\n\tif (method === \"download\") {\n\t\t// Support download\n\t\tif (window.twi.saveDownload) {\n\t\t\ttry {\n\t\t\t\twindow.twi.saveDownload(text,filename);\n\t\t\t} catch(err) {\n\t\t\t\tif (err.message === \"Method not found\") {\n\t\t\t\t\twindow.twi.saveDownload(text);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar link = document.createElement(\"a\");\n\t\t\tlink.setAttribute(\"href\",\"data:text/plain,\" + encodeURIComponent(text));\n\t\t\tif (filename) {\n\t\t\t    link.setAttribute(\"download\",filename);\n\t\t\t}\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\t\t}\n\t} else if (window.twi.saveWiki) {\n\t\t// Direct save in Tiddloid\n\t\twindow.twi.saveWiki(text);\n\t} else {\n\t\t// Get the pathname of this document\n\t\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t\t// Strip the file://\n\t\tif(pathname.indexOf(\"file://\") === 0) {\n\t\t\tpathname = pathname.substr(7);\n\t\t}\n\t\t// Strip any query or location part\n\t\tvar p = pathname.indexOf(\"?\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\tp = pathname.indexOf(\"#\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\t// Save the file\n\t\twindow.twi.saveFile(pathname,text);\n\t}\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/beaker.js": {
            "title": "$:/core/modules/savers/beaker.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/beaker.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Beaker browser's (https://beakerbrowser.com) Dat protocol (https://datproject.org/)\nCompatible with beaker >= V0.7.2\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar BeakerSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nBeakerSaver.prototype.save = function(text,method,callback) {\n\tvar dat = new DatArchive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Beaker Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Beaker Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nBeakerSaver.prototype.info = {\n\tname: \"beaker\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.DatArchive && location.protocol===\"dat:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new BeakerSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/download.js": {
            "title": "$:/core/modules/savers/download.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\t// We decode the pathname because document.location is URL encoded by the browser\n\t\t\tfilename = decodeURIComponent(document.location.pathname.substr(p+1));\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100\n};\n\nObject.defineProperty(DownloadSaver.prototype.info, \"capabilities\", {\n\tget: function() {\n\t\tvar capabilities = [\"save\", \"download\"];\n\t\tif(($tw.wiki.getTextReference(\"$:/config/DownloadSaver/AutoSave\") || \"\").toLowerCase() === \"yes\") {\n\t\t\tcapabilities.push(\"autosave\");\n\t\t}\n\t\treturn capabilities;\n\t}\n});\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/fsosaver.js": {
            "title": "$:/core/modules/savers/fsosaver.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/gitea.js": {
            "title": "$:/core/modules/savers/gitea.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/gitea.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the gitea\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GiteaSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGiteaSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/Gitea/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"Gitea\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/Gitea/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/Gitea/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/Gitea/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/Gitea/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/Gitea/ServerURL\") || \"https://gitea\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"Basic \" + window.btoa(username + \":\" + password)\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !path || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar use_put = true;\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(sha === \"\"){\n\t\t\t\t\tuse_put = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: endpoint + \"/repos/\" + repo + \"/branches/\" + branch,\n\t\t\t\ttype: \"GET\",\n\t\t\t\theaders: headers,\n\t\t\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\t\t\tif(xhr.status === 404) {\n\t\t\t\t\t\tcallback(\"Please ensure the branch in the Gitea repo exists\");\n\t\t\t\t\t}else{\n\t\t\t\t\t\tdata[\"branch\"] = branch;\n\t\t\t\t\t\tself.upload(uri + filename, use_put?\"PUT\":\"POST\", headers, data, callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\nGiteaSaver.prototype.upload = function(uri,method,headers,data,callback) {\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: method,\n\t\theaders: headers,\n\t\tdata: JSON.stringify(data),\n\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\tcallback(null);\n\t\t}\n\t});\n};\n\n/*\nInformation about this saver\n*/\nGiteaSaver.prototype.info = {\n\tname: \"Gitea\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GiteaSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/github.js": {
            "title": "$:/core/modules/savers/github.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/github.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitHub v3 REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitHubSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitHubSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitHub/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"github\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitHub/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitHub/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitHub/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitHub/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitHub/ServerURL\") || \"https://api.github.com\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/vnd.github.v3+json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"Basic \" + window.btoa(username + \":\" + password)\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !path || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a PUT request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + filename,\n\t\t\t\ttype: \"PUT\",\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitHubSaver.prototype.info = {\n\tname: \"github\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitHubSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/gitlab.js": {
            "title": "$:/core/modules/savers/gitlab.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/gitlab.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitLab REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: true */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitLabSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitLabSaver.prototype.save = function(text,method,callback) {\n\t/* See https://docs.gitlab.com/ee/api/repository_files.html */\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitLab/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"gitlab\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitLab/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitLab/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitLab/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitLab/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitLab/ServerURL\") || \"https://gitlab.com/api/v4\",\n\t\theaders = {\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Private-Token\": password\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !path || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/projects/\" + encodeURIComponent(repo) + \"/repository/\";\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri + \"tree/?path=\" + encodeURIComponent(path.replace(/^\\/+|\\/$/g, '')) + \"&branch=\" + encodeURIComponent(branch.replace(/^\\/+|\\/$/g, '')),\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar requestType = \"POST\";\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\trequestType = \"PUT\";\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tcommit_message: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: text,\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + \"files/\" + encodeURIComponent(path.replace(/^\\/+/, '') + filename),\n\t\t\t\ttype: requestType,\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitLabSaver.prototype.info = {\n\tname: \"gitlab\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitLabSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/manualdownload.js": {
            "title": "$:/core/modules/savers/manualdownload.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/msdownload.js": {
            "title": "$:/core/modules/savers/msdownload.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/put.js": {
            "title": "$:/core/modules/savers/put.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/put.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by performing a PUT request to the server\n\nWorks with any server which accepts a PUT request\nto the current URL, such as a WebDAV server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRetrieve ETag if available\n*/\nvar retrieveETag = function(self) {\n\tvar headers = {\n\t\tAccept: \"*/*;charset=UTF-8\"\n\t};\n\t$tw.utils.httpRequest({\n\t\turl: self.uri(),\n\t\ttype: \"HEAD\",\n\t\theaders: headers,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar etag = xhr.getResponseHeader(\"ETag\");\n\t\t\tif(!etag) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.etag = etag.replace(/^W\\//,\"\");\n\t\t}\n\t});\n};\n\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar PutSaver = function(wiki) {\n\tthis.wiki = wiki;\n\tvar self = this;\n\tvar uri = this.uri();\n\t// Async server probe. Until probe finishes, save will fail fast\n\t// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"OPTIONS\",\n\t\tcallback: function(err,data,xhr) {\n\t\t\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\n\t\t\tif(!err) {\n\t\t\t\tself.serverAcceptsPuts = xhr.status === 200 && !!xhr.getResponseHeader(\"dav\");\n\t\t\t}\n\t\t}\n\t});\n\tretrieveETag(this);\n};\n\nPutSaver.prototype.uri = function() {\n\treturn document.location.toString().split(\"#\")[0];\n};\n\n// TODO: in case of edit conflict\n// Prompt: Do you want to save over this? Y/N\n// Merging would be ideal, and may be possible using future generic merge flow\nPutSaver.prototype.save = function(text,method,callback) {\n\tif(!this.serverAcceptsPuts) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tvar headers = {\n\t\t\"Content-Type\": \"text/html;charset=UTF-8\"\n\t};\n\tif(this.etag) {\n\t\theaders[\"If-Match\"] = this.etag;\n\t}\n\t$tw.utils.httpRequest({\n\t\turl: this.uri(),\n\t\ttype: \"PUT\",\n\t\theaders: headers,\n\t\tdata: text,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\t// response is textual: \"XMLHttpRequest error code: 412\"\n\t\t\t\tvar status = Number(err.substring(err.indexOf(':') + 2, err.length))\n\t\t\t\tif(status === 412) { // edit conflict\n\t\t\t\t\tvar message = $tw.language.getString(\"Error/EditConflict\");\n\t\t\t\t\tcallback(message);\n\t\t\t\t} else {\n\t\t\t\t\tcallback(err); // fail\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.etag = xhr.getResponseHeader(\"ETag\");\n\t\t\t\tif(self.etag == null) {\n\t\t\t\t\tretrieveETag(self);\n\t\t\t\t}\n\t\t\t\tcallback(null); // success\n\t\t\t}\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nPutSaver.prototype.info = {\n\tname: \"put\",\n\tpriority: 2000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn /^https?:/.test(location.protocol);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new PutSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/tiddlyfox.js": {
            "title": "$:/core/modules/savers/tiddlyfox.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/tiddlyie.js": {
            "title": "$:/core/modules/savers/tiddlyie.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/twedit.js": {
            "title": "$:/core/modules/savers/twedit.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback($tw.language.getString(\"Error/SavingToTWEdit\") + \": \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/upload.js": {
            "title": "$:/core/modules/savers/upload.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback($tw.language.getString(\"Error/Caption\") + \":\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/server/authenticators/basic.js": {
            "title": "$:/core/modules/server/authenticators/basic.js",
            "text": "/*\\\ntitle: $:/core/modules/server/authenticators/basic.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for WWW basic authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\");\n}\n\nfunction BasicAuthenticator(server) {\n\tthis.server = server;\n\tthis.credentialsData = [];\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nBasicAuthenticator.prototype.init = function() {\n\t// Read the credentials data\n\tthis.credentialsFilepath = this.server.get(\"credentials\");\n\tif(this.credentialsFilepath) {\n\t\tvar resolveCredentialsFilepath = path.resolve($tw.boot.wikiPath,this.credentialsFilepath);\n\t\tif(fs.existsSync(resolveCredentialsFilepath) && !fs.statSync(resolveCredentialsFilepath).isDirectory()) {\n\t\t\tvar credentialsText = fs.readFileSync(resolveCredentialsFilepath,\"utf8\"),\n\t\t\t\tcredentialsData = $tw.utils.parseCsvStringWithHeader(credentialsText);\n\t\t\tif(typeof credentialsData === \"string\") {\n\t\t\t\treturn \"Error: \" + credentialsData + \" reading credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t\t} else {\n\t\t\t\tthis.credentialsData = credentialsData;\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"Error: Unable to load user credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t}\n\t}\n\t// Add the hardcoded username and password if specified\n\tif(this.server.get(\"username\") && this.server.get(\"password\")) {\n\t\tthis.credentialsData = this.credentialsData || [];\n\t\tthis.credentialsData.push({\n\t\t\tusername: this.server.get(\"username\"),\n\t\t\tpassword: this.server.get(\"password\")\n\t\t});\n\t}\n\treturn this.credentialsData.length > 0;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nBasicAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Extract the incoming username and password from the request\n\tvar header = request.headers.authorization || \"\";\n\tif(!header && state.allowAnon) {\n\t\t// If there's no header and anonymous access is allowed then we don't set authenticatedUsername\n\t\treturn true;\n\t}\n\tvar token = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tincomingUsername = parts[0],\n\t\tincomingPassword = parts[1];\n\t// Check that at least one of the credentials matches\n\tvar matchingCredentials = this.credentialsData.find(function(credential) {\n\t\treturn credential.username === incomingUsername && credential.password === incomingPassword;\n\t});\n\tif(matchingCredentials) {\n\t\t// If so, add the authenticated username to the request state\n\t\tstate.authenticatedUsername = incomingUsername;\n\t\treturn true;\n\t} else {\n\t\t// If not, return an authentication challenge\n\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\n\t\treturn false;\n\t}\n};\n\nexports.AuthenticatorClass = BasicAuthenticator;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "authenticator"
        },
        "$:/core/modules/server/authenticators/header.js": {
            "title": "$:/core/modules/server/authenticators/header.js",
            "text": "/*\\\ntitle: $:/core/modules/server/authenticators/header.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for trusted header authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction HeaderAuthenticator(server) {\n\tthis.server = server;\n\tthis.header = server.get(\"authenticated-user-header\");\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nHeaderAuthenticator.prototype.init = function() {\n\treturn !!this.header;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nHeaderAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Otherwise, authenticate as the username in the specified header\n\tvar username = request.headers[this.header];\n\tif(!username && !state.allowAnon) {\n\t\tresponse.writeHead(401,\"Authorization header required to login to '\" + state.server.servername + \"'\");\n\t\tresponse.end();\n\t\treturn false;\n\t} else {\n\t\t// authenticatedUsername will be undefined for anonymous users\n\t\tstate.authenticatedUsername = username;\n\t\treturn true;\n\t}\n};\n\nexports.AuthenticatorClass = HeaderAuthenticator;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "authenticator"
        },
        "$:/core/modules/server/routes/delete-tiddler.js": {
            "title": "$:/core/modules/server/routes/delete-tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/delete-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nDELETE /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"DELETE\";\n\nexports.path = /^\\/bags\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]);\n\tstate.wiki.deleteTiddler(title);\n\tresponse.writeHead(204, \"OK\", {\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-favicon.js": {
            "title": "$:/core/modules/server/routes/get-favicon.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-favicon.js\ntype: application/javascript\nmodule-type: route\n\nGET /favicon.ico\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/favicon.ico$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\tresponse.end(buffer,\"base64\");\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-file.js": {
            "title": "$:/core/modules/server/routes/get-file.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-file.js\ntype: application/javascript\nmodule-type: route\n\nGET /files/:filepath\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/files\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar path = require(\"path\"),\n\t\tfs = require(\"fs\"),\n\t\tutil = require(\"util\"),\n\t\tsuppliedFilename = decodeURIComponent(state.params[0]),\n\t\tfilename = path.resolve($tw.boot.wikiPath,\"files\",suppliedFilename),\n\t\textension = path.extname(filename);\n\tfs.readFile(filename,function(err,content) {\n\t\tvar status,content,type = \"text/plain\";\n\t\tif(err) {\n\t\t\tconsole.log(\"Error accessing file \" + filename + \": \" + err.toString());\n\t\t\tstatus = 404;\n\t\t\tcontent = \"File '\" + suppliedFilename + \"' not found\";\n\t\t} else {\n\t\t\tstatus = 200;\n\t\t\tcontent = content;\n\t\t\ttype = ($tw.config.fileExtensionInfo[extension] ? $tw.config.fileExtensionInfo[extension].type : \"application/octet-stream\");\n\t\t}\n\t\tresponse.writeHead(status,{\n\t\t\t\"Content-Type\": type\n\t\t});\n\t\tresponse.end(content);\n\t});\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-index.js": {
            "title": "$:/core/modules/server/routes/get-index.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-index.js\ntype: application/javascript\nmodule-type: route\n\nGET /\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar zlib = require(\"zlib\");\n\nexports.method = \"GET\";\n\nexports.path = /^\\/$/;\n\nexports.handler = function(request,response,state) {\n\tvar acceptEncoding = request.headers[\"accept-encoding\"];\n\tif(!acceptEncoding) {\n\t\tacceptEncoding = \"\";\n\t}\n\tvar text = state.wiki.renderTiddler(state.server.get(\"root-render-type\"),state.server.get(\"root-tiddler\")),\n\t\tresponseHeaders = {\n\t\t\"Content-Type\": state.server.get(\"root-serve-type\")\n\t};\n\t/*\n\tIf the gzip=yes flag for `listen` is set, check if the user agent permits\n\tcompression. If so, compress our response. Note that we use the synchronous\n\tfunctions from zlib to stay in the imperative style. The current `Server`\n\tdoesn't depend on this, and we may just as well use the async versions.\n\t*/\n\tif(state.server.enableGzip) {\n\t\tif (/\\bdeflate\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"deflate\";\n\t\t\ttext = zlib.deflateSync(text);\n\t\t} else if (/\\bgzip\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"gzip\";\n\t\t\ttext = zlib.gzipSync(text);\n\t\t}\n\t}\n\tresponse.writeHead(200,responseHeaders);\n\tresponse.end(text);\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-login-basic.js": {
            "title": "$:/core/modules/server/routes/get-login-basic.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-login-basic.js\ntype: application/javascript\nmodule-type: route\n\nGET /login-basic -- force a Basic Authentication challenge\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/login-basic$/;\n\nexports.handler = function(request,response,state) {\n\tif(!state.authenticatedUsername) {\n\t\t// Challenge if there's no username\n\t\tresponse.writeHead(401,{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\t\t\n\t} else {\n\t\t// Redirect to the root wiki if login worked\n\t\tresponse.writeHead(302,{\n\t\t\tLocation: \"/\"\n\t\t});\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-status.js": {
            "title": "$:/core/modules/server/routes/get-status.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-status.js\ntype: application/javascript\nmodule-type: route\n\nGET /status\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/status$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar text = JSON.stringify({\n\t\tusername: state.authenticatedUsername || state.server.get(\"anon-username\") || \"\",\n\t\tanonymous: !state.authenticatedUsername,\n\t\tread_only: !state.server.isAuthorized(\"writers\",state.authenticatedUsername),\n\t\tspace: {\n\t\t\trecipe: \"default\"\n\t\t},\n\t\ttiddlywiki_version: $tw.version\n\t});\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-tiddler-html.js": {
            "title": "$:/core/modules/server/routes/get-tiddler-html.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler-html.js\ntype: application/javascript\nmodule-type: route\n\nGET /:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/([^\\/]+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar renderType = tiddler.getFieldString(\"_render_type\"),\n\t\t\trenderTemplate = tiddler.getFieldString(\"_render_template\");\n\t\t// Tiddler fields '_render_type' and '_render_template' overwrite\n\t\t// system wide settings for render type and template\n\t\tif(state.wiki.isSystemTiddler(title)) {\n\t\t\trenderType = renderType || state.server.get(\"system-tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"system-tiddler-render-template\");\n\t\t} else {\n\t\t\trenderType = renderType || state.server.get(\"tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"tiddler-render-template\");\n\t\t}\n\t\tvar text = state.wiki.renderTiddler(renderType,renderTemplate,{parseAsInline: true, variables: {currentTiddler: title}});\n\t\t// Naughty not to set a content-type, but it's the easiest way to ensure the browser will see HTML pages as HTML, and accept plain text tiddlers as CSS or JS\n\t\tresponse.writeHead(200);\n\t\tresponse.end(text,\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-tiddler.js": {
            "title": "$:/core/modules/server/routes/get-tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title),\n\t\ttiddlerFields = {},\n\t\tknownFields = [\n\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t];\n\tif(tiddler) {\n\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\ttiddlerFields[name] = value;\n\t\t\t} else {\n\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t}\n\t\t});\n\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\ttiddlerFields.bag = \"default\";\n\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-tiddlers-json.js": {
            "title": "$:/core/modules/server/routes/get-tiddlers-json.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddlers-json.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/tiddlers.json?filter=<filter>\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_FILTER = \"[all[tiddlers]!is[system]sort[title]]\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers.json$/;\n\nexports.handler = function(request,response,state) {\n\tvar filter = state.queryParameters.filter || DEFAULT_FILTER;\n\tif($tw.wiki.getTiddlerText(\"$:/config/Server/AllowAllExternalFilters\") !== \"yes\") {\n\t\tif($tw.wiki.getTiddlerText(\"$:/config/Server/ExternalFilters/\" + filter) !== \"yes\") {\n\t\t\tconsole.log(\"Blocked attempt to GET /recipes/default/tiddlers/tiddlers.json with filter: \" + filter);\n\t\t\tresponse.writeHead(403);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t}\n\tvar excludeFields = (state.queryParameters.exclude || \"text\").split(\",\"),\n\t\ttitles = state.wiki.filterTiddlers(filter);\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar tiddlers = [];\n\t$tw.utils.each(titles,function(title) {\n\t\tvar tiddler = state.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar tiddlerFields = tiddler.getFieldStrings({exclude: excludeFields});\n\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\ttiddlers.push(tiddlerFields);\n\t\t}\n\t});\n\tvar text = JSON.stringify(tiddlers);\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/put-tiddler.js": {
            "title": "$:/core/modules/server/routes/put-tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/put-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nPUT /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"PUT\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\tfields = JSON.parse(state.data);\n\t// Pull up any subfields in the `fields` object\n\tif(fields.fields) {\n\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\tfields[name] = field;\n\t\t});\n\t\tdelete fields.fields;\n\t}\n\t// Remove any revision field\n\tif(fields.revision) {\n\t\tdelete fields.revision;\n\t}\n\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));\n\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\tresponse.writeHead(204, \"OK\",{\n\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/server.js": {
            "title": "$:/core/modules/server/server.js",
            "text": "/*\\\ntitle: $:/core/modules/server/server.js\ntype: application/javascript\nmodule-type: library\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\tquerystring = require(\"querystring\");\n}\n\n/*\nA simple HTTP server with regexp-based routes\noptions: variables - optional hashmap of variables to set (a misnomer - they are really constant parameters)\n\t\t routes - optional array of routes to use\n\t\t wiki - reference to wiki object\n*/\nfunction Server(options) {\n\tvar self = this;\n\tthis.routes = options.routes || [];\n\tthis.authenticators = options.authenticators || [];\n\tthis.wiki = options.wiki;\n\tthis.servername = $tw.utils.transliterateToSafeASCII(this.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\");\n\t// Initialise the variables\n\tthis.variables = $tw.utils.extend({},this.defaultVariables);\n\tif(options.variables) {\n\t\tfor(var variable in options.variables) {\n\t\t\tif(options.variables[variable]) {\n\t\t\t\tthis.variables[variable] = options.variables[variable];\n\t\t\t}\n\t\t}\t\t\n\t}\n\t$tw.utils.extend({},this.defaultVariables,options.variables);\n\t// Initialise CSRF\n\tthis.csrfDisable = this.get(\"csrf-disable\") === \"yes\";\n\t// Initialize Gzip compression\n\tthis.enableGzip = this.get(\"gzip\") === \"yes\";\n\t// Initialise authorization\n\tvar authorizedUserName = (this.get(\"username\") && this.get(\"password\")) ? this.get(\"username\") : \"(anon)\";\n\tthis.authorizationPrincipals = {\n\t\treaders: (this.get(\"readers\") || authorizedUserName).split(\",\").map($tw.utils.trim),\n\t\twriters: (this.get(\"writers\") || authorizedUserName).split(\",\").map($tw.utils.trim)\n\t}\n\t// Load and initialise authenticators\n\t$tw.modules.forEachModuleOfType(\"authenticator\", function(title,authenticatorDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addAuthenticator(authenticatorDefinition.AuthenticatorClass);\n\t});\n\t// Load route handlers\n\t$tw.modules.forEachModuleOfType(\"route\", function(title,routeDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addRoute(routeDefinition);\n\t});\n\t// Initialise the http vs https\n\tthis.listenOptions = null;\n\tthis.protocol = \"http\";\n\tvar tlsKeyFilepath = this.get(\"tls-key\"),\n\t\ttlsCertFilepath = this.get(\"tls-cert\");\n\tif(tlsCertFilepath && tlsKeyFilepath) {\n\t\tthis.listenOptions = {\n\t\t\tkey: fs.readFileSync(path.resolve($tw.boot.wikiPath,tlsKeyFilepath),\"utf8\"),\n\t\t\tcert: fs.readFileSync(path.resolve($tw.boot.wikiPath,tlsCertFilepath),\"utf8\")\n\t\t};\n\t\tthis.protocol = \"https\";\n\t}\n\tthis.transport = require(this.protocol);\n}\n\nServer.prototype.defaultVariables = {\n\tport: \"8080\",\n\thost: \"127.0.0.1\",\n\t\"root-tiddler\": \"$:/core/save/all\",\n\t\"root-render-type\": \"text/plain\",\n\t\"root-serve-type\": \"text/html\",\n\t\"tiddler-render-type\": \"text/html\",\n\t\"tiddler-render-template\": \"$:/core/templates/server/static.tiddler.html\",\n\t\"system-tiddler-render-type\": \"text/plain\",\n\t\"system-tiddler-render-template\": \"$:/core/templates/wikified-tiddler\",\n\t\"debug-level\": \"none\",\n\t\"gzip\": \"no\"\n};\n\nServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nServer.prototype.addAuthenticator = function(AuthenticatorClass) {\n\t// Instantiate and initialise the authenticator\n\tvar authenticator = new AuthenticatorClass(this),\n\t\tresult = authenticator.init();\n\tif(typeof result === \"string\") {\n\t\t$tw.utils.error(\"Error: \" + result);\n\t} else if(result) {\n\t\t// Only use the authenticator if it initialised successfully\n\t\tthis.authenticators.push(authenticator);\n\t}\n};\n\nServer.prototype.findMatchingRoute = function(request,state) {\n\tvar pathprefix = this.get(\"path-prefix\") || \"\";\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(pathprefix) {\n\t\t\tif(pathname.substr(0,pathprefix.length) === pathprefix) {\n\t\t\t\tpathname = pathname.substr(pathprefix.length) || \"/\";\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nServer.prototype.methodMappings = {\n\t\"GET\": \"readers\",\n\t\"OPTIONS\": \"readers\",\n\t\"HEAD\": \"readers\",\n\t\"PUT\": \"writers\",\n\t\"POST\": \"writers\",\n\t\"DELETE\": \"writers\"\n};\n\n/*\nCheck whether a given user is authorized for the specified authorizationType (\"readers\" or \"writers\"). Pass null or undefined as the username to check for anonymous access\n*/\nServer.prototype.isAuthorized = function(authorizationType,username) {\n\tvar principals = this.authorizationPrincipals[authorizationType] || [];\n\treturn principals.indexOf(\"(anon)\") !== -1 || (username && (principals.indexOf(\"(authenticated)\") !== -1 || principals.indexOf(username) !== -1));\n}\n\nServer.prototype.requestHandler = function(request,response) {\n\t// Compose the state object\n\tvar self = this;\n\tvar state = {};\n\tstate.wiki = self.wiki;\n\tstate.server = self;\n\tstate.urlInfo = url.parse(request.url);\n\tstate.queryParameters = querystring.parse(state.urlInfo.query);\n\t// Get the principals authorized to access this resource\n\tvar authorizationType = this.methodMappings[request.method] || \"readers\";\n\t// Check for the CSRF header if this is a write\n\tif(!this.csrfDisable && authorizationType === \"writers\" && request.headers[\"x-requested-with\"] !== \"TiddlyWiki\") {\n\t\tresponse.writeHead(403,\"'X-Requested-With' header required to login to '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\t\t\n\t}\n\t// Check whether anonymous access is granted\n\tstate.allowAnon = this.isAuthorized(authorizationType,null);\n\t// Authenticate with the first active authenticator\n\tif(this.authenticators.length > 0) {\n\t\tif(!this.authenticators[0].authenticateRequest(request,response,state)) {\n\t\t\t// Bail if we failed (the authenticator will have sent the response)\n\t\t\treturn;\n\t\t}\t\t\n\t}\n\t// Authorize with the authenticated username\n\tif(!this.isAuthorized(authorizationType,state.authenticatedUsername)) {\n\t\tresponse.writeHead(401,\"'\" + state.authenticatedUsername + \"' is not authorized to access '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Find the route that matches this path\n\tvar route = self.findMatchingRoute(request,state);\n\t// Optionally output debug info\n\tif(self.get(\"debug-level\") !== \"none\") {\n\t\tconsole.log(\"Request path:\",JSON.stringify(state.urlInfo));\n\t\tconsole.log(\"Request headers:\",JSON.stringify(request.headers));\n\t\tconsole.log(\"authenticatedUsername:\",state.authenticatedUsername);\n\t}\n\t// Return a 404 if we didn't find a route\n\tif(!route) {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Receive the request body if necessary and hand off to the route handler\n\tif(route.bodyFormat === \"stream\" || request.method === \"GET\" || request.method === \"HEAD\") {\n\t\t// Let the route handle the request stream itself\n\t\troute.handler(request,response,state);\n\t} else if(route.bodyFormat === \"string\" || !route.bodyFormat) {\n\t\t// Set the encoding for the incoming request\n\t\trequest.setEncoding(\"utf8\");\n\t\tvar data = \"\";\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata += chunk.toString();\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = data;\n\t\t\troute.handler(request,response,state);\n\t\t});\n\t} else if(route.bodyFormat === \"buffer\") {\n\t\tvar data = [];\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata.push(chunk);\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = Buffer.concat(data);\n\t\t\troute.handler(request,response,state);\n\t\t})\n\t} else {\n\t\tresponse.writeHead(400,\"Invalid bodyFormat \" + route.bodyFormat + \" in route \" + route.method + \" \" + route.path.source);\n\t\tresponse.end();\n\t}\n};\n\n/*\nListen for requests\nport: optional port number (falls back to value of \"port\" variable)\nhost: optional host address (falls back to value of \"host\" variable)\nprefix: optional prefix (falls back to value of \"path-prefix\" variable)\n*/\nServer.prototype.listen = function(port,host,prefix) {\n\tvar self = this;\n\t// Handle defaults for port and host\n\tport = port || this.get(\"port\");\n\thost = host || this.get(\"host\");\n\tprefix = prefix || this.get(\"path-prefix\") || \"\";\n\t// Check for the port being a string and look it up as an environment variable\n\tif(parseInt(port,10).toString() !== port) {\n\t\tport = process.env[port] || 8080;\n\t}\n\t// Warn if required plugins are missing\n\tif(!$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\t// Create the server\n\tvar server;\n\tif(this.listenOptions) {\n\t\tserver = this.transport.createServer(this.listenOptions,this.requestHandler.bind(this));\n\t} else {\n\t\tserver = this.transport.createServer(this.requestHandler.bind(this));\n\t}\n\t// Display the port number after we've started listening (the port number might have been specified as zero, in which case we will get an assigned port)\n\tserver.on(\"listening\",function() {\n\t\tvar address = server.address();\n\t\t$tw.utils.log(\"Serving on \" + self.protocol + \"://\" + address.address + \":\" + address.port + prefix,\"brown/orange\");\n\t\t$tw.utils.log(\"(press ctrl-C to exit)\",\"red\");\n\t});\n\t// Listen\n\treturn server.listen(port,host);\n};\n\nexports.Server = Server;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/browser-messaging.js": {
            "title": "$:/core/modules/browser-messaging.js",
            "text": "/*\\\ntitle: $:/core/modules/browser-messaging.js\ntype: application/javascript\nmodule-type: startup\n\nBrowser message handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"browser-messaging\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\n*/\nfunction loadIFrame(url,callback) {\n\t// Check if iframe already exists\n\tvar iframeInfo = $tw.browserMessaging.iframeInfoMap[url];\n\tif(iframeInfo) {\n\t\t// We've already got the iframe\n\t\tcallback(null,iframeInfo);\n\t} else {\n\t\t// Create the iframe and save it in the list\n\t\tvar iframe = document.createElement(\"iframe\");\n\t\tiframeInfo = {\n\t\t\turl: url,\n\t\t\tstatus: \"loading\",\n\t\t\tdomNode: iframe\n\t\t};\n\t\t$tw.browserMessaging.iframeInfoMap[url] = iframeInfo;\n\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t// Add the iframe to the DOM and hide it\n\t\tiframe.style.display = \"none\";\n\t\tiframe.setAttribute(\"library\",\"true\");\n\t\tdocument.body.appendChild(iframe);\n\t\t// Set up onload\n\t\tiframe.onload = function() {\n\t\t\tiframeInfo.status = \"loaded\";\n\t\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t\tcallback(null,iframeInfo);\n\t\t};\n\t\tiframe.onerror = function() {\n\t\t\tcallback(\"Cannot load iframe\");\n\t\t};\n\t\ttry {\n\t\t\tiframe.src = url;\n\t\t} catch(ex) {\n\t\t\tcallback(ex);\n\t\t}\n\t}\n}\n\n/*\nUnload library iframe for given url\n*/\nfunction unloadIFrame(url){\n\t$tw.utils.each(document.getElementsByTagName('iframe'), function(iframe) {\n\t\tif(iframe.getAttribute(\"library\") === \"true\" &&\n\t\t  iframe.getAttribute(\"src\") === url) {\n\t\t\tiframe.parentNode.removeChild(iframe);\n\t\t}\n\t});\n}\n\nfunction saveIFrameInfoTiddler(iframeInfo) {\n\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\n\t\ttitle: \"$:/temp/ServerConnection/\" + iframeInfo.url,\n\t\ttext: iframeInfo.status,\n\t\ttags: [\"$:/tags/ServerConnection\"],\n\t\turl: iframeInfo.url\n\t},$tw.wiki.getModificationFields()));\n}\n\nexports.startup = function() {\n\t// Initialise the store of iframes we've created\n\t$tw.browserMessaging = {\n\t\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\"loading/loaded\",domNode:}\n\t};\n\t// Listen for widget messages to control loading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\tif(url) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for widget messages to control unloading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-unload-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\t$tw.browserMessaging.iframeInfoMap[url] = undefined;\n\t\tif(url) {\n\t\t\tunloadIFrame(url);\n\t\t\t$tw.utils.each(\n\t\t\t\t$tw.wiki.filterTiddlers(\"[[$:/temp/ServerConnection/\" + url + \"]] [prefix[$:/temp/RemoteAssetInfo/\" + url + \"/]]\"),\n\t\t\t\tfunction(title) {\n\t\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\t// console.log(\"browser-messaging: \",document.location.toString())\n\t\t// console.log(\"browser-messaging: Received message from\",event.origin);\n\t\t// console.log(\"browser-messaging: Message content\",event.data);\n\t\tswitch(event.data.verb) {\n\t\t\tcase \"GET-RESPONSE\":\n\t\t\t\tif(event.data.status.charAt(0) === \"2\") {\n\t\t\t\t\tif(event.data.cookies) {\n\t\t\t\t\t\tif(event.data.cookies.type === \"save-info\") {\n\t\t\t\t\t\t\tvar tiddlers = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\t\t\t\t\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \"/\" + tiddler.title,\n\t\t\t\t\t\t\t\t\t\"original-title\": tiddler.title,\n\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\ttype: \"text/vnd.tiddlywiki\",\n\t\t\t\t\t\t\t\t\t\"original-type\": tiddler.type,\n\t\t\t\t\t\t\t\t\t\"plugin-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-plugin-type\": tiddler[\"plugin-type\"],\n\t\t\t\t\t\t\t\t\t\"module-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-module-type\": tiddler[\"module-type\"],\n\t\t\t\t\t\t\t\t\ttags: [\"$:/tags/RemoteAssetInfo\"],\n\t\t\t\t\t\t\t\t\t\"original-tags\": $tw.utils.stringifyList(tiddler.tags || []),\n\t\t\t\t\t\t\t\t\t\"server-url\": event.data.cookies.url\n\t\t\t\t\t\t\t\t},$tw.wiki.getModificationFields()));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if(event.data.cookies.type === \"save-tiddler\") {\n\t\t\t\t\t\t\tvar tiddler = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},false);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/commands.js": {
            "title": "$:/core/modules/startup/commands.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/CSSescape.js": {
            "title": "$:/core/modules/startup/CSSescape.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/CSSescape.js\ntype: application/javascript\nmodule-type: startup\n\nPolyfill for CSS.escape()\n\n\\*/\n(function(root,factory){\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"css-escape\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */\n// https://github.com/umdjs/umd/blob/master/returnExports.js\nexports.startup = factory(root);\n}(typeof global != 'undefined' ? global : this, function(root) {\n\n\tif (root.CSS && root.CSS.escape) {\n\t\treturn;\n\t}\n\n\t// https://drafts.csswg.org/cssom/#serialize-an-identifier\n\tvar cssEscape = function(value) {\n\t\tif (arguments.length == 0) {\n\t\t\tthrow new TypeError('`CSS.escape` requires an argument.');\n\t\t}\n\t\tvar string = String(value);\n\t\tvar length = string.length;\n\t\tvar index = -1;\n\t\tvar codeUnit;\n\t\tvar result = '';\n\t\tvar firstCodeUnit = string.charCodeAt(0);\n\t\twhile (++index < length) {\n\t\t\tcodeUnit = string.charCodeAt(index);\n\t\t\t// Note: there’s no need to special-case astral symbols, surrogate\n\t\t\t// pairs, or lone surrogates.\n\n\t\t\t// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER\n\t\t\t// (U+FFFD).\n\t\t\tif (codeUnit == 0x0000) {\n\t\t\t\tresult += '\\uFFFD';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is in the range [\\1-\\1F] (U+0001 to U+001F) or is\n\t\t\t\t// U+007F, […]\n\t\t\t\t(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||\n\t\t\t\t// If the character is the first character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039), […]\n\t\t\t\t(index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n\t\t\t\t// If the character is the second character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]\n\t\t\t\t(\n\t\t\t\t\tindex == 1 &&\n\t\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 &&\n\t\t\t\t\tfirstCodeUnit == 0x002D\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n\t\t\t\tresult += '\\\\' + codeUnit.toString(16) + ' ';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is the first character and is a `-` (U+002D), and\n\t\t\t\t// there is no second character, […]\n\t\t\t\tindex == 0 &&\n\t\t\t\tlength == 1 &&\n\t\t\t\tcodeUnit == 0x002D\n\t\t\t) {\n\t\t\t\tresult += '\\\\' + string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If the character is not handled by one of the above rules and is\n\t\t\t// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or\n\t\t\t// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to\n\t\t\t// U+005A), or [a-z] (U+0061 to U+007A), […]\n\t\t\tif (\n\t\t\t\tcodeUnit >= 0x0080 ||\n\t\t\t\tcodeUnit == 0x002D ||\n\t\t\t\tcodeUnit == 0x005F ||\n\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 ||\n\t\t\t\tcodeUnit >= 0x0041 && codeUnit <= 0x005A ||\n\t\t\t\tcodeUnit >= 0x0061 && codeUnit <= 0x007A\n\t\t\t) {\n\t\t\t\t// the character itself\n\t\t\t\tresult += string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Otherwise, the escaped character.\n\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character\n\t\t\tresult += '\\\\' + string.charAt(index);\n\n\t\t}\n\t\treturn result;\n\t};\n\n\tif (!root.CSS) {\n\t\troot.CSS = {};\n\t}\n\n\troot.CSS.escape = cssEscape;\n\n}));\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/favicon.js": {
            "title": "$:/core/modules/startup/favicon.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\t\t\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",\"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text);\n\t}\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/info.js": {
            "title": "$:/core/modules/startup/info.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_INFO_PLUGIN = \"$:/temp/info-plugin\";\n\nexports.startup = function() {\n\t// Collect up the info tiddlers\n\tvar infoTiddlerFields = {};\n\t// Give each info module a chance to fill in as many info tiddlers as they want\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tvar tiddlerFieldsArray = moduleExports.getInfoTiddlerFields(infoTiddlerFields);\n\t\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\t\tif(fields) {\n\t\t\t\t\tinfoTiddlerFields[fields.title] = fields;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Bake the info tiddlers into a plugin. We use the non-standard plugin-type \"info\" because ordinary plugins are only registered asynchronously after being loaded dynamically\n\tvar fields = {\n\t\ttitle: TITLE_INFO_PLUGIN,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"info\",\n\t\ttext: JSON.stringify({tiddlers: infoTiddlerFields},null,$tw.config.preferences.jsonSpaces)\n\t};\n\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\t$tw.wiki.readPluginInfo([TITLE_INFO_PLUGIN]);\n\t$tw.wiki.registerPluginTiddlers(\"info\");\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/load-modules.js": {
            "title": "$:/core/modules/startup/load-modules.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.wiki.addIndexersToWiki();\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/password.js": {
            "title": "$:/core/modules/startup/password.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: $tw.language.getString(\"Encryption/SetPassword\"),\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/plugins.js": {
            "title": "$:/core/modules/startup/plugins.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/plugins.js\ntype: application/javascript\nmodule-type: startup\n\nStartup logic concerned with managing plugins\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"plugins\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE = \"$:/status/RequireReloadDueToPluginChange\";\n\nvar PREFIX_CONFIG_REGISTER_PLUGIN_TYPE = \"$:/config/RegisterPluginType/\";\n\nexports.startup = function() {\n\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"no\"});\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tvar changesToProcess = [],\n\t\t\trequireReloadDueToPluginChange = false;\n\t\t$tw.utils.each(Object.keys(changes),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\t\trequiresReload = $tw.wiki.doesPluginRequireReload(title);\n\t\t\tif(requiresReload) {\n\t\t\t\trequireReloadDueToPluginChange = true;\n\t\t\t} else if(tiddler) {\n\t\t\t\tvar pluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif($tw.wiki.getTiddlerText(PREFIX_CONFIG_REGISTER_PLUGIN_TYPE + (tiddler.fields[\"plugin-type\"] || \"\"),\"no\") === \"yes\") {\n\t\t\t\t\tchangesToProcess.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tif(requireReloadDueToPluginChange) {\n\t\t\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"yes\"});\n\t\t}\n\t\t// Read or delete the plugin info of the changed tiddlers\n\t\tif(changesToProcess.length > 0) {\n\t\t\tvar changes = $tw.wiki.readPluginInfo(changesToProcess);\n\t\t\tif(changes.modifiedPlugins.length > 0 || changes.deletedPlugins.length > 0) {\n\t\t\t\t// (Re-)register any modified plugins\n\t\t\t\t$tw.wiki.registerPluginTiddlers(null,changes.modifiedPlugins);\n\t\t\t\t// Unregister any deleted plugins\n\t\t\t\t$tw.wiki.unregisterPluginTiddlers(null,changes.deletedPlugins);\n\t\t\t\t// Unpack the shadow tiddlers\n\t\t\t\t$tw.wiki.unpackPluginTiddlers();\n\t\t\t}\n\t\t}\n\t});\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/render.js": {
            "title": "$:/core/modules/startup/render.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/PageTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar THROTTLE_REFRESH_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n   \t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t})();\n\t// Remove any splash screen elements\n\tvar removeList = document.querySelectorAll(\".tc-remove-when-wiki-loaded\");\n\t$tw.utils.each(removeList,function(removeItem) {\n\t\tif(removeItem.parentNode) {\n\t\t\tremoveItem.parentNode.removeChild(removeItem);\n\t\t}\n\t});\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.hooks.invokeHook(\"th-page-refreshing\");\n\t\t$tw.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\n\t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only tiddlers that are throttled have changed\n\t\tvar onlyThrottledTiddlersHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!tiddler || !(tiddler.hasField(\"draft.of\") || tiddler.hasField(\"throttle.refresh\"))) {\n\t\t\t\tonlyThrottledTiddlersHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyThrottledTiddlersHaveChanged) {\n\t\t\tvar timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\"\"),10);\n\t\t\tif(isNaN(timeout)) {\n\t\t\t\ttimeout = THROTTLE_REFRESH_TIMEOUT;\n\t\t\t}\n\t\t\ttimerId = setTimeout(refresh,timeout);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/rootwidget.js": {
            "title": "$:/core/modules/startup/rootwidget.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject, event: event});\n\t});\n\t// Install the notification  mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the copy-to-clipboard  mechanism\n\t$tw.rootWidget.addEventListener(\"tm-copy-to-clipboard\",function(event) {\n\t\t$tw.utils.copyToClipboard(event.param);\n\t});\n\t// Install the tm-focus-selector message\n\t$tw.rootWidget.addEventListener(\"tm-focus-selector\",function(event) {\n\t\tvar selector = event.param || \"\",\n\t\t\telement;\n\t\ttry {\n\t\t\telement = document.querySelector(selector);\n\t\t} catch(e) {\n\t\t\tconsole.log(\"Error in selector: \",selector)\n\t\t}\n\t\tif(element && element.focus) {\n\t\t\telement.focus(event.paramObject);\n\t\t}\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tvar fullScreenDocument = event.event ? event.event.target.ownerDocument : document;\n\t\t\tif(event.param === \"enter\") {\n\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t} else if(event.param === \"exit\") {\n\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tif(fullScreenDocument[fullscreen._fullscreenElement]) {\n\t\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t\t} else {\n\t\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup.js": {
            "title": "$:/core/modules/startup.js",
            "text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\t// Minimal browser detection\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t\t$tw.browser.isFirefox = !!document.mozFullScreenEnabled;\n\t}\n\t// Platform detection\n\t$tw.platform = {};\n\tif($tw.browser) {\n\t\t$tw.platform.isMac = /Mac/.test(navigator.platform);\n\t\t$tw.platform.isWindows = /win/i.test(navigator.platform);\n\t\t$tw.platform.isLinux = /Linux/i.test(navigator.platform);\n\t} else {\n\t\tswitch(require(\"os\").platform()) {\n\t\t\tcase \"darwin\":\n\t\t\t\t$tw.platform.isMac = true;\n\t\t\t\tbreak;\n\t\t\tcase \"win32\":\n\t\t\t\t$tw.platform.isWindows = true;\n\t\t\t\tbreak;\n\t\t\tcase \"freebsd\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t\tcase \"linux\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t// Initialise version\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\t$tw.rootWidget = new widget.widget({\n\t\ttype: \"widget\",\n\t\tchildren: []\n\t},{\n\t\twiki: $tw.wiki,\n\t\tdocument: $tw.browser ? document : $tw.fakeDocument\n\t});\n\t// Execute any startup actions\n\tvar executeStartupTiddlers = function(tag) {\n\t\t$tw.utils.each($tw.wiki.filterTiddlers(\"[all[shadows+tiddlers]tag[\" + tag + \"]!has[draft.of]]\"),function(title) {\n\t\t\t$tw.rootWidget.invokeActionString($tw.wiki.getTiddlerText(title),$tw.rootWidget);\n\t\t});\n\t};\n\texecuteStartupTiddlers(\"$:/tags/StartupAction\");\n\tif($tw.browser) {\n\t\texecuteStartupTiddlers(\"$:/tags/StartupAction/Browser\");\t\t\n\t}\n\tif($tw.node) {\n\t\texecuteStartupTiddlers(\"$:/tags/StartupAction/Node\");\t\t\n\t}\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-GB\"\n\t\t],\n\t\tonSwitch: function(plugins) {\n\t\t\tif($tw.browser) {\n\t\t\t\tvar pluginTiddler = $tw.wiki.getTiddler(plugins[0]);\n\t\t\t\tif(pluginTiddler) {\n\t\t\t\t\tdocument.documentElement.setAttribute(\"dir\",pluginTiddler.getFieldString(\"text-direction\") || \"auto\");\n\t\t\t\t} else {\n\t\t\t\t\tdocument.documentElement.removeAttribute(\"dir\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Kick off the keyboard manager\n\t$tw.keyboardManager = new $tw.KeyboardManager();\n\t// Listen for shortcuts\n\tif($tw.browser) {\n\t\t$tw.utils.addEventListeners(document,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t}\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t}\n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({\n\t\twiki: $tw.wiki,\n\t\tdirtyTracking: !$tw.syncadaptor,\n\t\tpreloadDirty: $tw.boot.preloadDirty || []\n\t});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/story.js": {
            "title": "$:/core/modules/startup/story.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\nvar CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD = \"$:/config/Navigation/Permalinkview/CopyToClipboard\"; // Can be \"yes\" (default) or \"no\"\nvar CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/Permalinkview/UpdateAddressBar\"; // Can be \"yes\" (default) or \"no\"\n\n\n// Links to help, if there is no param\nvar HELP_OPEN_EXTERNAL_WINDOW = \"http://tiddlywiki.com/#WidgetMessage%3A%20tm-open-external-window\";\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers({\n\t\tdisableHistory: $tw.boot.disableStartupNavigation\n\t});\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for tm-open-external-window message\n\t\t$tw.rootWidget.addEventListener(\"tm-open-external-window\",function(event) {\n\t\t\tvar paramObject = event.paramObject || {},\n\t\t\t\tstrUrl = event.param || HELP_OPEN_EXTERNAL_WINDOW,\n\t\t\t\tstrWindowName = paramObject.windowName,\n\t\t\t\tstrWindowFeatures = paramObject.windowFeatures;\n\t\t\twindow.open(strUrl, strWindowName, strWindowFeatures);\n\t\t});\n\t\t// Listen for the tm-print message\n\t\t$tw.rootWidget.addEventListener(\"tm-print\",function(event) {\n\t\t\t(event.event.view || window).print();\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\"\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\"\n\t\t\t});\t\t\t\t\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndisableHistory: if true $:/History is NOT updated\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t// Invoke any hooks that want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// Update history\n\tif(!options.disableHistory) {\n\t\t// If a target tiddler was specified add it to the history stack\n\t\tif(target && target !== \"\") {\n\t\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t\t}\n\t\t\t$tw.wiki.addToHistory(target);\n\t\t} else if(storyList.length > 0) {\n\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t}\t\t\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.copyToClipboard: \"permalink\", \"permaview\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\t// Get the story and the history stack\n\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\ttargetTiddler = \"\";\n\tif(options.targetTiddler) {\n\t\ttargetTiddler = options.targetTiddler;\n\t} else {\n\t\t// The target tiddler is the one at the top of the stack\n\t\tif(historyList.length > 0) {\n\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t}\n\t\t// Blank the target tiddler if it isn't present in the story\n\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\ttargetTiddler = \"\";\n\t\t}\n\t}\n\t// Assemble the location hash\n\tswitch(options.updateAddressBar) {\n\t\tcase \"permalink\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t\tbreak;\n\t}\n\t// Copy URL to the clipboard\n\tswitch(options.copyToClipboard) {\n\t\tcase \"permalink\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler));\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList)));\n\t\t\tbreak;\n\t}\n\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\tif(options.updateHistory === \"yes\") {\n\t\t\t// Assign the location hash so that history is updated\n\t\t\twindow.location.hash = $tw.locationHash;\n\t\t} else {\n\t\t\t// We use replace so that browser history isn't affected\n\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t}\n\t}\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/windows.js": {
            "title": "$:/core/modules/startup/windows.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/windows.js\ntype: application/javascript\nmodule-type: startup\n\nSetup root widget handlers for the messages concerned with opening external browser windows\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"windows\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Global to keep track of open windows (hashmap by title)\nvar windows = {};\n\nexports.startup = function() {\n\t// Handle open window message\n\t$tw.rootWidget.addEventListener(\"tm-open-window\",function(event) {\n\t\t// Get the parameters\n\t\tvar refreshHandler,\n\t\t\ttitle = event.param || event.tiddlerTitle,\n\t\t\tparamObject = event.paramObject || {},\n\t\t\twindowTitle = paramObject.windowTitle || title,\n\t\t\ttemplate = paramObject.template || \"$:/core/templates/single.tiddler.window\",\n\t\t\twidth = paramObject.width || \"700\",\n\t\t\theight = paramObject.height || \"600\",\n\t\t\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\n\t\t// Open the window\n\t\tvar srcWindow,\n\t\t    srcDocument;\n\t\t// In case that popup blockers deny opening a new window\n\t\ttry {\n\t\t\tsrcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\t}\n\t\tcatch(e) {\n\t\t\treturn;\n\t\t}\n\t\twindows[title] = srcWindow;\n\t\t// Check for reopening the same window\n\t\tif(srcWindow.haveInitialisedWindow) {\n\t\t\treturn;\n\t\t}\n\t\t// Initialise the document\n\t\tsrcDocument.write(\"<html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>\");\n\t\tsrcDocument.close();\n\t\tsrcDocument.title = windowTitle;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete windows[title];\n\t\t\t$tw.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t},false);\n\t\t// Set up the styles\n\t\tvar styleWidgetNode = $tw.wiki.makeTranscludeWidget(\"$:/core/ui/PageStylesheet\",{\n\t\t\t\tdocument: $tw.fakeDocument,\n\t\t\t\tvariables: variables,\n\t\t\t\timportPageMacros: true}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\t// Listen for keyboard shortcuts\n\t\t$tw.utils.addEventListeners(srcDocument,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t},{\n\t\t\tname: \"click\",\n\t\t\thandlerObject: $tw.popup,\n\t\t\thandlerMethod: \"handleEvent\"\n\t\t}]);\n\t\tsrcWindow.haveInitialisedWindow = true;\n\t});\n\t// Close open windows when unloading main window\n\t$tw.addUnloadTask(function() {\n\t\t$tw.utils.each(windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/story.js": {
            "title": "$:/core/modules/story.js",
            "text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/storyviews/classic.js": {
            "title": "$:/core/modules/storyviews/classic.js",
            "text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration()\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\tif(duration) {\n\t\t// Scroll the node into view\n\t\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\t\n\t} else {\n\t\ttargetElement.scrollIntoView();\n\t}\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Reset the margin once the transition is over\n\t\tsetTimeout(function() {\n\t\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t\t{transition: \"none\"},\n\t\t\t\t{marginBottom: \"\"}\n\t\t\t]);\n\t\t},duration);\n\t\t// Set up the initial position of the element\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t// Transition to the final position\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t]);\n\t}\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode(),\n\t\t\tremoveElement = function() {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t};\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\tremoveElement();\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar currWidth = targetElement.offsetWidth,\n\t\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Remove the dom nodes of the widget at the end of the transition\n\t\tsetTimeout(removeElement,duration);\n\t\t// Animate the closure\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"translateX(0px)\"},\n\t\t\t{marginBottom:  currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/storyviews/pop.js": {
            "title": "$:/core/modules/storyviews/pop.js",
            "text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t\t$tw.utils.setStyle(widget.document.body,[\n\t\t\t{\"overflow-x\": \"\"}\n\t\t]);\n\t},duration);\n\t// Prevent the page from overscrolling due to the zoom factor\n\t$tw.utils.setStyle(widget.document.body,[\n\t\t{\"overflow-x\": \"hidden\"}\n\t]);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement && targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/storyviews/zoomin.js": {
            "title": "$:/core/modules/storyviews/zoomin.js",
            "text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx =  zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty =  zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/syncer.js": {
            "title": "$:/core/modules/syncer.js",
            "text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store and synchronises them to a remote data store represented as a \"sync adaptor\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDefaults\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleIsAnonymous = \"$:/status/IsAnonymous\";\nSyncer.prototype.titleIsReadOnly = \"$:/status/IsReadOnly\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSyncPollingInterval = \"$:/config/SyncPollingInterval\";\nSyncer.prototype.titleSyncDisableLazyLoading = \"$:/config/SyncDisableLazyLoading\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.titleSyncThrottleInterval = \"$:/config/SyncThrottleInterval\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.errorRetryInterval = 5 * 1000; // Interval to retry after an error\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\t// Save parameters\n\tthis.syncadaptor = options.syncadaptor;\n\tthis.disableUI = !!options.disableUI;\n\tthis.titleIsLoggedIn = options.titleIsLoggedIn || this.titleIsLoggedIn;\n\tthis.titleUserName = options.titleUserName || this.titleUserName;\n\tthis.titleSyncFilter = options.titleSyncFilter || this.titleSyncFilter;\n\tthis.titleSavedNotification = options.titleSavedNotification || this.titleSavedNotification;\n\tthis.taskTimerInterval = options.taskTimerInterval || this.taskTimerInterval;\n\tthis.throttleInterval = options.throttleInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncThrottleInterval,\"\"),10) || this.throttleInterval;\n\tthis.errorRetryInterval = options.errorRetryInterval || this.errorRetryInterval;\n\tthis.fallbackInterval = options.fallbackInterval || this.fallbackInterval;\n\tthis.pollTimerInterval = options.pollTimerInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncPollingInterval,\"\"),10) || this.pollTimerInterval;\n\tthis.logging = \"logging\" in options ? options.logging : true;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\")  + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\"),{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging,\n\t\tsaveHistory: true\n\t});\n\t// Make another logger for connection errors\n\tthis.loggerConnection = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\")  + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\") + \"-connection\",{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging\n\t});\n\t// Ask the syncadaptor to use the main logger\n\tif(this.syncadaptor.setLoggerSaveBuffer) {\n\t\tthis.syncadaptor.setLoggerSaveBuffer(this.logger);\n\t}\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\tthis.titlesToBeLoaded = {}; // Hashmap of titles of tiddlers that need loading from the server\n\tthis.titlesHaveBeenLazyLoaded = {}; // Hashmap of titles of tiddlers that have already been lazily loaded from the server\n\t// Timers\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Number of outstanding requests\n\tthis.numTasksInProgress = 0;\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t// Filter the changes to just include ones that are being synced\n\t\tvar filteredChanges = self.getSyncedTiddlers(function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.tiddlerExists(title) && self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t\tif(filteredChanges.length > 0) {\n\t\t\tself.processTaskQueue();\n\t\t} else {\n\t\t\t// Look for deletions of tiddlers we're already syncing\t\n\t\t\tvar outstandingDeletion = false\n\t\t\t$tw.utils.each(changes,function(change,title,object) {\n\t\t\t\tif(change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) {\n\t\t\t\t\toutstandingDeletion = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(outstandingDeletion) {\n\t\t\t\tself.processTaskQueue();\n\t\t\t}\n\t\t}\n\t});\n\t// Browser event handlers\n\tif($tw.browser && !this.disableUI) {\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function() {\n\t\t\tself.handleLoginEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-copy-syncer-logs-to-clipboard\",function() {\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getSystemInfo() + \"\\n\\nLog:\\n\" + self.logger.getBuffer());\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tif(!this.disableUI && $tw.wiki.getTiddlerText(this.titleSyncDisableLazyLoading) !== \"yes\") {\n\t\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\t\tself.handleLazyLoadEvent(title);\n\t\t});\t\t\n\t}\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nShow a generic network error alert\n*/\nSyncer.prototype.displayError = function(msg,err) {\n\tif(err === ($tw.language.getString(\"Error/XMLHttpRequest\") + \": 0\")) {\n\t\tthis.loggerConnection.alert($tw.language.getString(\"Error/NetworkErrorAlert\"));\n\t\tthis.logger.log(msg + \":\",err);\n\t} else {\n\t\tthis.logger.alert(msg + \":\",err);\n\t}\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getSyncedTiddlers = function(source) {\n\treturn this.filterFn.call(this.wiki,source);\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getTiddlerRevision = function(title) {\n\tif(this.syncadaptor && this.syncadaptor.getTiddlerRevision) {\n\t\treturn this.syncadaptor.getTiddlerRevision(title);\n\t} else {\n\t\treturn this.wiki.getTiddler(title).fields.revision;\t\n\t} \n};\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\t// \"revision\" is the revision of the tiddler last seen on the server, and \"changecount\" is the corresponding local changecount\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.getSyncedTiddlers();\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.tiddlerExists(title) && self.wiki.getTiddler(title);\n\t\tself.tiddlerInfo[title] = {\n\t\t\trevision: self.getTiddlerRevision(title),\n\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\tchangeCount: self.wiki.getChangeCount(title)\n\t\t};\n\t});\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\tthis.logger.log(\"Checking dirty status\");\n\t// Check tiddlers that are in the store and included in the filter function\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(this.wiki.tiddlerExists(title)) {\n\t\t\tif(tiddlerInfo) {\n\t\t\t\t// If the tiddler is known on the server and has been modified locally then it needs to be saved to the server\n\t\t\t\tif($tw.wiki.getChangeCount(title) > tiddlerInfo.changeCount) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If the tiddler isn't known on the server then it needs to be saved to the server\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\t// Check tiddlers that are known from the server but not currently in the store\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\tif(!this.wiki.tiddlerExists(titles[index])) {\n\t\t\t// There must be a pending delete\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser && !this.disableUI) {\n\t\tvar dirty = this.isDirty();\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",dirty);\n\t\tif(!dirty) {\n\t\t\tthis.loggerConnection.clearAlerts();\n\t\t}\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: this.getTiddlerRevision(tiddlerFields.title),\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title)\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username,isReadOnly,isAnonymous) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\t// Set the various status tiddlers\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsReadOnly,text: isReadOnly ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsAnonymous,text: isAnonymous ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\t\tif(isLoggedIn) {\n\t\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tvar self = this,\n\t\tcancelNextSync = function() {\n\t\t\tif(self.pollTimerId) {\n\t\t\t\tclearTimeout(self.pollTimerId);\n\t\t\t\tself.pollTimerId = null;\n\t\t\t}\n\t\t},\n\t\ttriggerNextSync = function() {\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t};\n\tif(this.syncadaptor && this.syncadaptor.getUpdatedTiddlers) {\n\t\tthis.logger.log(\"Retrieving updated tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getUpdatedTiddlers(self,function(err,updates) {\n\t\t\ttriggerNextSync();\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(updates) {\n\t\t\t\t$tw.utils.each(updates.modifications,function(title) {\n\t\t\t\t\tself.titlesToBeLoaded[title] = true;\n\t\t\t\t});\n\t\t\t\t$tw.utils.each(updates.deletions,function(title) {\n\t\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t\t});\n\t\t\t\tif(updates.modifications.length > 0 || updates.deletions.length > 0) {\n\t\t\t\t\tself.processTaskQueue();\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t} else if(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\ttriggerNextSync();\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Keep track of which tiddlers we already know about have been reported this time\n\t\t\tvar previousTitles = Object.keys(self.tiddlerInfo);\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.tiddlerExists(tiddlerFields.title) && self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null,\n\t\t\t\t\tindexInPreviousTitles = previousTitles.indexOf(tiddlerFields.title);\n\t\t\t\tif(indexInPreviousTitles !== -1) {\n\t\t\t\t\tpreviousTitles.splice(indexInPreviousTitles,1);\n\t\t\t\t}\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Only load the skinny version if we don't already have a fat version of the tiddler\n\t\t\t\t\tif(!tiddler || tiddler.fields.text === undefined) {\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\tself.titlesToBeLoaded[tiddlerFields.title] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Delete any tiddlers that were previously reported but missing this time\n\t\t\t$tw.utils.each(previousTitles,function(title) {\n\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t});\n\t\t\tself.processTaskQueue();\n\t\t});\n\t}\n};\n\n/*\nForce load a tiddler from the server\n*/\nSyncer.prototype.enqueueLoadTiddler = function(title) {\n\tthis.titlesToBeLoaded[title] = true;\n\tthis.processTaskQueue();\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Ignore if the syncadaptor doesn't handle it\n\tif(!this.syncadaptor.supportsLazyLoading) {\n\t\treturn;\n\t}\n\t// Don't lazy load the same tiddler twice\n\tif(!this.titlesHaveBeenLazyLoaded[title]) {\n\t\t// Don't lazy load if the tiddler isn't included in the sync filter\n\t\tif(this.getSyncedTiddlers().indexOf(title) !== -1) {\n\t\t\t// Mark the tiddler as needing loading, and having already been lazily loaded\n\t\t\tthis.titlesToBeLoaded[title] = true;\n\t\t\tthis.titlesHaveBeenLazyLoaded[title] = true;\n\t\t}\n\t}\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!err && !isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: $tw.language.getString(\"LoginToTiddlySpace\"),\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\t\t\tself.syncFromServer();\n\t\t\t\t\t});\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(err,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nProcess the next task\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if the sync adaptor is fully initialised and we're not already performing\n\t// a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif((!this.syncadaptor.isReady || this.syncadaptor.isReady()) && this.numTasksInProgress === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(typeof task === \"object\" && task !== null) {\n\t\t\tthis.numTasksInProgress += 1;\n\t\t\ttask.run(function(err) {\n\t\t\t\tself.numTasksInProgress -= 1;\n\t\t\t\tif(err) {\n\t\t\t\t\tself.displayError(\"Sync error while processing \" + task.type + \" of '\" + task.title + \"'\",err);\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\tself.triggerTimeout(self.errorRetryInterval);\n\t\t\t\t} else {\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\t// Process the next task\n\t\t\t\t\tself.processTaskQueue.call(self);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// No task is ready so update the status\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// And trigger a timeout if there is a pending task\n\t\t\tif(task === true) {\n\t\t\t\tthis.triggerTimeout();\t\t\t\t\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.updateDirtyStatus();\t\t\n\t}\n};\n\nSyncer.prototype.triggerTimeout = function(interval) {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},interval || self.taskTimerInterval);\n\t}\n};\n\n/*\nChoose the next sync task. We prioritise saves, then deletes, then loads from the server\n\nReturns either a task object, null if there's no upcoming tasks, or the boolean true if there are pending tasks that aren't yet due\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar thresholdLastSaved = (new Date()) - this.throttleInterval,\n\t\thavePending = null;\n\t// First we look for tiddlers that have been modified locally and need saving back to the server\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title),\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(tiddler) {\n\t\t\t// If the tiddler is not known on the server, or has been modified locally no more recently than the threshold then it needs to be saved to the server\n\t\t\tvar hasChanged = !tiddlerInfo || $tw.wiki.getChangeCount(title) > tiddlerInfo.changeCount,\n\t\t\t\tisReadyToSave = !tiddlerInfo || !tiddlerInfo.timestampLastSaved || tiddlerInfo.timestampLastSaved < thresholdLastSaved;\n\t\t\tif(hasChanged) {\n\t\t\t\tif(isReadyToSave) {\n\t\t\t\t\treturn new SaveTiddlerTask(this,title); \t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\thavePending = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Second, we check tiddlers that are known from the server but not currently in the store, and so need deleting on the server\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\ttitle = titles[index];\n\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\treturn new DeleteTiddlerTask(this,title);\n\t\t}\n\t}\n\t// Check for tiddlers that need loading\n\ttitle = Object.keys(this.titlesToBeLoaded)[0];\n\tif(title) {\n\t\tdelete this.titlesToBeLoaded[title];\n\t\treturn new LoadTiddlerTask(this,title);\n\t}\n\t// No tasks are ready\n\treturn havePending;\n};\n\nfunction SaveTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"save\";\n}\n\nSaveTiddlerTask.prototype.run = function(callback) {\n\tvar self = this,\n\t\tchangeCount = this.syncer.wiki.getChangeCount(this.title),\n\t\ttiddler = this.syncer.wiki.tiddlerExists(this.title) && this.syncer.wiki.getTiddler(this.title);\n\tthis.syncer.logger.log(\"Dispatching 'save' task:\",this.title);\n\tif(tiddler) {\n\t\tthis.syncer.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t// If there's an error, exit without changing any internal state\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Adjust the info stored about this tiddler\n\t\t\tself.syncer.tiddlerInfo[self.title] = {\n\t\t\t\tchangeCount: changeCount,\n\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\trevision: revision,\n\t\t\t\ttimestampLastSaved: new Date()\n\t\t\t};\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t} else {\n\t\tthis.syncer.logger.log(\" Not Dispatching 'save' task:\",this.title,\"tiddler does not exist\");\n\t\t$tw.utils.nextTick(callback(null));\n\t}\n};\n\nfunction DeleteTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"delete\";\n}\n\nDeleteTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'delete' task:\",this.title);\n\tthis.syncer.syncadaptor.deleteTiddler(this.title,function(err) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Remove the info stored about this tiddler\n\t\tdelete self.syncer.tiddlerInfo[self.title];\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t},{\n\t\ttiddlerInfo: self.syncer.tiddlerInfo[this.title]\n\t});\n};\n\nfunction LoadTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"load\";\n}\n\nLoadTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'load' task:\",this.title);\n\tthis.syncer.syncadaptor.loadTiddler(this.title,function(err,tiddlerFields) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Update the info stored about this tiddler\n\t\tif(tiddlerFields) {\n\t\t\tself.syncer.storeTiddler(tiddlerFields);\n\t\t}\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t});\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/tiddler.js": {
            "title": "$:/core/modules/tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet the value of a field as a list\n*/\nexports.getFieldList = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn [];\n\t}\n\treturn $tw.utils.parseStringArray(value);\n};\n\n/*\nGet all the fields as a hashmap of strings. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStrings = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = {};\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields[field] = this.getFieldString(field);\n\t\t\t}\n\t\t}\n\t}\n\treturn fields;\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [],\n\t\tfields = Object.keys(this.fields).sort(),\n\t\tresult = [];\n\tfor(var t=0; t<fields.length; t++) {\n\t\tvar field = fields[t];\n\t\tif(exclude.indexOf(field) === -1) {\n\t\t\tresult.push(field + \": \" + this.getFieldString(field));\n\t\t}\n\t}\n\treturn result.join(\"\\n\");\n};\n\nexports.getFieldDay = function(field) {\n\tif(this.cache && this.cache.day && $tw.utils.hop(this.cache.day,field) ) {\n\t\treturn this.cache.day[field];\n\t}\n\tvar day = \"\";\n\tif(this.fields[field]) {\n\t\tday = (new Date($tw.utils.parseDate(this.fields[field]))).setHours(0,0,0,0);\n\t}\n\tthis.cache.day = this.cache.day || {};\n\tthis.cache.day[field] = day;\n\treturn day;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "tiddlermethod"
        },
        "$:/core/modules/upgraders/plugins.js": {
            "title": "$:/core/modules/upgraders/plugins.js",
            "text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/themes/tiddlywiki/stickytitles\": {\n\t\tversions: [\"*\"]\n\t},\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin contains JS modules\n\t\t\tvar requiresReload = $tw.wiki.doesPluginInfoRequireReload(JSON.parse(incomingTiddler.text)) ? ($tw.wiki.getTiddlerText(\"$:/language/ControlPanel/Plugins/PluginWillRequireReload\") + \" \") : \"\";\n\t\t\tmessages[title] = requiresReload;\n\t\t\tif(incomingTiddler.version) {\n\t\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\t\tmessages[title] = requiresReload + $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\t\tmessages[title] = requiresReload + $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/upgraders/system.js": {
            "title": "$:/core/modules/upgraders/system.js",
            "text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/StoryList\",\"$:/HistoryList\"],\n\tDONT_IMPORT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\",\"$:/Import\"],\n\tWARN_IMPORT_PREFIX_LIST = [\"$:/core/modules/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tshowAlert = false;\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<DONT_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = DONT_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/State/Suppressed\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(var t=0; t<WARN_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = WARN_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix && wiki.isShadowTiddler(title)) {\n\t\t\t\t\tshowAlert = true;\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Warning\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tif(showAlert) {\n\t\tvar logger = new $tw.utils.Logger(\"import\");\n\t\tlogger.alert($tw.language.getString(\"Import/Upgrader/System/Alert\"));\n\t}\n\treturn messages;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/upgraders/themetweaks.js": {
            "title": "$:/core/modules/upgraders/themetweaks.js",
            "text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/utils/base64-utf8/base64-utf8.module.js": {
            "text": "(function(){// From https://gist.github.com/Nijikokun/5192472\n//\n// UTF8 Module\n//\n// Cleaner and modularized utf-8 encoding and decoding library for javascript.\n//\n// copyright: MIT\n// author: Nijiko Yonskai, @nijikokun, nijikokun@gmail.com\n!function(r,e,o,t){void 0!==o.module&&o.module.exports?o.module.exports=e.apply(o):void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"utf8\",[],e):o.utf8=e.apply(o)}(0,function(){return{encode:function(r){if(\"string\"!=typeof r)return r;r=r.replace(/\\r\\n/g,\"\\n\");for(var e,o=\"\",t=0;t<r.length;t++)(e=r.charCodeAt(t))<128?o+=String.fromCharCode(e):e>127&&e<2048?(o+=String.fromCharCode(e>>6|192),o+=String.fromCharCode(63&e|128)):(o+=String.fromCharCode(e>>12|224),o+=String.fromCharCode(e>>6&63|128),o+=String.fromCharCode(63&e|128));return o},decode:function(r){if(\"string\"!=typeof r)return r;for(var e=\"\",o=0,t=0;o<r.length;)(t=r.charCodeAt(o))<128?(e+=String.fromCharCode(t),o++):t>191&&t<224?(e+=String.fromCharCode((31&t)<<6|63&r.charCodeAt(o+1)),o+=2):(e+=String.fromCharCode((15&t)<<12|(63&r.charCodeAt(o+1))<<6|63&r.charCodeAt(o+2)),o+=3);return e}}},this),function(r,e,o,t){if(void 0!==o.module&&o.module.exports){if(t&&o.require)for(var n=0;n<t.length;n++)o[t[n]]=o.require(t[n]);o.module.exports=e.apply(o)}else void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"base64\",t||[],e):o.base64=e.apply(o)}(0,function(r){var e=r||this.utf8,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";return{encode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=e.encode(r);for(var t,n,i,d,f,a,h,c=\"\",u=0;u<r.length;)d=(t=r.charCodeAt(u++))>>2,f=(3&t)<<4|(n=r.charCodeAt(u++))>>4,a=(15&n)<<2|(i=r.charCodeAt(u++))>>6,h=63&i,isNaN(n)?a=h=64:isNaN(i)&&(h=64),c+=o.charAt(d)+o.charAt(f)+o.charAt(a)+o.charAt(h);return c},decode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=r.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");for(var t,n,i,d,f,a,h=\"\",c=0;c<r.length;)t=o.indexOf(r.charAt(c++))<<2|(d=o.indexOf(r.charAt(c++)))>>4,n=(15&d)<<4|(f=o.indexOf(r.charAt(c++)))>>2,i=(3&f)<<6|(a=o.indexOf(r.charAt(c++))),h+=String.fromCharCode(t),64!=f&&(h+=String.fromCharCode(n)),64!=a&&(h+=String.fromCharCode(i));return e.decode(h)}}},this,[\"utf8\"]);}).call(exports);",
            "type": "application/javascript",
            "title": "$:/core/modules/utils/base64-utf8/base64-utf8.module.js",
            "module-type": "library"
        },
        "$:/core/modules/utils/crypto.js": {
            "title": "$:/core/modules/utils/crypto.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/csv.js": {
            "title": "$:/core/modules/utils/csv.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/csv.js\ntype: application/javascript\nmodule-type: utils\n\nA barebones CSV parser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a CSV string with a header row and return an array of hashmaps.\n*/\nexports.parseCsvStringWithHeader = function(text,options) {\n\toptions = options || {};\n\tvar separator = options.separator || \",\",\n\t\trows = text.split(/\\r?\\n/mg).map(function(row) {\n\t\t\treturn $tw.utils.trim(row);\n\t\t}).filter(function(row) {\n\t\t\treturn row !== \"\";\n\t\t});\n\tif(rows.length < 1) {\n\t\treturn \"Missing header row\";\n\t}\n\tvar headings = rows[0].split(separator),\n\t\tresults = [];\n\tfor(var row=1; row<rows.length; row++) {\n\t\tvar columns = rows[row].split(separator),\n\t\t\tcolumnResult = Object.create(null);\n\t\tif(columns.length !== headings.length) {\n\t\t\treturn \"Malformed CSV row '\" + rows[row] + \"'\";\n\t\t}\n\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\tvar columnName = headings[column];\n\t\t\tcolumnResult[columnName] = $tw.utils.trim(columns[column] || \"\");\n\t\t}\n\t\tresults.push(columnResult);\t\t\t\n\t}\n\treturn results;\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/diff-match-patch/diff_match_patch.js": {
            "text": "(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=.5;this.Patch_Margin=4;this.Match_MaxBits=32}var DIFF_DELETE=-1,DIFF_INSERT=1,DIFF_EQUAL=0;\ndiff_match_patch.prototype.diff_main=function(a,b,c,d){\"undefined\"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error(\"Null input. (diff_main)\");if(a==b)return a?[[DIFF_EQUAL,a]]:[];\"undefined\"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);f=this.diff_commonSuffix(a,b);var g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,\nb,e,d);c&&a.unshift([DIFF_EQUAL,c]);g&&a.push([DIFF_EQUAL,g]);this.diff_cleanupMerge(a);return a};\ndiff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[DIFF_INSERT,b]];if(!b)return[[DIFF_DELETE,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[DIFF_INSERT,e.substring(0,g)],[DIFF_EQUAL,f],[DIFF_INSERT,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=DIFF_DELETE),c):1==f.length?[[DIFF_DELETE,a],[DIFF_INSERT,b]]:(e=this.diff_halfMatch_(a,b))?(b=e[1],f=e[3],a=e[4],e=this.diff_main(e[0],e[2],c,d),c=this.diff_main(b,f,c,d),e.concat([[DIFF_EQUAL,\na]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,d):this.diff_bisect_(a,b,d)};\ndiff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([DIFF_EQUAL,\"\"]);for(var e=d=b=0,f=\"\",g=\"\";b<a.length;){switch(a[b][0]){case DIFF_INSERT:e++;g+=a[b][1];break;case DIFF_DELETE:d++;f+=a[b][1];break;case DIFF_EQUAL:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=\nd.length}d=e=0;g=f=\"\"}b++}a.pop();return a};\ndiff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=2*f,h=Array(g),l=Array(g),k=0;k<g;k++)h[k]=-1,l[k]=-1;h[f+1]=0;l[f+1]=0;k=d-e;for(var m=0!=k%2,p=0,x=0,w=0,q=0,t=0;t<f&&!((new Date).getTime()>c);t++){for(var v=-t+p;v<=t-x;v+=2){var n=f+v;var r=v==-t||v!=t&&h[n-1]<h[n+1]?h[n+1]:h[n-1]+1;for(var y=r-v;r<d&&y<e&&a.charAt(r)==b.charAt(y);)r++,y++;h[n]=r;if(r>d)x+=2;else if(y>e)p+=2;else if(m&&(n=f+k-v,0<=n&&n<g&&-1!=l[n])){var u=d-l[n];if(r>=\nu)return this.diff_bisectSplit_(a,b,r,y,c)}}for(v=-t+w;v<=t-q;v+=2){n=f+v;u=v==-t||v!=t&&l[n-1]<l[n+1]?l[n+1]:l[n-1]+1;for(r=u-v;u<d&&r<e&&a.charAt(d-u-1)==b.charAt(e-r-1);)u++,r++;l[n]=u;if(u>d)q+=2;else if(r>e)w+=2;else if(!m&&(n=f+k-v,0<=n&&n<g&&-1!=h[n]&&(r=h[n],y=f+r-n,u=d-u,r>=u)))return this.diff_bisectSplit_(a,b,r,y,c)}}return[[DIFF_DELETE,a],[DIFF_INSERT,b]]};\ndiff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};\ndiff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b=\"\",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf(\"\\n\",c);-1==f&&(f=a.length-1);var h=a.substring(c,f+1);c=f+1;(e.hasOwnProperty?e.hasOwnProperty(h):void 0!==e[h])?b+=String.fromCharCode(e[h]):(b+=String.fromCharCode(g),e[h]=g,d[g++]=h)}return b}var d=[],e={};d[0]=\"\";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};\ndiff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join(\"\")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;d=0;for(var e=1;;){var f=a.substring(c-e);f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};\ndiff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g=\"\",h,k,l,m;-1!=(e=b.indexOf(d,e+1));){var p=f.diff_commonPrefix(a.substring(c),b.substring(e)),u=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<u+p&&(g=b.substring(e-u,e)+b.substring(e,e+p),h=a.substring(0,c-u),k=a.substring(c+p),l=b.substring(0,e-u),m=b.substring(e+p))}return 2*g.length>=a.length?[h,k,l,m,g]:null}if(0>=this.Diff_Timeout)return null;\nvar d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4));d=c(d,e,Math.ceil(d.length/2));if(g||d)g=d?g?g[4].length>d[4].length?g:d:d:g;else return null;if(a.length>b.length){d=g[0];e=g[1];var h=g[2];var l=g[3]}else h=g[0],l=g[1],d=g[2],e=g[3];return[d,e,h,l,g[4]]};\ndiff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,l=0,k=0;f<a.length;)a[f][0]==DIFF_EQUAL?(c[d++]=f,g=l,h=k,k=l=0,e=a[f][1]):(a[f][0]==DIFF_INSERT?l+=a[f][1].length:k+=a[f][1].length,e&&e.length<=Math.max(g,h)&&e.length<=Math.max(l,k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,d--,f=0<d?c[d-1]:-1,k=l=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(a[f-1][0]==\nDIFF_DELETE&&a[f][0]==DIFF_INSERT){b=a[f-1][1];c=a[f][1];d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[DIFF_EQUAL,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[DIFF_EQUAL,b.substring(0,e)]),a[f-1][0]=DIFF_INSERT,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=DIFF_DELETE,a[f+1][1]=b.substring(e),f++;f++}f++}};\ndiff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_);c=g&&c.match(diff_match_patch.linebreakRegex_);d=h&&d.match(diff_match_patch.linebreakRegex_);var k=c&&a.match(diff_match_patch.blanklineEndRegex_),l=d&&b.match(diff_match_patch.blanklineStartRegex_);\nreturn k||l?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(a[c-1][0]==DIFF_EQUAL&&a[c+1][0]==DIFF_EQUAL){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g){var h=e.substring(e.length-g);d=d.substring(0,d.length-g);e=h+e.substring(0,e.length-g);f=h+f}g=d;h=e;for(var l=f,k=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){d+=e.charAt(0);e=e.substring(1)+f.charAt(0);f=f.substring(1);var m=b(d,e)+b(e,f);m>=k&&(k=m,g=d,h=e,l=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-\n1,1),c--),a[c][1]=h,l?a[c+1][1]=l:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\\s/;diff_match_patch.linebreakRegex_=/[\\r\\n]/;diff_match_patch.blanklineEndRegex_=/\\n\\r?\\n$/;diff_match_patch.blanklineStartRegex_=/^\\r?\\n\\r?\\n/;\ndiff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,l=!1,k=!1;f<a.length;)a[f][0]==DIFF_EQUAL?(a[f][1].length<this.Diff_EditCost&&(l||k)?(c[d++]=f,g=l,h=k,e=a[f][1]):(d=0,e=null),l=k=!1):(a[f][0]==DIFF_DELETE?k=!0:l=!0,e&&(g&&h&&l&&k||e.length<this.Diff_EditCost/2&&3==g+h+l+k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,e=null,g&&h?(l=k=!0,d=0):(d--,f=0<d?c[d-1]:-1,l=k=!1),b=!0)),f++;b&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([DIFF_EQUAL,\"\"]);for(var b=0,c=0,d=0,e=\"\",f=\"\",g;b<a.length;)switch(a[b][0]){case DIFF_INSERT:d++;f+=a[b][1];b++;break;case DIFF_DELETE:c++;e+=a[b][1];b++;break;case DIFF_EQUAL:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&a[b-c-d-1][0]==DIFF_EQUAL?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[DIFF_EQUAL,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-\ng)+a[b][1],f=f.substring(0,f.length-g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[DIFF_INSERT,f]):0===d?a.splice(b-c,c+d,[DIFF_DELETE,e]):a.splice(b-c-d,c+d,[DIFF_DELETE,e],[DIFF_INSERT,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&a[b-1][0]==DIFF_EQUAL?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=\"\"}\"\"===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)a[b-1][0]==DIFF_EQUAL&&a[b+1][0]==DIFF_EQUAL&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,\na[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){a[g][0]!==DIFF_INSERT&&(c+=a[g][1].length);a[g][0]!==DIFF_DELETE&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&a[g][0]===DIFF_DELETE?f:f+(b-e)};\ndiff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\\n/g,g=0;g<a.length;g++){var h=a[g][0],l=a[g][1].replace(c,\"&amp;\").replace(d,\"&lt;\").replace(e,\"&gt;\").replace(f,\"&para;<br>\");switch(h){case DIFF_INSERT:b[g]='<ins style=\"background:#e6ffe6;\">'+l+\"</ins>\";break;case DIFF_DELETE:b[g]='<del style=\"background:#ffe6e6;\">'+l+\"</del>\";break;case DIFF_EQUAL:b[g]=\"<span>\"+l+\"</span>\"}}return b.join(\"\")};\ndiff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_INSERT&&(b[c]=a[c][1]);return b.join(\"\")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_DELETE&&(b[c]=a[c][1]);return b.join(\"\")};\ndiff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][1];switch(a[e][0]){case DIFF_INSERT:c+=f.length;break;case DIFF_DELETE:d+=f.length;break;case DIFF_EQUAL:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};\ndiff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case DIFF_INSERT:b[c]=\"+\"+encodeURI(a[c][1]);break;case DIFF_DELETE:b[c]=\"-\"+a[c][1].length;break;case DIFF_EQUAL:b[c]=\"=\"+a[c][1].length}return b.join(\"\\t\").replace(/%20/g,\" \")};\ndiff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case \"+\":try{c[d++]=[DIFF_INSERT,decodeURI(h)]}catch(k){throw Error(\"Illegal escape in diff_fromDelta: \"+h);}break;case \"-\":case \"=\":var l=parseInt(h,10);if(isNaN(l)||0>l)throw Error(\"Invalid number in diff_fromDelta: \"+h);h=a.substring(e,e+=l);\"=\"==f[g].charAt(0)?c[d++]=[DIFF_EQUAL,h]:c[d++]=[DIFF_DELETE,h];break;default:if(f[g])throw Error(\"Invalid diff operation in diff_fromDelta: \"+\nf[g]);}}if(e!=a.length)throw Error(\"Delta length (\"+e+\") does not equal source text length (\"+a.length+\").\");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error(\"Null input. (match_main)\");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};\ndiff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return f.Match_Distance?e+g/f.Match_Distance:g?1:e}if(b.length>this.Match_MaxBits)throw Error(\"Pattern too long for this browser.\");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));var l=1<<b.length-1;h=-1;for(var k,m,p=b.length+a.length,x,w=0;w<b.length;w++){k=0;for(m=p;k<m;)d(w,\nc+m)<=g?k=m:p=m,m=Math.floor((p-k)/2+k);p=m;k=Math.max(1,c-m+1);var q=Math.min(c+m,a.length)+b.length;m=Array(q+2);for(m[q+1]=(1<<w)-1;q>=k;q--){var t=e[a.charAt(q-1)];m[q]=0===w?(m[q+1]<<1|1)&t:(m[q+1]<<1|1)&t|(x[q+1]|x[q])<<1|1|x[q+1];if(m[q]&l&&(t=d(w,q-1),t<=g))if(g=t,h=q-1,h>c)k=Math.max(1,2*c-h);else break}if(d(w+1,c)>g)break;x=m}return h};\ndiff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};\ndiff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([DIFF_EQUAL,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([DIFF_EQUAL,d]);a.start1-=c.length;a.start2-=\nc.length;a.length1+=c.length+d.length;a.length2+=c.length+d.length}};\ndiff_match_patch.prototype.patch_make=function(a,b,c){if(\"string\"==typeof a&&\"string\"==typeof b&&\"undefined\"==typeof c){var d=a;b=this.diff_main(d,b,!0);2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b))}else if(a&&\"object\"==typeof a&&\"undefined\"==typeof b&&\"undefined\"==typeof c)b=a,d=this.diff_text1(b);else if(\"string\"==typeof a&&b&&\"object\"==typeof b&&\"undefined\"==typeof c)d=a;else if(\"string\"==typeof a&&\"string\"==typeof b&&c&&\"object\"==typeof c)d=a,b=c;else throw Error(\"Unknown call format to patch_make.\");\nif(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,l=0;l<b.length;l++){var k=b[l][0],m=b[l][1];e||k===DIFF_EQUAL||(a.start1=f,a.start2=g);switch(k){case DIFF_INSERT:a.diffs[e++]=b[l];a.length2+=m.length;d=d.substring(0,g)+m+d.substring(g);break;case DIFF_DELETE:a.length1+=m.length;a.diffs[e++]=b[l];d=d.substring(0,g)+d.substring(g+m.length);break;case DIFF_EQUAL:m.length<=2*this.Patch_Margin&&e&&b.length!=l+1?(a.diffs[e++]=b[l],a.length1+=m.length,a.length2+=m.length):\nm.length>=2*this.Patch_Margin&&e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}k!==DIFF_INSERT&&(f+=m.length);k!==DIFF_DELETE&&(g+=m.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};\ndiff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};\ndiff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),l=-1;if(h.length>this.Match_MaxBits){var k=this.match_main(b,h.substring(0,this.Match_MaxBits),g);-1!=k&&(l=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==l||k>=l)&&(k=-1)}else k=this.match_main(b,h,\ng);if(-1==k)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=k-g,g=-1==l?b.substring(k,k+h.length):b.substring(k,l+this.Match_MaxBits),h==g)b=b.substring(0,k)+this.diff_text2(a[f].diffs)+b.substring(k+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);h=0;var m;for(l=0;l<a[f].diffs.length;l++){var p=a[f].diffs[l];p[0]!==DIFF_EQUAL&&(m=this.diff_xIndex(g,h));p[0]===\nDIFF_INSERT?b=b.substring(0,k+m)+p[1]+b.substring(k+m):p[0]===DIFF_DELETE&&(b=b.substring(0,k+m)+b.substring(k+this.diff_xIndex(g,h+p[1].length)));p[0]!==DIFF_DELETE&&(h+=p[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};\ndiff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c=\"\",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;d=a[0];var e=d.diffs;if(0==e.length||e[0][0]!=DIFF_EQUAL)e.unshift([DIFF_EQUAL,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||e[e.length-\n1][0]!=DIFF_EQUAL?(e.push([DIFF_EQUAL,c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};\ndiff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g=\"\";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,l=!0;h.start1=e-g.length;h.start2=f-g.length;\"\"!==g&&(h.length1=h.length2=g.length,h.diffs.push([DIFF_EQUAL,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){g=d.diffs[0][0];var k=d.diffs[0][1];g===DIFF_INSERT?(h.length2+=k.length,f+=k.length,h.diffs.push(d.diffs.shift()),\nl=!1):g===DIFF_DELETE&&1==h.diffs.length&&h.diffs[0][0]==DIFF_EQUAL&&k.length>2*b?(h.length1+=k.length,e+=k.length,l=!1,h.diffs.push([g,k]),d.diffs.shift()):(k=k.substring(0,b-h.length1-this.Patch_Margin),h.length1+=k.length,e+=k.length,g===DIFF_EQUAL?(h.length2+=k.length,f+=k.length):l=!1,h.diffs.push([g,k]),k==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(k.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);k=this.diff_text1(d.diffs).substring(0,\nthis.Patch_Margin);\"\"!==k&&(h.length1+=k.length,h.length2+=k.length,0!==h.diffs.length&&h.diffs[h.diffs.length-1][0]===DIFF_EQUAL?h.diffs[h.diffs.length-1][1]+=k:h.diffs.push([DIFF_EQUAL,k]));l||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join(\"\")};\ndiff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split(\"\\n\");for(var c=0,d=/^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error(\"Invalid patch string: \"+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);\"\"===e[2]?(f.start1--,f.length1=1):\"0\"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);\"\"===e[4]?(f.start2--,f.length2=1):\"0\"==e[4]?f.length2=0:(f.start2--,f.length2=\nparseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error(\"Illegal escape in patch_fromText: \"+g);}if(\"-\"==e)f.diffs.push([DIFF_DELETE,g]);else if(\"+\"==e)f.diffs.push([DIFF_INSERT,g]);else if(\" \"==e)f.diffs.push([DIFF_EQUAL,g]);else if(\"@\"==e)break;else if(\"\"!==e)throw Error('Invalid patch mode \"'+e+'\" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};\ndiff_match_patch.patch_obj.prototype.toString=function(){for(var a=[\"@@ -\"+(0===this.length1?this.start1+\",0\":1==this.length1?this.start1+1:this.start1+1+\",\"+this.length1)+\" +\"+(0===this.length2?this.start2+\",0\":1==this.length2?this.start2+1:this.start2+1+\",\"+this.length2)+\" @@\\n\"],b,c=0;c<this.diffs.length;c++){switch(this.diffs[c][0]){case DIFF_INSERT:b=\"+\";break;case DIFF_DELETE:b=\"-\";break;case DIFF_EQUAL:b=\" \"}a[c+1]=b+encodeURI(this.diffs[c][1])+\"\\n\"}return a.join(\"\").replace(/%20/g,\" \")};\nthis.diff_match_patch=diff_match_patch;this.DIFF_DELETE=DIFF_DELETE;this.DIFF_INSERT=DIFF_INSERT;this.DIFF_EQUAL=DIFF_EQUAL;\n}).call(exports);",
            "type": "application/javascript",
            "title": "$:/core/modules/utils/diff-match-patch/diff_match_patch.js",
            "module-type": "library"
        },
        "$:/core/modules/utils/dom/animations/slide.js": {
            "title": "$:/core/modules/utils/dom/animations/slide.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "animation"
        },
        "$:/core/modules/utils/dom/animator.js": {
            "title": "$:/core/modules/utils/dom/animator.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/browser.js": {
            "title": "$:/core/modules/utils/dom/browser.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/csscolorparser.js": {
            "title": "$:/core/modules/utils/dom/csscolorparser.js",
            "text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n  \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n  \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n  \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n  \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n  \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n  \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n  \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n  \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n  \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n  \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n  \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n  \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n  \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n  \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n  \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n  \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n  \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n  \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n  \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n  \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n  \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n  \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n  \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n  \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n  \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n  \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n  \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n  \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n  \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n  \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n  \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n  \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n  \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n  \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n  \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n  \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n  \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n  \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n  \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n  \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n  \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n  \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n  \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n  \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n  \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n  \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n  \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n  \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n  \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n  \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n  \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n  \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n  \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n  \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n  \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n  \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n  \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n  \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n  \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n  \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n  \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n  \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n  \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n  \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n  \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n  \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n  \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n  \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n  \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n  \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n  \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n  \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n  \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n  \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) {  // Clamp to integer 0 .. 255.\n  i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n  return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) {  // Clamp to float 0.0 .. 1.0.\n  return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) {  // int or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_byte(parseFloat(str) / 100 * 255);\n  return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) {  // float or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_float(parseFloat(str) / 100);\n  return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n  if (h < 0) h += 1;\n  else if (h > 1) h -= 1;\n\n  if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n  if (h * 2 < 1) return m2;\n  if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n  return m1;\n}\n\nfunction parseCSSColor(css_str) {\n  // Remove all whitespace, not compliant, but should just be more accepting.\n  var str = css_str.replace(/ /g, '').toLowerCase();\n\n  // Color keywords (and transparent) lookup.\n  if (str in kCSSColorTable) return kCSSColorTable[str].slice();  // dup.\n\n  // #abc and #abc123 syntax.\n  if (str[0] === '#') {\n    if (str.length === 4) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xfff)) return null;  // Covers NaN.\n      return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n              (iv & 0xf0) | ((iv & 0xf0) >> 4),\n              (iv & 0xf) | ((iv & 0xf) << 4),\n              1];\n    } else if (str.length === 7) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xffffff)) return null;  // Covers NaN.\n      return [(iv & 0xff0000) >> 16,\n              (iv & 0xff00) >> 8,\n              iv & 0xff,\n              1];\n    }\n\n    return null;\n  }\n\n  var op = str.indexOf('('), ep = str.indexOf(')');\n  if (op !== -1 && ep + 1 === str.length) {\n    var fname = str.substr(0, op);\n    var params = str.substr(op+1, ep-(op+1)).split(',');\n    var alpha = 1;  // To allow case fallthrough.\n    switch (fname) {\n      case 'rgba':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'rgb':\n        if (params.length !== 3) return null;\n        return [parse_css_int(params[0]),\n                parse_css_int(params[1]),\n                parse_css_int(params[2]),\n                alpha];\n      case 'hsla':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'hsl':\n        if (params.length !== 3) return null;\n        var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360;  // 0 .. 1\n        // NOTE(deanm): According to the CSS spec s/l should only be\n        // percentages, but we don't bother and let float or percentage.\n        var s = parse_css_float(params[1]);\n        var l = parse_css_float(params[2]);\n        var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n        var m1 = l * 2 - m2;\n        return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n                alpha];\n      default:\n        return null;\n    }\n  }\n\n  return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom.js": {
            "title": "$:/core/modules/utils/dom.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.className && el.className.toString().split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = el.className.split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = el.className.split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the first parent element that has scrollbars or use the body as fallback.\n*/\nexports.getScrollContainer = function(el) {\n\tvar doc = el.ownerDocument;\n\twhile(el.parentNode) {\t\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn doc.body;\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function(srcWindow) {\n\tvar scrollWindow = srcWindow || window;\n\tif(\"scrollX\" in scrollWindow) {\n\t\treturn {x: scrollWindow.scrollX, y: scrollWindow.scrollY};\n\t} else {\n\t\treturn {x: scrollWindow.document.documentElement.scrollLeft, y: scrollWindow.document.documentElement.scrollTop};\n\t}\n};\n\n/*\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\n*/\nexports.resizeTextAreaToFit = function(domNode,minHeight) {\n\t// Get the scroll container and register the current scroll position\n\tvar container = $tw.utils.getScrollContainer(domNode),\n\t\tscrollTop = container.scrollTop;\n    // Measure the specified minimum height\n\tdomNode.style.height = minHeight;\n\tvar measuredHeight = domNode.offsetHeight || parseInt(minHeight,10);\n\t// Set its height to auto so that it snaps to the correct height\n\tdomNode.style.height = \"auto\";\n\t// Calculate the revised height\n\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\n\t// Only try to change the height if it has changed\n\tif(newHeight !== domNode.offsetHeight) {\n\t\tdomNode.style.height = newHeight + \"px\";\n\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t$tw.utils.forceLayout(domNode);\n\t\t// Set the container to the position we registered at the beginning\n\t\tcontainer.scrollTop = scrollTop;\n\t}\n\treturn newHeight;\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(element.ownerDocument.defaultView),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\tvar done = false;\n\ttry {\n\t\twindow.localStorage.setItem(\"tw5-password-\" + name,password);\n\t\tdone = true;\n\t} catch(e) {\n\t}\n\tif(!done) {\n\t\t$tw.savedPasswords = $tw.savedPasswords || Object.create(null);\n\t\t$tw.savedPasswords[name] = password;\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\tvar value;\n\ttry {\n\t\tvalue = window.localStorage.getItem(\"tw5-password-\" + name);\n\t} catch(e) {\n\t}\n\tif(value !== undefined) {\n\t\treturn value;\n\t} else {\n\t\treturn ($tw.savedPasswords || Object.create(null))[name] || \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n/*\nGet the computed styles applied to an element as an array of strings of individual CSS properties\n*/\nexports.getComputedStyles = function(domNode) {\n\tvar textAreaStyles = window.getComputedStyle(domNode,null),\n\t\tstyleDefs = [],\n\t\tname;\n\tfor(var t=0; t<textAreaStyles.length; t++) {\n\t\tname = textAreaStyles[t];\n\t\tstyleDefs.push(name + \": \" + textAreaStyles.getPropertyValue(name) + \";\");\n\t}\n\treturn styleDefs;\n};\n\n/*\nApply a set of styles passed as an array of strings of individual CSS properties\n*/\nexports.setStyles = function(domNode,styleDefs) {\n\tdomNode.style.cssText = styleDefs.join(\"\");\n};\n\n/*\nCopy the computed styles from a source element to a destination element\n*/\nexports.copyStyles = function(srcDomNode,dstDomNode) {\n\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\n};\n\n/*\nCopy plain text to the clipboard on browsers that support it\n*/\nexports.copyToClipboard = function(text,options) {\n\toptions = options || {};\n\tvar textArea = document.createElement(\"textarea\");\n\ttextArea.style.position = \"fixed\";\n\ttextArea.style.top = 0;\n\ttextArea.style.left = 0;\n\ttextArea.style.fontSize = \"12pt\";\n\ttextArea.style.width = \"2em\";\n\ttextArea.style.height = \"2em\";\n\ttextArea.style.padding = 0;\n\ttextArea.style.border = \"none\";\n\ttextArea.style.outline = \"none\";\n\ttextArea.style.boxShadow = \"none\";\n\ttextArea.style.background = \"transparent\";\n\ttextArea.value = text;\n\tdocument.body.appendChild(textArea);\n\ttextArea.select();\n\ttextArea.setSelectionRange(0,text.length);\n\tvar succeeded = false;\n\ttry {\n\t\tsucceeded = document.execCommand(\"copy\");\n\t} catch (err) {\n\t}\n\tif(!options.doNotNotify) {\n\t\t$tw.notifier.display(succeeded ? \"$:/language/Notifications/CopiedToClipboard/Succeeded\" : \"$:/language/Notifications/CopiedToClipboard/Failed\");\n\t}\n\tdocument.body.removeChild(textArea);\n};\n\nexports.getLocationPath = function() {\n\treturn window.location.toString().split(\"#\")[0];\n};\n\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/dragndrop.js": {
            "title": "$:/core/modules/utils/dom/dragndrop.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/dragndrop.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser data transfer utilities, used with the clipboard and drag and drop\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOptions:\n\ndomNode: dom node to make draggable\ndragImageType: \"pill\" or \"dom\"\ndragTiddlerFn: optional function to retrieve the title of tiddler to drag\ndragFilterFn: optional function to retreive the filter defining a list of tiddlers to drag\nwidget: widget to use as the contect for the filter\n*/\nexports.makeDraggable = function(options) {\n\tvar dragImageType = options.dragImageType || \"dom\",\n\t\tdragImage,\n\t\tdomNode = options.domNode;\n\t// Make the dom node draggable (not necessary for anchor tags)\n\tif((domNode.tagName || \"\").toLowerCase() !== \"a\") {\n\t\tdomNode.setAttribute(\"draggable\",\"true\");\t\t\n\t}\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragstart\", handlerFunction: function(event) {\n\t\t\tif(event.dataTransfer === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Collect the tiddlers being dragged\n\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t    \tstartActions = options.startActions;\n\t\t\tif(dragFilter) {\n\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t}\n\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t// Check that we've something to drag\n\t\t\tif(titles.length > 0 && event.target === domNode) {\n\t\t\t\t// Mark the drag in progress\n\t\t\t\t$tw.dragInProgress = domNode;\n\t\t\t\t// Set the dragging class on the element being dragged\n\t\t\t\t$tw.utils.addClass(event.target,\"tc-dragging\");\n\t\t\t\t// Invoke drag-start actions if given\n\t\t\t\tif(startActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(startActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Create the drag image elements\n\t\t\t\tdragImage = options.widget.document.createElement(\"div\");\n\t\t\t\tdragImage.className = \"tc-tiddler-dragger\";\n\t\t\t\tvar inner = options.widget.document.createElement(\"div\");\n\t\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\t\tinner.appendChild(options.widget.document.createTextNode(\n\t\t\t\t\ttitles.length === 1 ? \n\t\t\t\t\t\ttitles[0] :\n\t\t\t\t\t\ttitles.length + \" tiddlers\"\n\t\t\t\t));\n\t\t\t\tdragImage.appendChild(inner);\n\t\t\t\toptions.widget.document.body.appendChild(dragImage);\n\t\t\t\t// Set the data transfer properties\n\t\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t\t// Set up the image\n\t\t\t\tdataTransfer.effectAllowed = \"all\";\n\t\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\t\tif(dragImageType === \"pill\") {\n\t\t\t\t\t\tdataTransfer.setDragImage(dragImage.firstChild,-16,-16);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar r = domNode.getBoundingClientRect();\n\t\t\t\t\t\tdataTransfer.setDragImage(domNode,event.clientX-r.left,event.clientY-r.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set up the data transfer\n\t\t\t\tif(dataTransfer.clearData) {\n\t\t\t\t\tdataTransfer.clearData();\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tvar jsonData = [];\n\t\t\t\tif(titles.length > 1) {\n\t\t\t\t\ttitles.forEach(function(title) {\n\t\t\t\t\t\tjsonData.push(options.widget.wiki.getTiddlerAsJson(title));\n\t\t\t\t\t});\n\t\t\t\t\tjsonData = \"[\" + jsonData.join(\",\") + \"]\";\n\t\t\t\t} else {\n\t\t\t\t\tjsonData = options.widget.wiki.getTiddlerAsJson(titles[0]);\n\t\t\t\t}\n\t\t\t\t// IE doesn't like these content types\n\t\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\t\tdataTransfer.setData(\"text/plain\",titleString);\n\t\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\t}\n\t\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\tdataTransfer.setData(\"Text\",titleString);\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn false;\n\t\t}},\n\t\t{name: \"dragend\", handlerFunction: function(event) {\n\t\t\tif(event.target === domNode) {\n\t\t\t\t// Collect the tiddlers being dragged\n\t\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t    \t\tendActions = options.endActions;\n\t\t\t\tif(dragFilter) {\n\t\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t\t}\n\t\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t\t$tw.dragInProgress = null;\n\t\t\t\t// Invoke drag-end actions if given\n\t\t\t\tif(endActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(endActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Remove the dragging class on the element being dragged\n\t\t\t\t$tw.utils.removeClass(event.target,\"tc-dragging\");\n\t\t\t\t// Delete the drag image element\n\t\t\t\tif(dragImage) {\n\t\t\t\t\tdragImage.parentNode.removeChild(dragImage);\n\t\t\t\t\tdragImage = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}}\n\t]);\n};\n\nexports.importDataTransfer = function(dataTransfer,fallbackTitle,callback) {\n\t// Try each provided data type in turn\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Available data types:\");\n\t\tfor(var type=0; type<dataTransfer.types.length; type++) {\n\t\t\tconsole.log(\"type\",dataTransfer.types[type],dataTransfer.getData(dataTransfer.types[type]))\n\t\t}\n\t}\n\tfor(var t=0; t<importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle);\n\t\t\t\tcallback(tiddlerFields);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn parseJSONTiddlers(data,fallbackTitle);\n\t}},\n\t{type: \"URL\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/plain\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"Text\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}}\n];\n\nfunction parseJSONTiddlers(json,fallbackTitle) {\n\tvar data = JSON.parse(json);\n\tif(!$tw.utils.isArray(data)) {\n\t\tdata = [data];\n\t}\n\tdata.forEach(function(fields) {\n\t\tfields.title = fields.title || fallbackTitle;\n\t});\n\treturn data;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/http.js": {
            "title": "$:/core/modules/utils/dom/http.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\theaders: hashmap of headers to send\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data,xhr)\n\treturnProp: string name of the property to return as first argument of callback\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\turl = options.url,\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\treturnProp = options.returnProp || \"responseText\",\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tif(type === \"GET\" || type === \"HEAD\") {\n\t\t\t\turl += \"?\" + results.join(\"&\");\n\t\t\t} else {\n\t\t\t\tdata = results.join(\"&\");\n\t\t\t}\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this[returnProp],this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback($tw.language.getString(\"Error/XMLHttpRequest\") + \": \" + this.status,null,this);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !$tw.utils.hop(headers,\"Content-type\")) {\n\t\trequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\tif(!$tw.utils.hop(headers,\"X-Requested-With\")) {\n\t\trequest.setRequestHeader(\"X-Requested-With\",\"TiddlyWiki\");\n\t}\n\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e,null,this);\n\t}\n\treturn request;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/keyboard.js": {
            "title": "$:/core/modules/utils/dom/keyboard.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities; now deprecated. Instead, use $tw.keyboardManager\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n[\"parseKeyDescriptor\",\"checkKeyDescriptor\"].forEach(function(method) {\n\texports[method] = function() {\n\t\tif($tw.keyboardManager) {\n\t\t\treturn $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t};\n});\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/modal.js": {
            "title": "$:/core/modules/utils/dom/modal.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tthis.srcDocument = options.variables && (options.variables.rootwindow === \"true\" ||\n\t\t\t\toptions.variables.rootwindow === \"yes\") ? document :\n\t\t\t\t(options.event.event && options.event.event.target ? options.event.event.target.ownerDocument : document);\n\tthis.srcWindow = this.srcDocument.defaultView;\n\tvar self = this,\n\t\trefreshHandler,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Create the wrapper divs\n\tvar wrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalBackdrop = this.srcDocument.createElement(\"div\"),\n\t\tmodalWrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalHeader = this.srcDocument.createElement(\"div\"),\n\t\theaderTitle = this.srcDocument.createElement(\"h3\"),\n\t\tmodalBody = this.srcDocument.createElement(\"div\"),\n\t\tmodalLink = this.srcDocument.createElement(\"a\"),\n\t\tmodalFooter = this.srcDocument.createElement(\"div\"),\n\t\tmodalFooterHelp = this.srcDocument.createElement(\"span\"),\n\t\tmodalFooterButtons = this.srcDocument.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\tif(tiddler.fields && tiddler.fields.class) {\n\t\t$tw.utils.addClass(wrapper,tiddler.fields.class);\n\t}\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tbodyWidgetNode.render(modalBody,null);\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(this.srcDocument.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler.fields && tiddler.fields.help) {\n\t\tvar link = this.srcDocument.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\t\tlink.appendChild(this.srcDocument.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: $tw.language.getString(\"Buttons/Close/Caption\")\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\t// Set up the refresh handler\n\trefreshHandler = function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Remove our refresh handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + self.srcWindow.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\tself.srcWindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tself.srcDocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-this.srcWindow.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tthis.srcDocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tvar windowContainer = $tw.pageContainer ? ($tw.pageContainer === this.srcDocument.body.firstChild ? $tw.pageContainer : this.srcDocument.body.firstChild) : null;\n\tif(windowContainer) {\n\t\t$tw.utils.toggleClass(windowContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/notifier.js": {
            "title": "$:/core/modules/utils/dom/notifier.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar self = this,\n\t\tnotification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\trefreshHandler;\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true});\n\twidgetNode.render(notification,null);\n\trefreshHandler = function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Remove our change event handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/popup.js": {
            "title": "$:/core/modules/utils/dom/popup.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned (one of domNode or domNodeRect is required)\n\tdomNodeRect: rectangle to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n\tfloating: if true, skips registering the popup, meaning that it will need manually clearing\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\n\t// Store the popup details if not already there\n\tif(!options.floating && this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode,\n\t\t\tnoStateReference: options.noStateReference\n\t\t});\n\t}\n\t// Set the state tiddler\n\tvar rect;\n\tif(options.domNodeRect) {\n\t\trect = options.domNodeRect;\n\t} else {\n\t\trect = {\n\t\t\tleft: options.domNode.offsetLeft,\n\t\t\ttop: options.domNode.offsetTop,\n\t\t\twidth: options.domNode.offsetWidth,\n\t\t\theight: options.domNode.offsetHeight\n\t\t};\n\t}\n\tvar popupRect = \"(\" + rect.left + \",\" + rect.top + \",\" + \n\t\t\t\trect.width + \",\" + rect.height + \")\";\n\tif(options.noStateReference) {\n\t\toptions.wiki.setText(options.title,\"text\",undefined,popupRect);\n\t} else {\n\t\toptions.wiki.setTextReference(options.title,popupRect);\n\t}\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\t\t\n\t}\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar popup = this.popups.pop();\n\t\tif(popup.title) {\n\t\t\tif(popup.noStateReference) {\n\t\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t\t} else {\n\t\t\t\tpopup.wiki.deleteTiddler($tw.utils.parseTextReference(popup.title).title);\n        \t\t}\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/scroller.js": {
            "title": "$:/core/modules/utils/dom/scroller.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.isScrolling = function() {\n\treturn this.idRequestFrame !== null;\n}\n\nPageScroller.prototype.cancelScroll = function(srcWindow) {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(srcWindow,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\treturn this.scrollIntoView(event.target);\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element,callback) {\n\tvar self = this,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t    srcWindow = element ? element.ownerDocument.defaultView : window;\n\t// Now get ready to scroll the body\n\tthis.cancelScroll(srcWindow);\n\tthis.startTime = Date.now();\n\t// Get the height of any position:fixed toolbars\n\tvar toolbar = srcWindow.document.querySelector(\".tc-adjust-top-of-scroll\"),\n\t\toffset = 0;\n\tif(toolbar) {\n\t\toffset = toolbar.offsetHeight;\n\t}\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar getBounds = function() {\n\t\t\tvar clientBounds = typeof callback === 'function' ? callback() : element.getBoundingClientRect(),\n\t\t\t\tscrollPosition = $tw.utils.getScrollPosition(srcWindow);\n\t\t\treturn {\n\t\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\t\ttop: clientBounds.top + scrollPosition.y - offset,\n\t\t\t\twidth: clientBounds.width,\n\t\t\t\theight: clientBounds.height\n\t\t\t};\n\t\t},\n\t\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t\t// targetPos/targetSize - position and size of the target element\n\t\t// currentPos/currentSize - position and size of the current scroll viewport\n\t\t// returns: new position of the scroll viewport\n\t\tgetEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = targetPos;\n\t\t\t// If we are scrolling within 50 pixels of the top/left then snap to zero\n\t\t\tif(newPos < 50) {\n\t\t\t\tnewPos = 0;\n\t\t\t}\n\t\t\treturn newPos;\n\t\t},\n\t\tdrawFrame = function drawFrame() {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll(srcWindow);\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tvar scrollPosition = $tw.utils.getScrollPosition(srcWindow),\n\t\t\t\tbounds = getBounds(),\n\t\t\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,srcWindow.innerWidth),\n\t\t\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,srcWindow.innerHeight);\n\t\t\tsrcWindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\tdrawFrame();\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/edition-info.js": {
            "title": "$:/core/modules/utils/edition-info.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/edition-info.js\ntype: application/javascript\nmodule-type: utils-node\n\nInformation about the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\nvar editionInfo;\n\nexports.getEditionInfo = function() {\n\tif(!editionInfo) {\n\t\t// Enumerate the edition paths\n\t\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\n\t\teditionInfo = {};\n\t\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\t\tvar editionPath = editionPaths[editionIndex];\n\t\t\t// Enumerate the folders\n\t\t\tvar entries = fs.readdirSync(editionPath);\n\t\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\t\tvar entry = entries[entryIndex];\n\t\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\t\tif(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\t\tvar info;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t\t} catch(ex) {\n\t\t\t\t\t}\n\t\t\t\t\tif(info) {\n\t\t\t\t\t\teditionInfo[entry] = info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn editionInfo;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils-node"
        },
        "$:/core/modules/utils/fakedom.js": {
            "title": "$:/core/modules/utils/fakedom.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text + \"\";\n};\n\nObject.defineProperty(TW_TextNode.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis._style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nObject.defineProperty(TW_Element.prototype, \"style\", {\n\tget: function() {\n\t\treturn this._style;\n\t},\n\tset: function(str) {\n\t\tvar self = this;\n\t\tstr = str || \"\";\n\t\t$tw.utils.each(str.split(\";\"),function(declaration) {\n\t\t\tvar parts = declaration.split(\":\"),\n\t\t\t\tname = $tw.utils.trim(parts[0]),\n\t\t\t\tvalue = $tw.utils.trim(parts[1]);\n\t\t\tif(name && value) {\n\t\t\t\tself._style[$tw.utils.convertStyleNameToPropertyName(name)] = value;\n\t\t\t}\n\t\t});\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value + \"\";\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this._style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this._style) {\n\t\t\t\tstyle.push($tw.utils.convertPropertyNameToStyleName(s) + \":\" + this._style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style=\\\"\",style.join(\"\"),\"\\\"\");\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t\tthis.rawTextContent = null;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textInnerHTML\", {\n\tset: function(value) {\n\t\tif(this.isRaw) {\n\t\t\tthis.rawTextContent = value;\n\t\t} else {\n\t\t\tthrow \"Cannot set textInnerHTML of a non-raw TW_Element\";\n\t\t}\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tif(this.rawTextContent === null) {\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\treturn this.rawTextContent;\n\t\t\t}\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/utils/filesystem.js": {
            "title": "$:/core/modules/utils/filesystem.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = $tw.utils.removeTrailingSeparator(srcPath);\n\tdstPath = $tw.utils.removeTrailingSeparator(dstPath);\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = Buffer.alloc(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n/*\nRecursively delete a tree of empty directories\n*/\nexports.deleteEmptyDirs = function(dirpath,callback) {\n\tvar self = this;\n\tfs.readdir(dirpath,function(err,files) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tif(files.length > 0) {\n\t\t\treturn callback(null);\n\t\t}\n\t\tfs.rmdir(dirpath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\n\t\t});\n\t});\n};\n\n/*\nCreate a fileInfo object for saving a tiddler:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\nOptions include:\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters\n*/\nexports.generateTiddlerFileInfo = function(tiddler,options) {\n\tvar fileInfo = {};\n\t// Check if the tiddler has any unsafe fields that can't be expressed in a .tid or .meta file: containing control characters, or leading/trailing whitespace\n\tvar hasUnsafeFields = false;\n\t$tw.utils.each(tiddler.getFieldStrings(),function(value,fieldName) {\n\t\tif(fieldName !== \"text\") {\n\t\t\thasUnsafeFields = hasUnsafeFields || /[\\x00-\\x1F]/mg.test(value);\n\t\t\thasUnsafeFields = hasUnsafeFields || ($tw.utils.trim(value) !== value);\n\t\t}\n\t});\n\t// Check for field values \n\tif(hasUnsafeFields) {\n\t\t// Save as a JSON file\n\t\tfileInfo.type = \"application/json\";\n\t\tfileInfo.hasMetaFile = false;\n\t} else {\n\t\t// Save as a .tid or a text/binary file plus a .meta file\n\t\tvar tiddlerType = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\tif(tiddlerType === \"text/vnd.tiddlywiki\") {\n\t\t\t// Save as a .tid file\n\t\t\tfileInfo.type = \"application/x-tiddler\";\n\t\t\tfileInfo.hasMetaFile = false;\n\t\t} else {\n\t\t\t// Save as a text/binary file and a .meta file\n\t\t\tfileInfo.type = tiddlerType;\n\t\t\tfileInfo.hasMetaFile = true;\n\t\t}\n\t}\n\t// Take the file extension from the tiddler content type\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[fileInfo.type] || {extension: \"\"};\n\t// Generate the filepath\n\tfileInfo.filepath = $tw.utils.generateTiddlerFilepath(tiddler.fields.title,{\n\t\textension: contentTypeInfo.extension,\n\t\tdirectory: options.directory,\n\t\tpathFilters: options.pathFilters,\n\t\twiki: options.wiki\n\t});\n\treturn fileInfo;\n};\n\n/*\nGenerate the filepath for saving a tiddler\nOptions include:\n\textension: file extension to be added the finished filepath\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters\n*/\nexports.generateTiddlerFilepath = function(title,options) {\n\tvar self = this,\n\t\tdirectory = options.directory || \"\",\n\t\textension = options.extension || \"\",\n\t\tfilepath;\n\t// Check if any of the pathFilters applies\n\tif(options.pathFilters && options.wiki) {\n\t\t$tw.utils.each(options.pathFilters,function(filter) {\n\t\t\tif(!filepath) {\n\t\t\t\tvar source = options.wiki.makeTiddlerIterator([title]),\n\t\t\t\t\tresult = options.wiki.filterTiddlers(filter,null,source);\n\t\t\t\tif(result.length > 0) {\n\t\t\t\t\tfilepath = result[0];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// If not, generate a base pathname\n\tif(!filepath) {\n\t\tfilepath = title;\n\t\t// If the filepath already ends in the extension then remove it\n\t\tif(filepath.substring(filepath.length - extension.length) === extension) {\n\t\t\tfilepath = filepath.substring(0,filepath.length - extension.length);\n\t\t}\n\t\t// Remove any forward or backward slashes so we don't create directories\n\t\tfilepath = filepath.replace(/\\/|\\\\/g,\"_\");\n\t}\n\t// Don't let the filename start with a dot because such files are invisible on *nix\n\tfilepath = filepath.replace(/^\\./g,\"_\");\n\t// Remove any characters that can't be used in cross-platform filenames\n\tfilepath = $tw.utils.transliterate(filepath.replace(/<|>|\\:|\\\"|\\||\\?|\\*|\\^/g,\"_\"));\n\t// Truncate the filename if it is too long\n\tif(filepath.length > 200) {\n\t\tfilepath = filepath.substr(0,200);\n\t}\n\t// If the resulting filename is blank (eg because the title is just punctuation characters)\n\tif(!filepath) {\n\t\t// ...then just use the character codes of the title\n\t\tfilepath = \"\";\t\n\t\t$tw.utils.each(title.split(\"\"),function(char) {\n\t\t\tif(filepath) {\n\t\t\t\tfilepath += \"-\";\n\t\t\t}\n\t\t\tfilepath += char.charCodeAt(0).toString();\n\t\t});\n\t}\n\t// Add a uniquifier if the file already exists\n\tvar fullPath,\n\t\tcount = 0;\n\tdo {\n\t\tfullPath = path.resolve(directory,filepath + (count ? \"_\" + count : \"\") + extension);\n\t\tcount++;\n\t} while(fs.existsSync(fullPath));\n\t// Return the full path to the file\n\treturn fullPath;\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFile = function(tiddler,fileInfo,callback) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFile(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tfs.writeFile(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\",callback);\n\t\t});\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFile(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\",callback);\n\t\t} else {\n\t\t\tfs.writeFile(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\",callback);\n\t\t}\n\t}\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFileSync = function(tiddler,fileInfo) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFileSync(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding);\n\t\tfs.writeFileSync(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\");\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFileSync(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\");\n\t\t} else {\n\t\t\tfs.writeFileSync(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t}\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils-node"
        },
        "$:/core/modules/utils/logger.js": {
            "title": "$:/core/modules/utils/logger.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName,options) {\n\toptions = options || {};\n\tthis.componentName = componentName || \"\";\n\tthis.colour = options.colour || \"white\";\n\tthis.enable = \"enable\" in options ? options.enable : true;\n\tthis.save = \"save\" in options ? options.save : true;\n\tthis.saveLimit = options.saveLimit || 100 * 1024;\n\tthis.saveBufferLogger = this;\n\tthis.buffer = \"\";\n\tthis.alertCount = 0;\n}\n\nLogger.prototype.setSaveBuffer = function(logger) {\n\tthis.saveBufferLogger = logger;\n};\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tvar self = this;\n\tif(this.enable) {\n\t\tif(this.saveBufferLogger.save) {\n\t\t\tthis.saveBufferLogger.buffer += $tw.utils.formatDateString(new Date(),\"YYYY MM DD 0hh:0mm:0ss.0XXX\") + \":\";\n\t\t\t$tw.utils.each(Array.prototype.slice.call(arguments,0),function(arg,index) {\n\t\t\t\tself.saveBufferLogger.buffer += \" \" + arg;\n\t\t\t});\n\t\t\tthis.saveBufferLogger.buffer += \"\\n\";\n\t\t\tthis.saveBufferLogger.buffer = this.saveBufferLogger.buffer.slice(-this.saveBufferLogger.saveLimit);\t\t\t\n\t\t}\n\t\tif(console !== undefined && console.log !== undefined) {\n\t\t\treturn Function.apply.call(console.log, console, [$tw.utils.terminalColour(this.colour),this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)).concat($tw.utils.terminalColour()));\n\t\t}\n\t} \n};\n\n/*\nRead the message buffer\n*/\nLogger.prototype.getBuffer = function() {\n\treturn this.saveBufferLogger.buffer;\n};\n\n/*\nLog a structure as a table\n*/\nLogger.prototype.table = function(value) {\n\t(console.table || console.log)(value);\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\tif(this.enable) {\n\t\t// Prepare the text of the alert\n\t\tvar text = Array.prototype.join.call(arguments,\" \");\n\t\t// Create alert tiddlers in the browser\n\t\tif($tw.browser) {\n\t\t\t// Check if there is an existing alert with the same text and the same component\n\t\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\t\talertFields,\n\t\t\t\texistingCount,\n\t\t\t\tself = this;\n\t\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(alertFields) {\n\t\t\t\texistingCount = alertFields.count || 1;\n\t\t\t} else {\n\t\t\t\talertFields = {\n\t\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\t\ttext: text,\n\t\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\t\tcomponent: this.componentName\n\t\t\t\t};\n\t\t\t\texistingCount = 0;\n\t\t\t\tthis.alertCount += 1;\n\t\t\t}\n\t\t\talertFields.modified = new Date();\n\t\t\tif(++existingCount > 1) {\n\t\t\t\talertFields.count = existingCount;\n\t\t\t} else {\n\t\t\t\talertFields.count = undefined;\n\t\t\t}\n\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t\t// Log the alert as well\n\t\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\t// Print an orange message to the console if not in the browser\n\t\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t\t}\t\t\n\t}\n};\n\n/*\nClear outstanding alerts\n*/\nLogger.prototype.clearAlerts = function() {\n\tvar self = this;\n\tif($tw.browser && this.alertCount > 0) {\n\t\t$tw.utils.each($tw.wiki.getTiddlersWithTag(ALERT_TAG),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(tiddler.fields.component === self.componentName) {\n\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t}\n\t\t});\n\t\tthis.alertCount = 0;\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/parsetree.js": {
            "title": "$:/core/modules/utils/parsetree.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/performance.js": {
            "title": "$:/core/modules/utils/performance.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap by measurement name of {time:, invocations:}\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n\tthis.showGreeting();\n}\n\nPerformance.prototype.showGreeting = function() {\n\tif($tw.browser) {\n\t\tthis.logger.log(\"Execute $tw.perf.log(); to see filter execution timings\");\t\t\n\t}\n};\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime).toFixed(2) + \"ms\");\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nPerformance.prototype.log = function() {\n\tvar self = this,\n\t\ttotalTime = 0,\n\t\torderedMeasures = Object.keys(this.measures).sort(function(a,b) {\n\t\t\tif(self.measures[a].time > self.measures[b].time) {\n\t\t\t\treturn -1;\n\t\t\t} else if (self.measures[a].time < self.measures[b].time) {\n\t\t\t\treturn + 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\ttotalTime += self.measures[name].time;\n\t});\n\tvar results = []\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\tvar measure = self.measures[name];\n\t\tresults.push({name: name,invocations: measure.invocations, avgTime: measure.time / measure.invocations, totalTime: measure.time, percentTime: (measure.time / totalTime) * 100})\n\t});\n\tself.logger.table(results);\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tif(!(name in self.measures)) {\n\t\t\t\tself.measures[name] = {time: 0, invocations: 0};\n\t\t\t}\n\t\t\tself.measures[name].time += $tw.utils.timer(startTime);\n\t\t\tself.measures[name].invocations++;\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/utils/pluginmaker.js": {
            "title": "$:/core/modules/utils/pluginmaker.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\n\" + $tw.language.getString(\"Error/Caption\") + \": \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/transliterate.js": {
            "title": "$:/core/modules/utils/transliterate.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/transliterate.js\ntype: application/javascript\nmodule-type: utils\n\nTransliteration static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nTransliterate string to ASCII\n\n(Some pairs taken from http://semplicewebsites.com/removing-accents-javascript)\n*/\nexports.transliterationPairs = {\n\t\"Á\":\"A\",\n\t\"Ă\":\"A\",\n\t\"Ắ\":\"A\",\n\t\"Ặ\":\"A\",\n\t\"Ằ\":\"A\",\n\t\"Ẳ\":\"A\",\n\t\"Ẵ\":\"A\",\n\t\"Ǎ\":\"A\",\n\t\"Â\":\"A\",\n\t\"Ấ\":\"A\",\n\t\"Ậ\":\"A\",\n\t\"Ầ\":\"A\",\n\t\"Ẩ\":\"A\",\n\t\"Ẫ\":\"A\",\n\t\"Ä\":\"A\",\n\t\"Ǟ\":\"A\",\n\t\"Ȧ\":\"A\",\n\t\"Ǡ\":\"A\",\n\t\"Ạ\":\"A\",\n\t\"Ȁ\":\"A\",\n\t\"À\":\"A\",\n\t\"Ả\":\"A\",\n\t\"Ȃ\":\"A\",\n\t\"Ā\":\"A\",\n\t\"Ą\":\"A\",\n\t\"Å\":\"A\",\n\t\"Ǻ\":\"A\",\n\t\"Ḁ\":\"A\",\n\t\"Ⱥ\":\"A\",\n\t\"Ã\":\"A\",\n\t\"Ꜳ\":\"AA\",\n\t\"Æ\":\"AE\",\n\t\"Ǽ\":\"AE\",\n\t\"Ǣ\":\"AE\",\n\t\"Ꜵ\":\"AO\",\n\t\"Ꜷ\":\"AU\",\n\t\"Ꜹ\":\"AV\",\n\t\"Ꜻ\":\"AV\",\n\t\"Ꜽ\":\"AY\",\n\t\"Ḃ\":\"B\",\n\t\"Ḅ\":\"B\",\n\t\"Ɓ\":\"B\",\n\t\"Ḇ\":\"B\",\n\t\"Ƀ\":\"B\",\n\t\"Ƃ\":\"B\",\n\t\"Ć\":\"C\",\n\t\"Č\":\"C\",\n\t\"Ç\":\"C\",\n\t\"Ḉ\":\"C\",\n\t\"Ĉ\":\"C\",\n\t\"Ċ\":\"C\",\n\t\"Ƈ\":\"C\",\n\t\"Ȼ\":\"C\",\n\t\"Ď\":\"D\",\n\t\"Ḑ\":\"D\",\n\t\"Ḓ\":\"D\",\n\t\"Ḋ\":\"D\",\n\t\"Ḍ\":\"D\",\n\t\"Ɗ\":\"D\",\n\t\"Ḏ\":\"D\",\n\t\"Dz\":\"D\",\n\t\"Dž\":\"D\",\n\t\"Đ\":\"D\",\n\t\"Ƌ\":\"D\",\n\t\"DZ\":\"DZ\",\n\t\"DŽ\":\"DZ\",\n\t\"É\":\"E\",\n\t\"Ĕ\":\"E\",\n\t\"Ě\":\"E\",\n\t\"Ȩ\":\"E\",\n\t\"Ḝ\":\"E\",\n\t\"Ê\":\"E\",\n\t\"Ế\":\"E\",\n\t\"Ệ\":\"E\",\n\t\"Ề\":\"E\",\n\t\"Ể\":\"E\",\n\t\"Ễ\":\"E\",\n\t\"Ḙ\":\"E\",\n\t\"Ë\":\"E\",\n\t\"Ė\":\"E\",\n\t\"Ẹ\":\"E\",\n\t\"Ȅ\":\"E\",\n\t\"È\":\"E\",\n\t\"Ẻ\":\"E\",\n\t\"Ȇ\":\"E\",\n\t\"Ē\":\"E\",\n\t\"Ḗ\":\"E\",\n\t\"Ḕ\":\"E\",\n\t\"Ę\":\"E\",\n\t\"Ɇ\":\"E\",\n\t\"Ẽ\":\"E\",\n\t\"Ḛ\":\"E\",\n\t\"Ꝫ\":\"ET\",\n\t\"Ḟ\":\"F\",\n\t\"Ƒ\":\"F\",\n\t\"Ǵ\":\"G\",\n\t\"Ğ\":\"G\",\n\t\"Ǧ\":\"G\",\n\t\"Ģ\":\"G\",\n\t\"Ĝ\":\"G\",\n\t\"Ġ\":\"G\",\n\t\"Ɠ\":\"G\",\n\t\"Ḡ\":\"G\",\n\t\"Ǥ\":\"G\",\n\t\"Ḫ\":\"H\",\n\t\"Ȟ\":\"H\",\n\t\"Ḩ\":\"H\",\n\t\"Ĥ\":\"H\",\n\t\"Ⱨ\":\"H\",\n\t\"Ḧ\":\"H\",\n\t\"Ḣ\":\"H\",\n\t\"Ḥ\":\"H\",\n\t\"Ħ\":\"H\",\n\t\"Í\":\"I\",\n\t\"Ĭ\":\"I\",\n\t\"Ǐ\":\"I\",\n\t\"Î\":\"I\",\n\t\"Ï\":\"I\",\n\t\"Ḯ\":\"I\",\n\t\"İ\":\"I\",\n\t\"Ị\":\"I\",\n\t\"Ȉ\":\"I\",\n\t\"Ì\":\"I\",\n\t\"Ỉ\":\"I\",\n\t\"Ȋ\":\"I\",\n\t\"Ī\":\"I\",\n\t\"Į\":\"I\",\n\t\"Ɨ\":\"I\",\n\t\"Ĩ\":\"I\",\n\t\"Ḭ\":\"I\",\n\t\"Ꝺ\":\"D\",\n\t\"Ꝼ\":\"F\",\n\t\"Ᵹ\":\"G\",\n\t\"Ꞃ\":\"R\",\n\t\"Ꞅ\":\"S\",\n\t\"Ꞇ\":\"T\",\n\t\"Ꝭ\":\"IS\",\n\t\"Ĵ\":\"J\",\n\t\"Ɉ\":\"J\",\n\t\"Ḱ\":\"K\",\n\t\"Ǩ\":\"K\",\n\t\"Ķ\":\"K\",\n\t\"Ⱪ\":\"K\",\n\t\"Ꝃ\":\"K\",\n\t\"Ḳ\":\"K\",\n\t\"Ƙ\":\"K\",\n\t\"Ḵ\":\"K\",\n\t\"Ꝁ\":\"K\",\n\t\"Ꝅ\":\"K\",\n\t\"Ĺ\":\"L\",\n\t\"Ƚ\":\"L\",\n\t\"Ľ\":\"L\",\n\t\"Ļ\":\"L\",\n\t\"Ḽ\":\"L\",\n\t\"Ḷ\":\"L\",\n\t\"Ḹ\":\"L\",\n\t\"Ⱡ\":\"L\",\n\t\"Ꝉ\":\"L\",\n\t\"Ḻ\":\"L\",\n\t\"Ŀ\":\"L\",\n\t\"Ɫ\":\"L\",\n\t\"Lj\":\"L\",\n\t\"Ł\":\"L\",\n\t\"LJ\":\"LJ\",\n\t\"Ḿ\":\"M\",\n\t\"Ṁ\":\"M\",\n\t\"Ṃ\":\"M\",\n\t\"Ɱ\":\"M\",\n\t\"Ń\":\"N\",\n\t\"Ň\":\"N\",\n\t\"Ņ\":\"N\",\n\t\"Ṋ\":\"N\",\n\t\"Ṅ\":\"N\",\n\t\"Ṇ\":\"N\",\n\t\"Ǹ\":\"N\",\n\t\"Ɲ\":\"N\",\n\t\"Ṉ\":\"N\",\n\t\"Ƞ\":\"N\",\n\t\"Nj\":\"N\",\n\t\"Ñ\":\"N\",\n\t\"NJ\":\"NJ\",\n\t\"Ó\":\"O\",\n\t\"Ŏ\":\"O\",\n\t\"Ǒ\":\"O\",\n\t\"Ô\":\"O\",\n\t\"Ố\":\"O\",\n\t\"Ộ\":\"O\",\n\t\"Ồ\":\"O\",\n\t\"Ổ\":\"O\",\n\t\"Ỗ\":\"O\",\n\t\"Ö\":\"O\",\n\t\"Ȫ\":\"O\",\n\t\"Ȯ\":\"O\",\n\t\"Ȱ\":\"O\",\n\t\"Ọ\":\"O\",\n\t\"Ő\":\"O\",\n\t\"Ȍ\":\"O\",\n\t\"Ò\":\"O\",\n\t\"Ỏ\":\"O\",\n\t\"Ơ\":\"O\",\n\t\"Ớ\":\"O\",\n\t\"Ợ\":\"O\",\n\t\"Ờ\":\"O\",\n\t\"Ở\":\"O\",\n\t\"Ỡ\":\"O\",\n\t\"Ȏ\":\"O\",\n\t\"Ꝋ\":\"O\",\n\t\"Ꝍ\":\"O\",\n\t\"Ō\":\"O\",\n\t\"Ṓ\":\"O\",\n\t\"Ṑ\":\"O\",\n\t\"Ɵ\":\"O\",\n\t\"Ǫ\":\"O\",\n\t\"Ǭ\":\"O\",\n\t\"Ø\":\"O\",\n\t\"Ǿ\":\"O\",\n\t\"Õ\":\"O\",\n\t\"Ṍ\":\"O\",\n\t\"Ṏ\":\"O\",\n\t\"Ȭ\":\"O\",\n\t\"Ƣ\":\"OI\",\n\t\"Ꝏ\":\"OO\",\n\t\"Ɛ\":\"E\",\n\t\"Ɔ\":\"O\",\n\t\"Ȣ\":\"OU\",\n\t\"Ṕ\":\"P\",\n\t\"Ṗ\":\"P\",\n\t\"Ꝓ\":\"P\",\n\t\"Ƥ\":\"P\",\n\t\"Ꝕ\":\"P\",\n\t\"Ᵽ\":\"P\",\n\t\"Ꝑ\":\"P\",\n\t\"Ꝙ\":\"Q\",\n\t\"Ꝗ\":\"Q\",\n\t\"Ŕ\":\"R\",\n\t\"Ř\":\"R\",\n\t\"Ŗ\":\"R\",\n\t\"Ṙ\":\"R\",\n\t\"Ṛ\":\"R\",\n\t\"Ṝ\":\"R\",\n\t\"Ȑ\":\"R\",\n\t\"Ȓ\":\"R\",\n\t\"Ṟ\":\"R\",\n\t\"Ɍ\":\"R\",\n\t\"Ɽ\":\"R\",\n\t\"Ꜿ\":\"C\",\n\t\"Ǝ\":\"E\",\n\t\"Ś\":\"S\",\n\t\"Ṥ\":\"S\",\n\t\"Š\":\"S\",\n\t\"Ṧ\":\"S\",\n\t\"Ş\":\"S\",\n\t\"Ŝ\":\"S\",\n\t\"Ș\":\"S\",\n\t\"Ṡ\":\"S\",\n\t\"Ṣ\":\"S\",\n\t\"Ṩ\":\"S\",\n\t\"Ť\":\"T\",\n\t\"Ţ\":\"T\",\n\t\"Ṱ\":\"T\",\n\t\"Ț\":\"T\",\n\t\"Ⱦ\":\"T\",\n\t\"Ṫ\":\"T\",\n\t\"Ṭ\":\"T\",\n\t\"Ƭ\":\"T\",\n\t\"Ṯ\":\"T\",\n\t\"Ʈ\":\"T\",\n\t\"Ŧ\":\"T\",\n\t\"Ɐ\":\"A\",\n\t\"Ꞁ\":\"L\",\n\t\"Ɯ\":\"M\",\n\t\"Ʌ\":\"V\",\n\t\"Ꜩ\":\"TZ\",\n\t\"Ú\":\"U\",\n\t\"Ŭ\":\"U\",\n\t\"Ǔ\":\"U\",\n\t\"Û\":\"U\",\n\t\"Ṷ\":\"U\",\n\t\"Ü\":\"U\",\n\t\"Ǘ\":\"U\",\n\t\"Ǚ\":\"U\",\n\t\"Ǜ\":\"U\",\n\t\"Ǖ\":\"U\",\n\t\"Ṳ\":\"U\",\n\t\"Ụ\":\"U\",\n\t\"Ű\":\"U\",\n\t\"Ȕ\":\"U\",\n\t\"Ù\":\"U\",\n\t\"Ủ\":\"U\",\n\t\"Ư\":\"U\",\n\t\"Ứ\":\"U\",\n\t\"Ự\":\"U\",\n\t\"Ừ\":\"U\",\n\t\"Ử\":\"U\",\n\t\"Ữ\":\"U\",\n\t\"Ȗ\":\"U\",\n\t\"Ū\":\"U\",\n\t\"Ṻ\":\"U\",\n\t\"Ų\":\"U\",\n\t\"Ů\":\"U\",\n\t\"Ũ\":\"U\",\n\t\"Ṹ\":\"U\",\n\t\"Ṵ\":\"U\",\n\t\"Ꝟ\":\"V\",\n\t\"Ṿ\":\"V\",\n\t\"Ʋ\":\"V\",\n\t\"Ṽ\":\"V\",\n\t\"Ꝡ\":\"VY\",\n\t\"Ẃ\":\"W\",\n\t\"Ŵ\":\"W\",\n\t\"Ẅ\":\"W\",\n\t\"Ẇ\":\"W\",\n\t\"Ẉ\":\"W\",\n\t\"Ẁ\":\"W\",\n\t\"Ⱳ\":\"W\",\n\t\"Ẍ\":\"X\",\n\t\"Ẋ\":\"X\",\n\t\"Ý\":\"Y\",\n\t\"Ŷ\":\"Y\",\n\t\"Ÿ\":\"Y\",\n\t\"Ẏ\":\"Y\",\n\t\"Ỵ\":\"Y\",\n\t\"Ỳ\":\"Y\",\n\t\"Ƴ\":\"Y\",\n\t\"Ỷ\":\"Y\",\n\t\"Ỿ\":\"Y\",\n\t\"Ȳ\":\"Y\",\n\t\"Ɏ\":\"Y\",\n\t\"Ỹ\":\"Y\",\n\t\"Ź\":\"Z\",\n\t\"Ž\":\"Z\",\n\t\"Ẑ\":\"Z\",\n\t\"Ⱬ\":\"Z\",\n\t\"Ż\":\"Z\",\n\t\"Ẓ\":\"Z\",\n\t\"Ȥ\":\"Z\",\n\t\"Ẕ\":\"Z\",\n\t\"Ƶ\":\"Z\",\n\t\"IJ\":\"IJ\",\n\t\"Œ\":\"OE\",\n\t\"ᴀ\":\"A\",\n\t\"ᴁ\":\"AE\",\n\t\"ʙ\":\"B\",\n\t\"ᴃ\":\"B\",\n\t\"ᴄ\":\"C\",\n\t\"ᴅ\":\"D\",\n\t\"ᴇ\":\"E\",\n\t\"ꜰ\":\"F\",\n\t\"ɢ\":\"G\",\n\t\"ʛ\":\"G\",\n\t\"ʜ\":\"H\",\n\t\"ɪ\":\"I\",\n\t\"ʁ\":\"R\",\n\t\"ᴊ\":\"J\",\n\t\"ᴋ\":\"K\",\n\t\"ʟ\":\"L\",\n\t\"ᴌ\":\"L\",\n\t\"ᴍ\":\"M\",\n\t\"ɴ\":\"N\",\n\t\"ᴏ\":\"O\",\n\t\"ɶ\":\"OE\",\n\t\"ᴐ\":\"O\",\n\t\"ᴕ\":\"OU\",\n\t\"ᴘ\":\"P\",\n\t\"ʀ\":\"R\",\n\t\"ᴎ\":\"N\",\n\t\"ᴙ\":\"R\",\n\t\"ꜱ\":\"S\",\n\t\"ᴛ\":\"T\",\n\t\"ⱻ\":\"E\",\n\t\"ᴚ\":\"R\",\n\t\"ᴜ\":\"U\",\n\t\"ᴠ\":\"V\",\n\t\"ᴡ\":\"W\",\n\t\"ʏ\":\"Y\",\n\t\"ᴢ\":\"Z\",\n\t\"á\":\"a\",\n\t\"ă\":\"a\",\n\t\"ắ\":\"a\",\n\t\"ặ\":\"a\",\n\t\"ằ\":\"a\",\n\t\"ẳ\":\"a\",\n\t\"ẵ\":\"a\",\n\t\"ǎ\":\"a\",\n\t\"â\":\"a\",\n\t\"ấ\":\"a\",\n\t\"ậ\":\"a\",\n\t\"ầ\":\"a\",\n\t\"ẩ\":\"a\",\n\t\"ẫ\":\"a\",\n\t\"ä\":\"a\",\n\t\"ǟ\":\"a\",\n\t\"ȧ\":\"a\",\n\t\"ǡ\":\"a\",\n\t\"ạ\":\"a\",\n\t\"ȁ\":\"a\",\n\t\"à\":\"a\",\n\t\"ả\":\"a\",\n\t\"ȃ\":\"a\",\n\t\"ā\":\"a\",\n\t\"ą\":\"a\",\n\t\"ᶏ\":\"a\",\n\t\"ẚ\":\"a\",\n\t\"å\":\"a\",\n\t\"ǻ\":\"a\",\n\t\"ḁ\":\"a\",\n\t\"ⱥ\":\"a\",\n\t\"ã\":\"a\",\n\t\"ꜳ\":\"aa\",\n\t\"æ\":\"ae\",\n\t\"ǽ\":\"ae\",\n\t\"ǣ\":\"ae\",\n\t\"ꜵ\":\"ao\",\n\t\"ꜷ\":\"au\",\n\t\"ꜹ\":\"av\",\n\t\"ꜻ\":\"av\",\n\t\"ꜽ\":\"ay\",\n\t\"ḃ\":\"b\",\n\t\"ḅ\":\"b\",\n\t\"ɓ\":\"b\",\n\t\"ḇ\":\"b\",\n\t\"ᵬ\":\"b\",\n\t\"ᶀ\":\"b\",\n\t\"ƀ\":\"b\",\n\t\"ƃ\":\"b\",\n\t\"ɵ\":\"o\",\n\t\"ć\":\"c\",\n\t\"č\":\"c\",\n\t\"ç\":\"c\",\n\t\"ḉ\":\"c\",\n\t\"ĉ\":\"c\",\n\t\"ɕ\":\"c\",\n\t\"ċ\":\"c\",\n\t\"ƈ\":\"c\",\n\t\"ȼ\":\"c\",\n\t\"ď\":\"d\",\n\t\"ḑ\":\"d\",\n\t\"ḓ\":\"d\",\n\t\"ȡ\":\"d\",\n\t\"ḋ\":\"d\",\n\t\"ḍ\":\"d\",\n\t\"ɗ\":\"d\",\n\t\"ᶑ\":\"d\",\n\t\"ḏ\":\"d\",\n\t\"ᵭ\":\"d\",\n\t\"ᶁ\":\"d\",\n\t\"đ\":\"d\",\n\t\"ɖ\":\"d\",\n\t\"ƌ\":\"d\",\n\t\"ı\":\"i\",\n\t\"ȷ\":\"j\",\n\t\"ɟ\":\"j\",\n\t\"ʄ\":\"j\",\n\t\"dz\":\"dz\",\n\t\"dž\":\"dz\",\n\t\"é\":\"e\",\n\t\"ĕ\":\"e\",\n\t\"ě\":\"e\",\n\t\"ȩ\":\"e\",\n\t\"ḝ\":\"e\",\n\t\"ê\":\"e\",\n\t\"ế\":\"e\",\n\t\"ệ\":\"e\",\n\t\"ề\":\"e\",\n\t\"ể\":\"e\",\n\t\"ễ\":\"e\",\n\t\"ḙ\":\"e\",\n\t\"ë\":\"e\",\n\t\"ė\":\"e\",\n\t\"ẹ\":\"e\",\n\t\"ȅ\":\"e\",\n\t\"è\":\"e\",\n\t\"ẻ\":\"e\",\n\t\"ȇ\":\"e\",\n\t\"ē\":\"e\",\n\t\"ḗ\":\"e\",\n\t\"ḕ\":\"e\",\n\t\"ⱸ\":\"e\",\n\t\"ę\":\"e\",\n\t\"ᶒ\":\"e\",\n\t\"ɇ\":\"e\",\n\t\"ẽ\":\"e\",\n\t\"ḛ\":\"e\",\n\t\"ꝫ\":\"et\",\n\t\"ḟ\":\"f\",\n\t\"ƒ\":\"f\",\n\t\"ᵮ\":\"f\",\n\t\"ᶂ\":\"f\",\n\t\"ǵ\":\"g\",\n\t\"ğ\":\"g\",\n\t\"ǧ\":\"g\",\n\t\"ģ\":\"g\",\n\t\"ĝ\":\"g\",\n\t\"ġ\":\"g\",\n\t\"ɠ\":\"g\",\n\t\"ḡ\":\"g\",\n\t\"ᶃ\":\"g\",\n\t\"ǥ\":\"g\",\n\t\"ḫ\":\"h\",\n\t\"ȟ\":\"h\",\n\t\"ḩ\":\"h\",\n\t\"ĥ\":\"h\",\n\t\"ⱨ\":\"h\",\n\t\"ḧ\":\"h\",\n\t\"ḣ\":\"h\",\n\t\"ḥ\":\"h\",\n\t\"ɦ\":\"h\",\n\t\"ẖ\":\"h\",\n\t\"ħ\":\"h\",\n\t\"ƕ\":\"hv\",\n\t\"í\":\"i\",\n\t\"ĭ\":\"i\",\n\t\"ǐ\":\"i\",\n\t\"î\":\"i\",\n\t\"ï\":\"i\",\n\t\"ḯ\":\"i\",\n\t\"ị\":\"i\",\n\t\"ȉ\":\"i\",\n\t\"ì\":\"i\",\n\t\"ỉ\":\"i\",\n\t\"ȋ\":\"i\",\n\t\"ī\":\"i\",\n\t\"į\":\"i\",\n\t\"ᶖ\":\"i\",\n\t\"ɨ\":\"i\",\n\t\"ĩ\":\"i\",\n\t\"ḭ\":\"i\",\n\t\"ꝺ\":\"d\",\n\t\"ꝼ\":\"f\",\n\t\"ᵹ\":\"g\",\n\t\"ꞃ\":\"r\",\n\t\"ꞅ\":\"s\",\n\t\"ꞇ\":\"t\",\n\t\"ꝭ\":\"is\",\n\t\"ǰ\":\"j\",\n\t\"ĵ\":\"j\",\n\t\"ʝ\":\"j\",\n\t\"ɉ\":\"j\",\n\t\"ḱ\":\"k\",\n\t\"ǩ\":\"k\",\n\t\"ķ\":\"k\",\n\t\"ⱪ\":\"k\",\n\t\"ꝃ\":\"k\",\n\t\"ḳ\":\"k\",\n\t\"ƙ\":\"k\",\n\t\"ḵ\":\"k\",\n\t\"ᶄ\":\"k\",\n\t\"ꝁ\":\"k\",\n\t\"ꝅ\":\"k\",\n\t\"ĺ\":\"l\",\n\t\"ƚ\":\"l\",\n\t\"ɬ\":\"l\",\n\t\"ľ\":\"l\",\n\t\"ļ\":\"l\",\n\t\"ḽ\":\"l\",\n\t\"ȴ\":\"l\",\n\t\"ḷ\":\"l\",\n\t\"ḹ\":\"l\",\n\t\"ⱡ\":\"l\",\n\t\"ꝉ\":\"l\",\n\t\"ḻ\":\"l\",\n\t\"ŀ\":\"l\",\n\t\"ɫ\":\"l\",\n\t\"ᶅ\":\"l\",\n\t\"ɭ\":\"l\",\n\t\"ł\":\"l\",\n\t\"lj\":\"lj\",\n\t\"ſ\":\"s\",\n\t\"ẜ\":\"s\",\n\t\"ẛ\":\"s\",\n\t\"ẝ\":\"s\",\n\t\"ḿ\":\"m\",\n\t\"ṁ\":\"m\",\n\t\"ṃ\":\"m\",\n\t\"ɱ\":\"m\",\n\t\"ᵯ\":\"m\",\n\t\"ᶆ\":\"m\",\n\t\"ń\":\"n\",\n\t\"ň\":\"n\",\n\t\"ņ\":\"n\",\n\t\"ṋ\":\"n\",\n\t\"ȵ\":\"n\",\n\t\"ṅ\":\"n\",\n\t\"ṇ\":\"n\",\n\t\"ǹ\":\"n\",\n\t\"ɲ\":\"n\",\n\t\"ṉ\":\"n\",\n\t\"ƞ\":\"n\",\n\t\"ᵰ\":\"n\",\n\t\"ᶇ\":\"n\",\n\t\"ɳ\":\"n\",\n\t\"ñ\":\"n\",\n\t\"nj\":\"nj\",\n\t\"ó\":\"o\",\n\t\"ŏ\":\"o\",\n\t\"ǒ\":\"o\",\n\t\"ô\":\"o\",\n\t\"ố\":\"o\",\n\t\"ộ\":\"o\",\n\t\"ồ\":\"o\",\n\t\"ổ\":\"o\",\n\t\"ỗ\":\"o\",\n\t\"ö\":\"o\",\n\t\"ȫ\":\"o\",\n\t\"ȯ\":\"o\",\n\t\"ȱ\":\"o\",\n\t\"ọ\":\"o\",\n\t\"ő\":\"o\",\n\t\"ȍ\":\"o\",\n\t\"ò\":\"o\",\n\t\"ỏ\":\"o\",\n\t\"ơ\":\"o\",\n\t\"ớ\":\"o\",\n\t\"ợ\":\"o\",\n\t\"ờ\":\"o\",\n\t\"ở\":\"o\",\n\t\"ỡ\":\"o\",\n\t\"ȏ\":\"o\",\n\t\"ꝋ\":\"o\",\n\t\"ꝍ\":\"o\",\n\t\"ⱺ\":\"o\",\n\t\"ō\":\"o\",\n\t\"ṓ\":\"o\",\n\t\"ṑ\":\"o\",\n\t\"ǫ\":\"o\",\n\t\"ǭ\":\"o\",\n\t\"ø\":\"o\",\n\t\"ǿ\":\"o\",\n\t\"õ\":\"o\",\n\t\"ṍ\":\"o\",\n\t\"ṏ\":\"o\",\n\t\"ȭ\":\"o\",\n\t\"ƣ\":\"oi\",\n\t\"ꝏ\":\"oo\",\n\t\"ɛ\":\"e\",\n\t\"ᶓ\":\"e\",\n\t\"ɔ\":\"o\",\n\t\"ᶗ\":\"o\",\n\t\"ȣ\":\"ou\",\n\t\"ṕ\":\"p\",\n\t\"ṗ\":\"p\",\n\t\"ꝓ\":\"p\",\n\t\"ƥ\":\"p\",\n\t\"ᵱ\":\"p\",\n\t\"ᶈ\":\"p\",\n\t\"ꝕ\":\"p\",\n\t\"ᵽ\":\"p\",\n\t\"ꝑ\":\"p\",\n\t\"ꝙ\":\"q\",\n\t\"ʠ\":\"q\",\n\t\"ɋ\":\"q\",\n\t\"ꝗ\":\"q\",\n\t\"ŕ\":\"r\",\n\t\"ř\":\"r\",\n\t\"ŗ\":\"r\",\n\t\"ṙ\":\"r\",\n\t\"ṛ\":\"r\",\n\t\"ṝ\":\"r\",\n\t\"ȑ\":\"r\",\n\t\"ɾ\":\"r\",\n\t\"ᵳ\":\"r\",\n\t\"ȓ\":\"r\",\n\t\"ṟ\":\"r\",\n\t\"ɼ\":\"r\",\n\t\"ᵲ\":\"r\",\n\t\"ᶉ\":\"r\",\n\t\"ɍ\":\"r\",\n\t\"ɽ\":\"r\",\n\t\"ↄ\":\"c\",\n\t\"ꜿ\":\"c\",\n\t\"ɘ\":\"e\",\n\t\"ɿ\":\"r\",\n\t\"ś\":\"s\",\n\t\"ṥ\":\"s\",\n\t\"š\":\"s\",\n\t\"ṧ\":\"s\",\n\t\"ş\":\"s\",\n\t\"ŝ\":\"s\",\n\t\"ș\":\"s\",\n\t\"ṡ\":\"s\",\n\t\"ṣ\":\"s\",\n\t\"ṩ\":\"s\",\n\t\"ʂ\":\"s\",\n\t\"ᵴ\":\"s\",\n\t\"ᶊ\":\"s\",\n\t\"ȿ\":\"s\",\n\t\"ɡ\":\"g\",\n\t\"ᴑ\":\"o\",\n\t\"ᴓ\":\"o\",\n\t\"ᴝ\":\"u\",\n\t\"ť\":\"t\",\n\t\"ţ\":\"t\",\n\t\"ṱ\":\"t\",\n\t\"ț\":\"t\",\n\t\"ȶ\":\"t\",\n\t\"ẗ\":\"t\",\n\t\"ⱦ\":\"t\",\n\t\"ṫ\":\"t\",\n\t\"ṭ\":\"t\",\n\t\"ƭ\":\"t\",\n\t\"ṯ\":\"t\",\n\t\"ᵵ\":\"t\",\n\t\"ƫ\":\"t\",\n\t\"ʈ\":\"t\",\n\t\"ŧ\":\"t\",\n\t\"ᵺ\":\"th\",\n\t\"ɐ\":\"a\",\n\t\"ᴂ\":\"ae\",\n\t\"ǝ\":\"e\",\n\t\"ᵷ\":\"g\",\n\t\"ɥ\":\"h\",\n\t\"ʮ\":\"h\",\n\t\"ʯ\":\"h\",\n\t\"ᴉ\":\"i\",\n\t\"ʞ\":\"k\",\n\t\"ꞁ\":\"l\",\n\t\"ɯ\":\"m\",\n\t\"ɰ\":\"m\",\n\t\"ᴔ\":\"oe\",\n\t\"ɹ\":\"r\",\n\t\"ɻ\":\"r\",\n\t\"ɺ\":\"r\",\n\t\"ⱹ\":\"r\",\n\t\"ʇ\":\"t\",\n\t\"ʌ\":\"v\",\n\t\"ʍ\":\"w\",\n\t\"ʎ\":\"y\",\n\t\"ꜩ\":\"tz\",\n\t\"ú\":\"u\",\n\t\"ŭ\":\"u\",\n\t\"ǔ\":\"u\",\n\t\"û\":\"u\",\n\t\"ṷ\":\"u\",\n\t\"ü\":\"u\",\n\t\"ǘ\":\"u\",\n\t\"ǚ\":\"u\",\n\t\"ǜ\":\"u\",\n\t\"ǖ\":\"u\",\n\t\"ṳ\":\"u\",\n\t\"ụ\":\"u\",\n\t\"ű\":\"u\",\n\t\"ȕ\":\"u\",\n\t\"ù\":\"u\",\n\t\"ủ\":\"u\",\n\t\"ư\":\"u\",\n\t\"ứ\":\"u\",\n\t\"ự\":\"u\",\n\t\"ừ\":\"u\",\n\t\"ử\":\"u\",\n\t\"ữ\":\"u\",\n\t\"ȗ\":\"u\",\n\t\"ū\":\"u\",\n\t\"ṻ\":\"u\",\n\t\"ų\":\"u\",\n\t\"ᶙ\":\"u\",\n\t\"ů\":\"u\",\n\t\"ũ\":\"u\",\n\t\"ṹ\":\"u\",\n\t\"ṵ\":\"u\",\n\t\"ᵫ\":\"ue\",\n\t\"ꝸ\":\"um\",\n\t\"ⱴ\":\"v\",\n\t\"ꝟ\":\"v\",\n\t\"ṿ\":\"v\",\n\t\"ʋ\":\"v\",\n\t\"ᶌ\":\"v\",\n\t\"ⱱ\":\"v\",\n\t\"ṽ\":\"v\",\n\t\"ꝡ\":\"vy\",\n\t\"ẃ\":\"w\",\n\t\"ŵ\":\"w\",\n\t\"ẅ\":\"w\",\n\t\"ẇ\":\"w\",\n\t\"ẉ\":\"w\",\n\t\"ẁ\":\"w\",\n\t\"ⱳ\":\"w\",\n\t\"ẘ\":\"w\",\n\t\"ẍ\":\"x\",\n\t\"ẋ\":\"x\",\n\t\"ᶍ\":\"x\",\n\t\"ý\":\"y\",\n\t\"ŷ\":\"y\",\n\t\"ÿ\":\"y\",\n\t\"ẏ\":\"y\",\n\t\"ỵ\":\"y\",\n\t\"ỳ\":\"y\",\n\t\"ƴ\":\"y\",\n\t\"ỷ\":\"y\",\n\t\"ỿ\":\"y\",\n\t\"ȳ\":\"y\",\n\t\"ẙ\":\"y\",\n\t\"ɏ\":\"y\",\n\t\"ỹ\":\"y\",\n\t\"ź\":\"z\",\n\t\"ž\":\"z\",\n\t\"ẑ\":\"z\",\n\t\"ʑ\":\"z\",\n\t\"ⱬ\":\"z\",\n\t\"ż\":\"z\",\n\t\"ẓ\":\"z\",\n\t\"ȥ\":\"z\",\n\t\"ẕ\":\"z\",\n\t\"ᵶ\":\"z\",\n\t\"ᶎ\":\"z\",\n\t\"ʐ\":\"z\",\n\t\"ƶ\":\"z\",\n\t\"ɀ\":\"z\",\n\t\"ff\":\"ff\",\n\t\"ffi\":\"ffi\",\n\t\"ffl\":\"ffl\",\n\t\"fi\":\"fi\",\n\t\"fl\":\"fl\",\n\t\"ij\":\"ij\",\n\t\"œ\":\"oe\",\n\t\"st\":\"st\",\n\t\"ₐ\":\"a\",\n\t\"ₑ\":\"e\",\n\t\"ᵢ\":\"i\",\n\t\"ⱼ\":\"j\",\n\t\"ₒ\":\"o\",\n\t\"ᵣ\":\"r\",\n\t\"ᵤ\":\"u\",\n\t\"ᵥ\":\"v\",\n\t\"ₓ\":\"x\",\n\t\"Ё\":\"YO\",\n\t\"Й\":\"I\",\n\t\"Ц\":\"TS\",\n\t\"У\":\"U\",\n\t\"К\":\"K\",\n\t\"Е\":\"E\",\n\t\"Н\":\"N\",\n\t\"Г\":\"G\",\n\t\"Ш\":\"SH\",\n\t\"Щ\":\"SCH\",\n\t\"З\":\"Z\",\n\t\"Х\":\"H\",\n\t\"Ъ\":\"'\",\n\t\"ё\":\"yo\",\n\t\"й\":\"i\",\n\t\"ц\":\"ts\",\n\t\"у\":\"u\",\n\t\"к\":\"k\",\n\t\"е\":\"e\",\n\t\"н\":\"n\",\n\t\"г\":\"g\",\n\t\"ш\":\"sh\",\n\t\"щ\":\"sch\",\n\t\"з\":\"z\",\n\t\"х\":\"h\",\n\t\"ъ\":\"'\",\n\t\"Ф\":\"F\",\n\t\"Ы\":\"I\",\n\t\"В\":\"V\",\n\t\"А\":\"a\",\n\t\"П\":\"P\",\n\t\"Р\":\"R\",\n\t\"О\":\"O\",\n\t\"Л\":\"L\",\n\t\"Д\":\"D\",\n\t\"Ж\":\"ZH\",\n\t\"Э\":\"E\",\n\t\"ф\":\"f\",\n\t\"ы\":\"i\",\n\t\"в\":\"v\",\n\t\"а\":\"a\",\n\t\"п\":\"p\",\n\t\"р\":\"r\",\n\t\"о\":\"o\",\n\t\"л\":\"l\",\n\t\"д\":\"d\",\n\t\"ж\":\"zh\",\n\t\"э\":\"e\",\n\t\"Я\":\"Ya\",\n\t\"Ч\":\"CH\",\n\t\"С\":\"S\",\n\t\"М\":\"M\",\n\t\"И\":\"I\",\n\t\"Т\":\"T\",\n\t\"Ь\":\"'\",\n\t\"Б\":\"B\",\n\t\"Ю\":\"YU\",\n\t\"я\":\"ya\",\n\t\"ч\":\"ch\",\n\t\"с\":\"s\",\n\t\"м\":\"m\",\n\t\"и\":\"i\",\n\t\"т\":\"t\",\n\t\"ь\":\"'\",\n\t\"б\":\"b\",\n\t\"ю\":\"yu\"\n};\n\nexports.transliterate = function(str) {\n\treturn str.replace(/[^A-Za-z0-9\\[\\] ]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || ch\n\t});\n};\n\nexports.transliterateToSafeASCII = function(str) {\n\treturn str.replace(/[^\\x00-\\x7F]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || \"\"\n\t});\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/utils.js": {
            "title": "$:/core/modules/utils/utils.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar base64utf8 = require(\"$:/core/modules/utils/base64-utf8/base64-utf8.module.js\");\n\n/*\nDisplay a message, in colour if we're on a terminal\n*/\nexports.log = function(text,colour) {\n\tconsole.log($tw.node ? exports.terminalColour(colour) + text + exports.terminalColour() : text);\n};\n\nexports.terminalColour = function(colour) {\n\tif(!$tw.browser && $tw.node && process.stdout.isTTY) {\n\t\tif(colour) {\n\t\t\tvar code = exports.terminalColourLookup[colour];\n\t\t\tif(code) {\n\t\t\t\treturn \"\\x1b[\" + code + \"m\";\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"\\x1b[0m\"; // Cancel colour\n\t\t}\n\t}\n\treturn \"\";\n};\n\nexports.terminalColourLookup = {\n\t\"black\": \"0;30\",\n\t\"red\": \"0;31\",\n\t\"green\": \"0;32\",\n\t\"brown/orange\": \"0;33\",\n\t\"blue\": \"0;34\",\n\t\"purple\": \"0;35\",\n\t\"cyan\": \"0;36\",\n\t\"light gray\": \"0;37\"\n};\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\texports.log(text,\"brown/orange\");\n};\n\n/*\nReturn the integer represented by the str (string).\nReturn the dflt (default) parameter if str is not a base-10 number.\n*/\nexports.getInt = function(str,deflt) {\n\tvar i = parseInt(str,10);\n\treturn isNaN(i) ? deflt : i;\n}\n\n/*\nRepeatedly replaces a substring within a string. Like String.prototype.replace, but without any of the default special handling of $ sequences in the replace string\n*/\nexports.replaceString = function(text,search,replace) {\n\treturn text.replace(search,function() {\n\t\treturn replace;\n\t});\n};\n\n/*\nRepeats a string\n*/\nexports.repeat = function(str,count) {\n\tvar result = \"\";\n\tfor(var t=0;t<count;t++) {\n\t\tresult += str;\n\t}\n\treturn result;\n};\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nConvert a string to sentence case (ie capitalise first letter)\n*/\nexports.toSentenceCase = function(str) {\n\treturn (str || \"\").replace(/^\\S/, function(c) {return c.toUpperCase();});\n}\n\n/*\nConvert a string to title case (ie capitalise each initial letter)\n*/\nexports.toTitleCase = function(str) {\n\treturn (str || \"\").replace(/(^|\\s)\\S/g, function(c) {return c.toUpperCase();});\n}\n\t\n/*\nFind the line break preceding a given position in a string\nReturns position immediately after that line break, or the start of the string\n*/\nexports.findPrecedingLineBreak = function(text,pos) {\n\tvar result = text.lastIndexOf(\"\\n\",pos - 1);\n\tif(result === -1) {\n\t\tresult = 0;\n\t} else {\n\t\tresult++;\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nFind the line break following a given position in a string\n*/\nexports.findFollowingLineBreak = function(text,pos) {\n\t// Cut to just past the following line break, or to the end of the text\n\tvar result = text.indexOf(\"\\n\",pos);\n\tif(result === -1) {\n\t\tresult = text.length;\n\t} else {\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\nDetermine whether an array-item is an object-property\n*/\nexports.hopArray = function(object,array) {\n\tfor(var i=0; i<array.length; i++) {\n\t\tif($tw.utils.hop(object,array[i])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tif(object) {\n\t\tObject.freeze(object);\n\t\tfor(key in object) {\n\t\t\tproperty = object[key];\n\t\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\t\tdeepFreeze(property);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.getYearForWeekNo(date);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn date.getFullYear();\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0XXX/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMilliseconds(),3);\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^XXX/, function() {\n\t\t\t\treturn date.getMilliseconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\t// If the user wants everything in UTC, shift the datestamp\n\t// Optimize for format string that essentially means\n\t// 'return raw UTC (tiddlywiki style) date string.'\n\tif(t.indexOf(\"[UTC]\") == 0 ) {\n\t\tif(t == \"[UTC]YYYY0MM0DD0hh0mm0ssXXX\")\n\t\t\treturn $tw.utils.stringifyDate(new Date());\n\t\tvar offset = date.getTimezoneOffset() ; // in minutes\n\t\tdate = new Date(date.getTime()+offset*60*1000) ;\n\t\tt = t.substr(5) ;\n\t}\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call();\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar x = new Date(dt.getFullYear(),0,1);\n\tvar n = Math.floor((dt.getTime() - x.getTime()) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\",   duration:      365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\",  duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\",    duration:            24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\",   duration:                 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration:                      60 * 1000},\n\t\t{name: \"Seconds\", duration:                           1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&amp;\", < to \"&lt;\", > to \"&gt;\", \" to \"&quot;\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&amp;\").replace(/</mg,\"&lt;\").replace(/>/mg,\"&gt;\").replace(/\\\"/mg,\"&quot;\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar converter = String.fromCodePoint || String.fromCharCode,\n\t\te = s.substr(1,s.length-2), // Strip the & and the ;\n\t\tc;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\tc = parseInt(e.substr(2),16);\n\t\t} else {\n\t\t\tc = parseInt(e.substr(1),10);\n\t\t}\n\t\tif(isNaN(c)) {\n\t\t\treturn s;\n\t\t} else {\n\t\t\treturn converter(c);\n\t\t}\n\t} else {\n\t\tc = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn converter(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape all non-ASCII characters.\n\t*/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\')            // backslash\n\t\t.replace(/\"/g, '\\\\\"')              // double quote character\n\t\t.replace(/'/g, \"\\\\'\")              // single quote character\n\t\t.replace(/\\r/g, '\\\\r')             // carriage return\n\t\t.replace(/\\n/g, '\\\\n')             // line feed\n\t\t.replace(/[\\x00-\\x1f\\x80-\\uFFFF]/g, exports.escape); // non-ASCII characters\n};\n\n// Turns a string into a legal JSON string\n// Derived from peg.js, thanks to David Majda\nexports.jsonStringify = function(s) {\n\t// See http://www.json.org/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\')            // backslash\n\t\t.replace(/\"/g, '\\\\\"')              // double quote character\n\t\t.replace(/\\r/g, '\\\\r')             // carriage return\n\t\t.replace(/\\n/g, '\\\\n')             // line feed\n\t\t.replace(/\\x08/g, '\\\\b')           // backspace\n\t\t.replace(/\\x0c/g, '\\\\f')           // formfeed\n\t\t.replace(/\\t/g, '\\\\t')             // tab\n\t\t.replace(/[\\x00-\\x1f\\x80-\\uFFFF]/g,function(s) {\n\t\t\treturn '\\\\u' + $tw.utils.pad(s.charCodeAt(0).toString(16).toUpperCase(),4);\n\t\t}); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n    return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\n// Checks whether a link target is external, i.e. not a tiddler title\nexports.isLinkExternal = function(to) {\n\tvar externalRegExp = /^(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof process === \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10) || 0;\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\treturn base64utf8.base64.decode.call(base64utf8,string64);\n};\n\n/*\nEncode a string to base64\n*/\nexports.base64Encode = function(string64) {\n\treturn base64utf8.base64.encode.call(base64utf8,string64);\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\n\t\tm =  r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n/*\nConvert text and content type to a data URI\n*/\nexports.makeDataUri = function(text,type,_canonical_uri) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tif(_canonical_uri) {\n\t\tparts.push(_canonical_uri);\n\t} else {\n\t\tparts.push(\"data:\");\n\t\tparts.push(type);\n\t\tparts.push(isBase64 ? \";base64\" : \"\");\n\t\tparts.push(\",\");\n\t\tparts.push(isBase64 ? text : encodeURIComponent(text));\t\t\n\t}\n\treturn parts.join(\"\");\n};\n\n/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n/*\nIE does not have an endsWith function\n*/\nexports.strEndsWith = function(str,ending,position) {\n\tif(str.endsWith) {\n\t\treturn str.endsWith(ending,position);\n\t} else {\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) {\n\t\t\tposition = str.length;\n\t\t}\n\t\tposition -= ending.length;\n\t\tvar lastIndex = str.indexOf(ending, position);\n\t\treturn lastIndex !== -1 && lastIndex === position;\n\t}\n};\n\n/*\nReturn system information useful for debugging\n*/\nexports.getSystemInfo = function(str,ending,position) {\n\tvar results = [],\n\t\tsave = function(desc,value) {\n\t\t\tresults.push(desc + \": \" + value);\n\t\t};\n\tif($tw.browser) {\n\t\tsave(\"User Agent\",navigator.userAgent);\n\t\tsave(\"Online Status\",window.navigator.onLine);\n\t}\n\tif($tw.node) {\n\t\tsave(\"Node Version\",process.version);\n\t}\n\treturn results.join(\"\\n\");\n};\n\nexports.parseNumber = function(str) {\n\treturn parseFloat(str) || 0;\n};\n\nexports.parseInt = function(str) {\n\treturn parseInt(str,10) || 0;\n};\n\nexports.stringifyNumber = function(num) {\n\treturn num + \"\";\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/widgets/action-createtiddler.js": {
            "title": "$:/core/modules/widgets/action-createtiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-createtiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to create a new tiddler with a unique name and specified fields.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw:false, require:false, exports:false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CreateTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCreateTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCreateTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nCreateTiddlerWidget.prototype.execute = function() {\n\tthis.actionBaseTitle = this.getAttribute(\"$basetitle\");\n\tthis.hasBase = !!this.actionBaseTitle;\n\tthis.actionSaveTitle = this.getAttribute(\"$savetitle\");\n\tthis.actionSaveDraftTitle = this.getAttribute(\"$savedrafttitle\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n\t//Following params are new since 5.1.22\n\tthis.actionTemplate = this.getAttribute(\"$template\");\n\tthis.useTemplate = !!this.actionTemplate;\n\tthis.actionOverwrite = this.getAttribute(\"$overwrite\",\"no\");\n\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nCreateTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nCreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar title = this.wiki.getTiddlerText(\"$:/language/DefaultNewTiddlerTitle\"), // Get the initial new-tiddler title\n\t\tfields = {},\n\t\tcreationFields,\n\t\tmodificationFields;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tfields[name] = attribute;\n\t\t}\n\t});\n\tif(this.actionTimestamp) {\n\t\tcreationFields = this.wiki.getCreationFields();\n\t\tmodificationFields = this.wiki.getModificationFields();\n\t}\n\tif(this.hasBase && this.actionOverwrite === \"no\") {\n\t\ttitle = this.wiki.generateNewTitle(this.actionBaseTitle);\n\t} else if (this.hasBase && this.actionOverwrite === \"yes\") {\n\t\ttitle = this.actionBaseTitle\n\t}\n\t// NO $basetitle BUT $template parameter is available\n\t// the title MUST be unique, otherwise the template would be overwritten\n\tif (!this.hasBase && this.useTemplate) {\n\t\ttitle = this.wiki.generateNewTitle(this.actionTemplate);\n\t} else if (!this.hasBase && !this.useTemplate) {\n\t\t// If NO $basetitle AND NO $template use initial title\n\t\t// DON'T overwrite any stuff\n\t\ttitle = this.wiki.generateNewTitle(title);\n\t}\n\tvar templateTiddler = this.wiki.getTiddler(this.actionTemplate) || {};\n\tvar tiddler = this.wiki.addTiddler(new $tw.Tiddler(templateTiddler.fields,creationFields,fields,modificationFields,{title: title}));\n\tif(this.actionSaveTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveTitle,title,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.actionSaveDraftTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveDraftTitle,this.wiki.generateDraftTitle(title),this.getVariable(\"currentTiddler\"));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-createtiddler\"] = CreateTiddlerWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-deletefield.js": {
            "title": "$:/core/modules/widgets/action-deletefield.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {},\n\t\thasChanged = false;\n\tif(this.actionField && tiddler) {\n\t\tremoveFields[this.actionField] = undefined;\n\t\tif(this.actionField in tiddler.fields) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t\thasChanged = true;\n\t\t\t}\n\t\t});\n\t\tif(hasChanged) {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,removeFields,this.wiki.getModificationFields()));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-deletetiddler.js": {
            "title": "$:/core/modules/widgets/action-deletetiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-listops.js": {
            "title": "$:/core/modules/widgets/action-listops.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.$tiddler || changedAttributes.$filter ||\n\t\tchangedAttributes.$subfilter || changedAttributes.$field ||\n\t\tchangedAttributes.$index || changedAttributes.$tags) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\ttype = \"!!\",\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\ttype = \"##\";\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar subfilter = \"[list[\" + this.target + type + list + \"]] \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(subfilter, this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tiddler = this.wiki.getTiddler(this.target),\n\t\t\toldtags = tiddler ? (tiddler.fields.tags || []).slice(0) : [],\n\t\t\ttagfilter = \"[list[\" + this.target + \"!!tags]] \" + this.filtertags,\n\t\t\tnewtags = this.wiki.filterTiddlers(tagfilter,this);\n\t\tif($tw.utils.stringifyList(oldtags.sort()) !== $tw.utils.stringifyList(newtags.sort())) {\n\t\t\tthis.wiki.setText(this.target,\"tags\",undefined,$tw.utils.stringifyList(newtags));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-navigate.js": {
            "title": "$:/core/modules/widgets/action-navigate.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tevent = event || {};\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-popup.js": {
            "title": "$:/core/modules/widgets/action-popup.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-popup.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to trigger a popup.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ActionPopupWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nActionPopupWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nActionPopupWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nActionPopupWidget.prototype.execute = function() {\n\tthis.actionState = this.getAttribute(\"$state\");\n\tthis.actionCoords = this.getAttribute(\"$coords\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nActionPopupWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$state\"] || changedAttributes[\"$coords\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nActionPopupWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Trigger the popup\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(this.actionCoords);\n\tif(match) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: null,\n\t\t\tdomNodeRect: {\n\t\t\t\tleft: parseFloat(match[1]),\n\t\t\t\ttop: parseFloat(match[2]),\n\t\t\t\twidth: parseFloat(match[3]),\n\t\t\t\theight: parseFloat(match[4])\n\t\t\t},\n\t\t\ttitle: this.actionState,\n\t\t\twiki: this.wiki\n\t\t});\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-popup\"] = ActionPopupWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-sendmessage.js": {
            "title": "$:/core/modules/widgets/action-sendmessage.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n\tthis.actionName = this.getAttribute(\"$name\");\n\tthis.actionValue = this.getAttribute(\"$value\",\"\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Add name/value pair if present\n\tif(this.actionName) {\n\t\tparamObject[this.actionName] = this.actionValue;\n\t}\n\t// Dispatch the message\n\tthis.dispatchEvent({\n\t\ttype: this.actionMessage,\n\t\tparam: param,\n\t\tparamObject: paramObject,\n\t\ttiddlerTitle: this.getVariable(\"currentTiddler\"),\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tevent: event\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-setfield.js": {
            "title": "$:/core/modules/widgets/action-setfield.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\")  || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/browse.js": {
            "title": "$:/core/modules/widgets/browse.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\t// Nw.js supports \"webkitdirectory\" and \"nwdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\n\t}\n\tif(this.nwdirectory) {\n\t\tdomNode.setAttribute(\"nwdirectory\",this.nwdirectory);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,{\n\t\t\t\tcallback: function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t},\n\t\t\t\tdeserializer: self.deserializer\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.deserializer = this.getAttribute(\"deserializer\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\n\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\n\tthis.nwdirectory = this.getAttribute(\"nwdirectory\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/button.js": {
            "title": "$:/core/modules/widgets/button.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar tag = \"button\";\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = (this.popup || this.popupTitle) && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif((this.set || this.setTitle) && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\t\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(self,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup || self.popupTitle) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set || self.setTitle) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.actions) {\n\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Make it draggable if required\n\tif(this.dragTiddler || this.dragFilter) {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.dragTiddler;},\n\t\t\tdragFilterFn: function() {return self.dragFilter;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nWe don't allow actions to propagate because we trigger actions ourselves\n*/\nButtonWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n};\n\nButtonWidget.prototype.isSelected = function() {\n    return this.setTitle ? (this.setField ? this.wiki.getTiddler(this.setTitle).getFieldString(this.setField) === this.setTo :\n\t\t(this.setIndex ? this.wiki.extractTiddlerDataItem(this.setTitle,this.setIndex) === this.setTo :\n\t\t\tthis.wiki.getTiddlerText(this.setTitle))) || this.defaultSetValue || this.getVariable(\"currentTiddler\") :\n\t\tthis.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.popupTitle ? this.wiki.getTiddler(this.popupTitle) : this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tevent: event\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\"), event: event});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\tif(this.popupTitle) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popupTitle,\n\t\t\twiki: this.wiki,\n\t\t\tnoStateReference: true\n\t\t});\n\t} else {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popup,\n\t\t\twiki: this.wiki\n\t\t});\n\t}\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tif(this.setTitle) {\n\t\tthis.setField ? this.wiki.setText(this.setTitle,this.setField,undefined,this.setTo) :\n\t\t\t\t(this.setIndex ? this.wiki.setText(this.setTitle,undefined,this.setIndex,this.setTo) :\n\t\t\t\tthis.wiki.setText(this.setTitle,\"text\",undefined,this.setTo));\n\t} else {\n\t\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\n\tthis.dragTiddler = this.getAttribute(\"dragTiddler\");\n\tthis.dragFilter = this.getAttribute(\"dragFilter\");\n\tthis.setTitle = this.getAttribute(\"setTitle\");\n\tthis.setField = this.getAttribute(\"setField\");\n\tthis.setIndex = this.getAttribute(\"setIndex\");\n\tthis.popupTitle = this.getAttribute(\"popupTitle\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes[\"class\"] || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/checkbox.js": {
            "title": "$:/core/modules/widgets/checkbox.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.checkboxClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\tif(this.checkboxInvertTag) {\n\t\t\t\treturn !tiddler.hasTag(this.checkboxTag);\n\t\t\t} else {\n\t\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value;\n\t\t\tif($tw.utils.hop(tiddler.fields,this.checkboxField)) {\n\t\t\t\tvalue = tiddler.fields[this.checkboxField] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.checkboxDefault || \"\";\n\t\t\t}\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxIndex) {\n\t\t\tvar value = this.wiki.extractTiddlerDataItem(tiddler,this.checkboxIndex,this.checkboxDefault || \"\");\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false,\n\t\ttagCheck = false,\n\t\thasTag = tiddler && tiddler.hasTag(this.checkboxTag),\n\t\tvalue = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\tif(this.checkboxTag && this.checkboxInvertTag === \"yes\") {\n\t\ttagCheck = hasTag === checked;\n\t} else {\n\t\ttagCheck = hasTag !== checked;\n\t}\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tagCheck)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(this.checkboxInvertTag === \"yes\" && !checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t} else if(this.checkboxInvertTag !== \"yes\" && checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\t// Set the index if specified\n\tif(this.checkboxIndex) {\n\t\tvar indexValue = this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxIndex);\n\t\tif(!tiddler || indexValue !== value) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tif(this.checkboxIndex) {\n\t\t\tthis.wiki.setText(this.checkboxTitle,\"\",this.checkboxIndex,value);\n\t\t} else {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t\t}\n\t}\n\t// Trigger actions\n\tif(this.checkboxActions) {\n\t\tthis.invokeActionString(this.checkboxActions,this,event);\n\t}\n\tif(this.checkboxCheckActions && checked) {\n\t\tthis.invokeActionString(this.checkboxCheckActions,this,event);\n\t}\n\tif(this.checkboxUncheckActions && !checked) {\n\t\tthis.invokeActionString(this.checkboxUncheckActions,this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxActions = this.getAttribute(\"actions\");\n\tthis.checkboxCheckActions = this.getAttribute(\"checkactions\");\n\tthis.checkboxUncheckActions = this.getAttribute(\"uncheckactions\");\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxIndex = this.getAttribute(\"index\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\tthis.checkboxClass = this.getAttribute(\"class\",\"\");\n\tthis.checkboxInvertTag = this.getAttribute(\"invertTag\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.index || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/codeblock.js": {
            "title": "$:/core/modules/widgets/codeblock.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/count.js": {
            "title": "$:/core/modules/widgets/count.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = \"0\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/diff-text.js": {
            "title": "$:/core/modules/widgets/diff-text.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/diff-text.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display a diff between two texts\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget,\n\tdmp = require(\"$:/core/modules/utils/diff-match-patch/diff_match_patch.js\");\n\nvar DiffTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDiffTextWidget.prototype = new Widget();\n\nDiffTextWidget.prototype.invisibleCharacters = {\n\t\"\\n\": \"↩︎\\n\",\n\t\"\\r\": \"⇠\",\n\t\"\\t\": \"⇥\\t\"\n};\n\n/*\nRender this widget into the DOM\n*/\nDiffTextWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create the diff\n\tvar dmpObject = new dmp.diff_match_patch(),\n\t\tdiffs = dmpObject.diff_main(this.getAttribute(\"source\"),this.getAttribute(\"dest\"));\n\t// Apply required cleanup\n\tswitch(this.getAttribute(\"cleanup\",\"semantic\")) {\n\t\tcase \"none\":\n\t\t\t// No cleanup\n\t\t\tbreak;\n\t\tcase \"efficiency\":\n\t\t\tdmpObject.diff_cleanupEfficiency(diffs);\n\t\t\tbreak;\n\t\tdefault: // case \"semantic\"\n\t\t\tdmpObject.diff_cleanupSemantic(diffs);\n\t\t\tbreak;\n\t}\n\t// Create the elements\n\tvar domContainer = this.document.createElement(\"div\"), \n\t\tdomDiff = this.createDiffDom(diffs);\n\tparent.insertBefore(domContainer,nextSibling);\n\t// Set variables\n\tthis.setVariable(\"diff-count\",diffs.reduce(function(acc,diff) {\n\t\tif(diff[0] !== dmp.DIFF_EQUAL) {\n\t\t\tacc++;\n\t\t}\n\t\treturn acc;\n\t},0).toString());\n\t// Render child widgets\n\tthis.renderChildren(domContainer,null);\n\t// Render the diff\n\tdomContainer.appendChild(domDiff);\n\t// Save our container\n\tthis.domNodes.push(domContainer);\n};\n\n/*\nCreate DOM elements representing a list of diffs\n*/\nDiffTextWidget.prototype.createDiffDom = function(diffs) {\n\tvar self = this;\n\t// Create the element and assign the attributes\n\tvar domPre = this.document.createElement(\"pre\"),\n\t\tdomCode = this.document.createElement(\"code\");\n\t$tw.utils.each(diffs,function(diff) {\n\t\tvar tag = diff[0] === dmp.DIFF_INSERT ? \"ins\" : (diff[0] === dmp.DIFF_DELETE ? \"del\" : \"span\"),\n\t\t\tclassName = diff[0] === dmp.DIFF_INSERT ? \"tc-diff-insert\" : (diff[0] === dmp.DIFF_DELETE ? \"tc-diff-delete\" : \"tc-diff-equal\"),\n\t\t\tdom = self.document.createElement(tag),\n\t\t\ttext = diff[1],\n\t\t\tcurrPos = 0,\n\t\t\tre = /([\\x00-\\x1F])/mg,\n\t\t\tmatch = re.exec(text),\n\t\t\tspan,\n\t\t\tprintable;\n\t\tdom.className = className;\n\t\twhile(match) {\n\t\t\tif(currPos < match.index) {\n\t\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos,match.index)));\n\t\t\t}\n\t\t\tspan = self.document.createElement(\"span\");\n\t\t\tspan.className = \"tc-diff-invisible\";\n\t\t\tprintable = self.invisibleCharacters[match[0]] || (\"[0x\" + match[0].charCodeAt(0).toString(16) + \"]\");\n\t\t\tspan.appendChild(self.document.createTextNode(printable));\n\t\t\tdom.appendChild(span);\n\t\t\tcurrPos = match.index + match[0].length;\n\t\t\tmatch = re.exec(text);\n\t\t}\n\t\tif(currPos < text.length) {\n\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos)));\n\t\t}\n\t\tdomCode.appendChild(dom);\n\t});\n\tdomPre.appendChild(domCode);\n\treturn domPre;\n};\n\n/*\nCompute the internal state of the widget\n*/\nDiffTextWidget.prototype.execute = function() {\n\t// Make child widgets\n\tvar parseTreeNodes;\n\tif(this.parseTreeNode && this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: \"$:/language/Diffs/CountMessage\"}\n\t\t\t}\n\t\t}];\n\t}\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDiffTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.dest || changedAttributes.cleanup) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports[\"diff-text\"] = DiffTextWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/draggable.js": {
            "title": "$:/core/modules/widgets/draggable.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/draggable.js\ntype: application/javascript\nmodule-type: widget\n\nDraggable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DraggableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDraggableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDraggableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Sanitise the specified tag\n\tvar tag = this.draggableTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"div\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [\"tc-draggable\"];\n\tif(this.draggableClasses) {\n\t\tclasses.push(this.draggableClasses);\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Add event handlers\n\t$tw.utils.makeDraggable({\n\t\tdomNode: domNode,\n\t\tdragTiddlerFn: function() {return self.getAttribute(\"tiddler\");},\n\t\tdragFilterFn: function() {return self.getAttribute(\"filter\");},\n\t\tstartActions: self.startActions,\n\t\tendActions: self.endActions,\n\t\twidget: this\n\t});\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nDraggableWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.draggableTag = this.getAttribute(\"tag\",\"div\");\n\tthis.draggableClasses = this.getAttribute(\"class\");\n\tthis.startActions = this.getAttribute(\"startactions\");\n\tthis.endActions = this.getAttribute(\"endactions\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDraggableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tag || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.draggable = DraggableWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/droppable.js": {
            "title": "$:/core/modules/widgets/droppable.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/droppable.js\ntype: application/javascript\nmodule-type: widget\n\nDroppable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DroppableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDroppableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDroppableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.droppableTag && $tw.config.htmlUnsafeElements.indexOf(this.droppableTag) === -1) {\n\t\ttag = this.droppableTag;\n\t}\n\t// Create element and assign classes\n\tvar domNode = this.document.createElement(tag),\n\t\tclasses = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-droppable\");\n\tdomNode.className = classes.join(\" \");\n\t// Add event handlers\n\tif(this.droppableEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"}\n\t\t]);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDroppableWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDroppableWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally. The hacky second condition is to resolve a problem with Firefox whereby there is an erroneous dragenter event if the node being dragged is within the dropzone\n\tif(this.currentlyEntered.length === 0 || (this.currentlyEntered.length === 1 && this.currentlyEntered[0] === $tw.dragInProgress)) {\n\t\tthis.currentlyEntered = [];\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDroppableWidget.prototype.handleDragEnterEvent  = function(event) {\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragOverEvent  = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\t// Set the drop effect\n\tevent.dataTransfer.dropEffect = this.droppableEffect;\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragLeaveEvent  = function(event) {\n\tthis.leaveDrag(event);\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDropEvent  = function(event) {\n\tvar self = this;\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\tvar dataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Try to import the various data types we understand\n\t$tw.utils.importDataTransfer(dataTransfer,null,function(fieldsArray) {\n\t\tfieldsArray.forEach(function(fields) {\n\t\t\tself.performActions(fields.title || fields.text,event);\n\t\t});\n\t});\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.performActions = function(title,event) {\n\tif(this.droppableActions) {\n\t\tvar modifierKey = event.ctrlKey && ! event.shiftKey ? \"ctrl\" : event.shiftKey && !event.ctrlKey ? \"shift\" : \n\t\t\t\tevent.ctrlKey && event.shiftKey ? \"ctrl-shift\" : \"normal\" ;\n\t\tthis.invokeActionString(this.droppableActions,this,event,{actionTiddler: title, modifier: modifierKey});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDroppableWidget.prototype.execute = function() {\n\tthis.droppableActions = this.getAttribute(\"actions\");\n\tthis.droppableEffect = this.getAttribute(\"effect\",\"copy\");\n\tthis.droppableTag = this.getAttribute(\"tag\");\n\tthis.droppableClass = this.getAttribute(\"class\");\n\tthis.droppableEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDroppableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"] || changedAttributes.tag || changedAttributes.enable) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.droppable = DroppableWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/dropzone.js": {
            "title": "$:/core/modules/widgets/dropzone.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = this.dropzoneClass || \"tc-dropzone\";\n\t// Add event handlers\n\tif(this.dropzoneEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"},\n\t\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\n\t\t]);\t\t\n\t}\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDropZoneWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally\n\tif(this.currentlyEntered.length === 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent  = function(event) {\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent  = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent  = function(event) {\n\tthis.leaveDrag(event);\n};\n\nDropZoneWidget.prototype.handleDragEndEvent = function(event) {\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.handleDropEvent  = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t};\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = 0;\n\tif(dataTransfer.files) {\n\t\tnumFiles = this.wiki.readFiles(dataTransfer.files,{\n\t\t\tcallback: readFileCallback,\n\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t});\n\t}\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\t$tw.utils.importDataTransfer(dataTransfer,this.wiki.generateNewTitle(\"Untitled\"),readFileCallback);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handlePasteEvent  = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t};\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1 && !event.target.isContentEditable) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),{\n\t\t\t\t\tcallback: readFileCallback,\n\t\t\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar type = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\ttype: type\n\t\t\t\t\t};\n\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\tthis.dropzoneClass = this.getAttribute(\"class\");\n\tthis.dropzoneDeserializer = this.getAttribute(\"deserializer\");\n\tthis.dropzoneEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.enable) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-binary.js": {
            "title": "$:/core/modules/widgets/edit-binary.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Get our parameters\n\tvar editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tvar tiddler = this.wiki.getTiddler(editTitle);\n\tvar type = tiddler.fields.type;\n\tvar text = tiddler.fields.text;\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on draft tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!draft.title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!draft.title\"}\n\t\t},\n\t\tchildren: [{\n\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to internal data URI (no external)\n\tif(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets([element]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-bitmap.js": {
            "title": "$:/core/modules/widgets/edit-bitmap.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 600,\n\tDEFAULT_IMAGE_HEIGHT = 370,\n\tDEFAULT_IMAGE_TYPE = \"image/png\";\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\",\n\tLINE_OPACITY_TITLE = \"$:/config/BitmapEditor/Opacity\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\t// Initialise the editor operations if they've not been done already\n\tif(!this.editorOperations) {\n\t\tEditBitmapWidget.prototype.editorOperations = {};\n\t\t$tw.modules.applyMethods(\"bitmapeditoroperation\",this.editorOperations);\n\t}\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create the wrapper for the toolbar and render its content\n\tthis.toolbarNode = this.document.createElement(\"div\");\n\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\tparent.insertBefore(this.toolbarNode,nextSibling);\n\tthis.domNodes.push(this.toolbarNode);\n\t// Create the on-screen canvas\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Render toolbar child widgets\n\tthis.renderChildren(this.toolbarNode,null);\n\t// // Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n\t// Add widget message listeners\n\tthis.addEventListeners([\n\t\t{type: \"tm-edit-bitmap-operation\", handler: \"handleEditBitmapOperationMessage\"}\n\t]);\n};\n\n/*\nHandle an edit bitmap operation message from the toolbar\n*/\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage = function(event) {\n\t// Invoke the handler\n\tvar handler = this.editorOperations[event.param];\n\tif(handler) {\n\t\thandler.call(this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nJust refresh the toolbar\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nSet the bitmap size variables and refresh the toolbar\n*/\nEditBitmapWidget.prototype.refreshToolbar = function() {\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Refresh each of our child widgets\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.refreshSelf();\n\t});\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\t// Get the current bitmap into an image object\n\tif(tiddler && tiddler.fields.type && tiddler.fields.text) {\n\t\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\t\t\n\t} else {\n\t\tcurrImage.width = DEFAULT_IMAGE_WIDTH;\n\t\tcurrImage.height = DEFAULT_IMAGE_HEIGHT;\n\t\tcurrImage.onerror();\n\t}\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\n/*\n** Rotate the canvas left by 90 degrees\n*/\nEditBitmapWidget.prototype.rotateCanvasLeft = function() {\n\t// Get the current size of the image\n\tvar origWidth = this.currCanvas.width,\n\t\torigHeight = this.currCanvas.height;\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\"),\n\t\tnewWidth = origHeight,\n\t\tnewHeight = origWidth;\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.save();\n\tctx.translate(newWidth / 2,newHeight / 2);\n\tctx.rotate(-Math.PI / 2);\n\tctx.drawImage(this.currCanvas,-origWidth / 2,-origHeight / 2);\n\tctx.restore();\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.globalAlpha = parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\"1.0\"));\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"));\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle) || new $tw.Tiddler({title: this.editTitle,type: DEFAULT_IMAGE_TYPE});\n\t// data URIs look like \"data:<type>;base64,<text>\"\n\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type),\n\t\tposColon = dataURL.indexOf(\":\"),\n\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\tposComma = dataURL.indexOf(\",\"),\n\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\ttext = dataURL.substring(posComma+1);\n\tvar update = {type: type, text: text};\n\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-shortcut.js": {
            "title": "$:/core/modules/widgets/edit-shortcut.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an editable keyboard shortcut\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditShortcutWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditShortcutWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditShortcutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.inputNode = this.document.createElement(\"input\");\n\t// Assign classes\n\tif(this.shortcutClass) {\n\t\tthis.inputNode.className = this.shortcutClass;\t\t\n\t}\n\t// Assign other attributes\n\tif(this.shortcutStyle) {\n\t\tthis.inputNode.setAttribute(\"style\",this.shortcutStyle);\n\t}\n\tif(this.shortcutTooltip) {\n\t\tthis.inputNode.setAttribute(\"title\",this.shortcutTooltip);\n\t}\n\tif(this.shortcutPlaceholder) {\n\t\tthis.inputNode.setAttribute(\"placeholder\",this.shortcutPlaceholder);\n\t}\n\tif(this.shortcutAriaLabel) {\n\t\tthis.inputNode.setAttribute(\"aria-label\",this.shortcutAriaLabel);\n\t}\n\t// Assign the current shortcut\n\tthis.updateInputNode();\n\t// Add event handlers\n\t$tw.utils.addEventListeners(this.inputNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Link into the DOM\n\tparent.insertBefore(this.inputNode,nextSibling);\n\tthis.domNodes.push(this.inputNode);\n\t// Focus the input Node if focus === \"yes\" or focus === \"true\"\n\tif(this.shortcutFocus === \"yes\" || this.shortcutFocus === \"true\") {\n\t\tthis.focus();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditShortcutWidget.prototype.execute = function() {\n\tthis.shortcutTiddler = this.getAttribute(\"tiddler\");\n\tthis.shortcutField = this.getAttribute(\"field\");\n\tthis.shortcutIndex = this.getAttribute(\"index\");\n\tthis.shortcutPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.shortcutDefault = this.getAttribute(\"default\",\"\");\n\tthis.shortcutClass = this.getAttribute(\"class\");\n\tthis.shortcutStyle = this.getAttribute(\"style\");\n\tthis.shortcutTooltip = this.getAttribute(\"tooltip\");\n\tthis.shortcutAriaLabel = this.getAttribute(\"aria-label\");\n\tthis.shortcutFocus = this.getAttribute(\"focus\");\n};\n\n/*\nUpdate the value of the input node\n*/\nEditShortcutWidget.prototype.updateInputNode = function() {\n\tif(this.shortcutField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.shortcutTiddler);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\n\t\t\tthis.inputNode.value = tiddler.getFieldString(this.shortcutField);\n\t\t} else {\n\t\t\tthis.inputNode.value = this.shortcutDefault;\n\t\t}\n\t} else if(this.shortcutIndex) {\n\t\tthis.inputNode.value = this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\n\t} else {\n\t\tthis.inputNode.value = this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\n\t}\n};\n\n/*\nHandle a dom \"keydown\" event\n*/\nEditShortcutWidget.prototype.handleKeydownEvent = function(event) {\n\t// Ignore shift, ctrl, meta, alt\n\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) === -1) {\n\t\t// Get the shortcut text representation\n\t\tvar value = $tw.keyboardManager.getPrintableShortcuts([{\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tmetaKey: event.metaKey,\n\t\t\tkeyCode: event.keyCode\n\t\t}]);\n\t\tif(value.length > 0) {\n\t\t\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value[0]);\n\t\t}\n\t\t// Ignore the keydown if it was already handled\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn true;\t\t\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nfocus the input node\n*/\nEditShortcutWidget.prototype.focus = function() {\n\tif(this.inputNode.focus && this.inputNode.select) {\n\t\tthis.inputNode.focus();\n\t\tthis.inputNode.select();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\n*/\nEditShortcutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.style || changedAttributes.tooltip || changedAttributes[\"aria-label\"] || changedAttributes.focus) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.shortcutTiddler]) {\n\t\tthis.updateInputNode();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports[\"edit-shortcut\"] = EditShortcutWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-text.js": {
            "title": "$:/core/modules/widgets/edit-text.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tFramedEngine = require(\"$:/core/modules/editor/engines/framed.js\").FramedEngine,\n\tSimpleEngine = require(\"$:/core/modules/editor/engines/simple.js\").SimpleEngine;\n\nexports[\"edit-text\"] = editTextWidgetFactory(FramedEngine,SimpleEngine);\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit.js": {
            "title": "$:/core/modules/widgets/edit.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\tthis.editFocus = this.getAttribute(\"focus\",\"\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: this.editTitle},\n\t\t\tfield: {type: \"string\", value: this.editField},\n\t\t\tindex: {type: \"string\", value: this.editIndex},\n\t\t\t\"class\": {type: \"string\", value: this.editClass},\n\t\t\t\"placeholder\": {type: \"string\", value: this.editPlaceholder},\n\t\t\t\"tabindex\": {type: \"string\", value: this.editTabIndex},\n\t\t\t\"focus\": {type: \"string\", value: this.editFocus}\n\t\t},\n\t\tchildren: this.parseTreeNode.children\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tabindex || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/element.js": {
            "title": "$:/core/modules/widgets/element.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Neuter blacklisted elements\n\tvar tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"safe-\" + tag;\n\t}\n\t// Adjust headings by the current base level\n\tvar headingLevel = [\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"].indexOf(tag);\n\tif(headingLevel !== -1) {\n\t\tvar baseLevel = parseInt(this.getVariable(\"tv-adjust-heading-level\",\"0\"),10) || 0;\n\t\theadingLevel = Math.min(Math.max(headingLevel + 1 + baseLevel,1),6);\n\t\ttag = \"h\" + headingLevel;\n\t}\n\t// Create the DOM node\n\tvar domNode = this.document.createElementNS(this.namespace,tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nElementWidget.prototype.execute = function() {\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.parseTreeNode.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\t// Update our attributes\n\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/encrypt.js": {
            "title": "$:/core/modules/widgets/encrypt.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/entity.js": {
            "title": "$:/core/modules/widgets/entity.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar entityString = this.getAttribute(\"entity\",this.parseTreeNode.entity || \"\"),\n\t\ttextNode = this.document.createTextNode($tw.utils.entityDecode(entityString));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.entity) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/fieldmangler.js": {
            "title": "$:/core/modules/widgets/fieldmangler.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\t\t\t\n\t\t}\n\t} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler(new $tw.Tiddler({title: this.mangleTitle, tags: tag},modification));\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/fields.js": {
            "title": "$:/core/modules/widgets/fields.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.sort = this.getAttribute(\"sort\",\"yes\") === \"yes\";\n\tthis.sortReverse = this.getAttribute(\"sortReverse\",\"no\") === \"yes\";\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.include = this.getAttribute(\"include\",null);\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\n\t// Get the inclusion and exclusion list\n\tvar excludeArr = (this.exclude) ? this.exclude.split(\" \") : [\"text\"];\n\t// Include takes precedence\n\tvar includeArr = (this.include) ? this.include.split(\" \") : null;\n\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tif (includeArr) { // Include takes precedence\n\t\t\tfor(var i=0; i<includeArr.length; i++) {\n\t\t\t\tif(tiddler.fields[includeArr[i]]) {\n\t\t\t\t\tfields.push(includeArr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\tif(excludeArr.indexOf(fieldName) === -1) {\n\t\t\t\t\tfields.push(fieldName);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.sort) fields.sort();\n\t\tif (this.sortReverse) fields.reverse();\n\t\tfor(var f=0, fmax=fields.length; f<fmax; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tvar row = this.template,\n\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\tif(reMatch) {\n\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t}\n\t\t\t}\n\t\t\trow = $tw.utils.replaceString(row,\"$name$\",fieldName);\n\t\t\trow = $tw.utils.replaceString(row,\"$value$\",value);\n\t\t\trow = $tw.utils.replaceString(row,\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\ttext.push(row);\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif( changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude ||\n\t\tchangedAttributes.include || changedAttributes.sort || changedAttributes.sortReverse ||\n\t\tchangedTiddlers[this.tiddlerTitle] || changedAttributes.stripTitlePrefix) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/image.js": {
            "title": "$:/core/modules/widgets/image.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.getVariable(\"tv-get-export-image-link\",{params: [{name: \"src\",value: this.imageSource}],defaultValue: this.imageSource});\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\t// Just trigger loading of the tiddler\n\t\t\t\tthis.wiki.getTiddlerText(this.imageSource);\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/importvariables.js": {
            "title": "$:/core/modules/widgets/importvariables.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar widgetPointer = this;\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = widgetPointer.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\tvar node = {\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params,\n\t\t\t\t\tisMacroDefinition: parseTreeNode.isMacroDefinition\n\t\t\t\t};\n\t\t\t\tif (parseTreeNode.isMacroDefinition) {\n\t\t\t\t\t// Macro definitions can be folded into\n\t\t\t\t\t// current widget instead of adding\n\t\t\t\t\t// another link to the chain.\n\t\t\t\t\tvar widget = widgetPointer.makeChildWidget(node);\n\t\t\t\t\twidget.computeAttributes();\n\t\t\t\t\twidget.execute();\n\t\t\t\t\t// We SHALLOW copy over all variables\n\t\t\t\t\t// in widget. We can't use\n\t\t\t\t\t// $tw.utils.assign, because that copies\n\t\t\t\t\t// up the prototype chain, which we\n\t\t\t\t\t// don't want.\n\t\t\t\t\t$tw.utils.each(Object.keys(widget.variables), function(key) {\n\t\t\t\t\t\twidgetPointer.variables[key] = widget.variables[key];\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\twidgetPointer.makeChildWidgets([node]);\n\t\t\t\t\twidgetPointer = widgetPointer.children[0];\n\t\t\t\t}\n\t\t\t\tparseTreeNode = parseTreeNode.children && parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\n\tif (widgetPointer != this) {\n\t\twidgetPointer.parseTreeNode.children = this.parseTreeNode.children;\n\t} else {\n\t\twidgetPointer.makeChildWidgets();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/keyboard.js": {
            "title": "$:/core/modules/widgets/keyboard.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.tag && $tw.config.htmlUnsafeElements.indexOf(this.tag) === -1) {\n\t\ttag = this.tag;\n\t}\n\t// Create element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif($tw.keyboardManager.checkKeyDescriptors(event,self.keyInfoArray)) {\n\t\t\tself.invokeActions(self,event);\n\t\t\tif(self.actions) {\n\t\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t\t}\n\t\t\tself.dispatchMessage(event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\",\"\");\n\tthis.message = this.getAttribute(\"message\",\"\");\n\tthis.param = this.getAttribute(\"param\",\"\");\n\tthis.key = this.getAttribute(\"key\",\"\");\n\tthis.tag = this.getAttribute(\"tag\",\"\");\n\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tif(this.key.substr(0,2) === \"((\" && this.key.substr(-2,2) === \"))\") {\n\t\tthis.shortcutTiddlers = [];\n\t\tvar name = this.key.substring(2,this.key.length -2);\n\t\t$tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) {\n\t\t\tself.shortcutTiddlers.push(\"$:/config/\" + platformDescriptor + \"/\" + name);\n\t\t});\n\t}\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\t// Update the keyInfoArray if one of its shortcut-config-tiddlers has changed\n\tif(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers)) {\n\t\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/link.js": {
            "title": "$:/core/modules/widgets/link.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true,\n\t\tmissingLinksEnabled = !(this.hideMissingLinks && this.isMissing && !this.isShadow);\n\t// Render the link if required\n\tif(useWikiLinks && missingLinksEnabled) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.overrideClasses === undefined) {\n\t\tclasses.push(\"tc-tiddlylink\");\n\t\tif(this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t\t}\n\t\tif(this.isMissing && !this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t\t} else {\n\t\t\tif(!this.isMissing) {\n\t\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t\t}\n\t\t}\n\t\tif(this.linkClasses) {\n\t\t\tclasses.push(this.linkClasses);\t\t\t\n\t\t}\n\t} else if(this.overrideClasses !== \"\") {\n\t\tclasses.push(this.overrideClasses)\n\t}\n\tif(classes.length > 0) {\n\t\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t}\n\t// Set an href\n\tvar wikilinkTransformFilter = this.getVariable(\"tv-filter-export-link\"),\n\t\twikiLinkText;\n\tif(wikilinkTransformFilter) {\n\t\t// Use the filter to construct the href\n\t\twikiLinkText = this.wiki.filterTiddlers(wikilinkTransformFilter,this,function(iterator) {\n\t\t\titerator(self.wiki.getTiddler(self.to),self.to)\n\t\t})[0];\n\t} else {\n\t\t// Expand the tv-wikilink-template variable to construct the href\n\t\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\";\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkTemplate,\"$uri_encoded$\",encodeURIComponent(this.to));\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkText,\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\t}\n\t// Override with the value of tv-get-export-link if defined\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tdomNode.setAttribute(\"href\",wikiLinkText);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t]);\n\t// Make the link draggable if required\n\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.to;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function(event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tmetaKey: event.metaKey,\n\t\tctrlKey: event.ctrlKey,\n\t\taltKey: event.altKey,\n\t\tshiftKey: event.shiftKey\n\t});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t}\n\tevent.stopPropagation();\n\treturn false;\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.linkClasses = this.getAttribute(\"class\");\n\tthis.overrideClasses = this.getAttribute(\"overrideClass\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.draggable = this.getAttribute(\"draggable\",\"yes\");\n\tthis.linkTag = this.getAttribute(\"tag\",\"a\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\tthis.hideMissingLinks = (this.getVariable(\"tv-show-missing-links\") || \"yes\") === \"no\";\n\t// Make the child widgets\n\tvar templateTree;\n\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\ttemplateTree = this.parseTreeNode.children;\n\t} else {\n\t\t// Default template is a link to the title\n\t\ttemplateTree = [{type: \"text\", text: this.to}];\n\t}\n\tthis.makeChildWidgets(templateTree);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/linkcatcher.js": {
            "title": "$:/core/modules/widgets/linkcatcher.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\tthis.catchActions = this.getAttribute(\"actions\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n\t// When executing actions we avoid trapping navigate events, so that we don't trigger ourselves recursively\n\tthis.executingActions = false;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(!this.executingActions) {\n\t\t// Execute the actions\n\t\tif(this.catchTo) {\n\t\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t\t}\n\t\tif(this.catchMessage && this.parentWidget) {\n\t\t\tthis.parentWidget.dispatchEvent({\n\t\t\t\ttype: this.catchMessage,\n\t\t\t\tparam: event.navigateTo,\n\t\t\t\tnavigateTo: event.navigateTo\n\t\t\t});\n\t\t}\n\t\tif(this.catchSet) {\n\t\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t\t}\n\t\tif(this.catchActions) {\n\t\t\tthis.executingActions = true;\n\t\t\tthis.invokeActionString(this.catchActions,this,event,{navigateTo: event.navigateTo});\n\t\t\tthis.executingActions = false;\n\t\t}\n\t} else {\n\t\t// This is a navigate event generated by the actions of this linkcatcher, so we don't trap it again, but just pass it to the parent\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: \"tm-navigate\",\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/list.js": {
            "title": "$:/core/modules/widgets/list.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(this.storyViewName && !StoryView) {\n\t\tStoryView = this.storyViews[\"classic\"];\n\t}\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar emptyMessage = this.getAttribute(\"emptyMessage\",\"\"),\n\t\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tresult;\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshStart) {\n\t\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\n\t}\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\tresult = true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tresult = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t}\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshEnd) {\n\t\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\n\t}\n\treturn result;\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/macrocall.js": {
            "title": "$:/core/modules/widgets/macrocall.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar macroName = this.parseTreeNode.name || this.getAttribute(\"$name\"),\n\t\tvariableInfo = this.getVariableInfo(macroName,{params: params}),\n\t\ttext = variableInfo.text,\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\tvar parser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\tparseTreeNodes = parser ? parser.tree : [];\n\t\t// Wrap the parse tree in a vars widget assigning the parameters to variables named \"__paramname__\"\n\t\tvar attributes = {};\n\t\t$tw.utils.each(variableInfo.params,function(param) {\n\t\t\tvar name = \"__\" + param.name + \"__\";\n\t\t\tattributes[name] = {\n\t\t\t\tname: name,\n\t\t\t\ttype: \"string\",\n\t\t\t\tvalue: param.value\n\t\t\t};\n\t\t});\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"vars\",\n\t\t\tattributes: attributes,\n\t\t\tchildren: parseTreeNodes\n\t\t}];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/navigator.js": {
            "title": "$:/core/modules/widgets/navigator.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"},\n\t\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\tthis.setVariable(\"tv-story-list\",this.storyTitle);\n\tthis.setVariable(\"tv-history-list\",this.historyTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tif(this.storyTitle) {\n\t\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t\t{title: this.storyTitle},\n\t\t\tstoryTiddler,\n\t\t\t{list: storyList}\n\t\t));\t\t\n\t}\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tif(storyList) {\n\t\tvar p = storyList.indexOf(title);\n\t\twhile(p !== -1) {\n\t\t\tstoryList.splice(p,1);\n\t\t\tp = storyList.indexOf(title);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tif(storyList) {\n\t\tvar pos = storyList.indexOf(oldTitle);\n\t\tif(pos !== -1) {\n\t\t\tstoryList[pos] = newTitle;\n\t\t\tdo {\n\t\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\t\tif(pos !== -1) {\n\t\t\t\t\tstoryList.splice(pos,1);\n\t\t\t\t}\n\t\t\t} while(pos !== -1);\n\t\t} else {\n\t\t\tstoryList.splice(0,0,newTitle);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tif(this.storyTitle) {\n\t\tthis.wiki.addToStory(title,fromTitle,this.storyTitle,{\n\t\t\topenLinkFromInsideRiver: this.getAttribute(\"openLinkFromInsideRiver\",\"top\"),\n\t\t\topenLinkFromOutsideRiver: this.getAttribute(\"openLinkFromOutsideRiver\",\"top\")\n\t\t});\n\t}\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.wiki.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-navigating\",event);\n\tif(event.navigateTo) {\n\t\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\t\tif(!event.navigateSuppressNavigation) {\n\t\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t\t}\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar editTiddler = $tw.hooks.invokeHook(\"th-editing-tiddler\",event);\n\tif(!editTiddler) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title);\n\t// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\toriginalTiddler = originalTitle ? this.wiki.getTiddler(originalTitle) : undefined,\n\t\tconfirmationTitle;\n\tif(!tiddler) {\n\t\treturn false;\n\t}\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tif(originalTiddler) {\n\t\t\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",originalTiddler);\n\t\t}\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Invoke the hook function and delete this tiddler\n\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",tiddler);\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler(\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\treturn this.wiki.generateDraftTitle(title);\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\n\t\t\t\t// If enabled, relink references to renamed tiddler\n\t\t\t\tvar shouldRelink = this.getAttribute(\"relinkOnRename\",\"no\").toLowerCase().trim() === \"yes\";\n\t\t\t\tif(isRename && shouldRelink && this.wiki.tiddlerExists(draftOf)) {\nconsole.log(\"Relinking '\" + draftOf + \"' to '\" + draftTitle + \"'\");\n\t\t\t\t\tthis.wiki.relinkTiddler(draftOf,draftTitle);\n\t\t\t\t}\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// #2381 always remove new title & old\n\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\tthis.removeTitleFromStory(storyList,draftOf);\n\t\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-cancelling-tiddler\", event);\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-new-tiddler\", event);\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Make a copy of the additional fields excluding any blank ones\n\tvar filteredAdditionalFields = $tw.utils.extend({},additionalFields);\n\tObject.keys(filteredAdditionalFields).forEach(function(fieldName) {\n\t\tif(filteredAdditionalFields[fieldName] === \"\") {\n\t\t\tdelete filteredAdditionalFields[fieldName];\n\t\t}\n\t});\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags);\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\texistingTiddler,\n\t\tfilteredAdditionalFields,\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList && storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tif(slot === -1) {\n\t\t\tslot = this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"bottom\" ? storyList.length - 1 : slot;\n\t\t}\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList && storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTiddler = this.wiki.getTiddler(IMPORT_TITLE),\n\t\timportData = this.wiki.getTiddlerData(IMPORT_TITLE,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: IMPORT_TITLE,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\ttiddlerFields.title = $tw.utils.trim(tiddlerFields.title);\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t});\n\t// Deselect any suppressed tiddlers\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tif(this.getVariable(\"tv-auto-open-on-import\") !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList && storyList.indexOf(IMPORT_TITLE) === -1) {\n\t\t\tstoryList.unshift(IMPORT_TITLE);\n\t\t}\n\t\t// And to history\n\t\thistory.push(IMPORT_TITLE);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\n\t}\n\treturn false;\n};\n\n//\nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData = this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push($tw.language.getString(\"Import/Imported/Hint\") + \"\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\t\t\ttiddler = $tw.hooks.invokeHook(\"th-importing-tiddler\",tiddler);\n\t\t\tself.wiki.addTiddler(tiddler);\n\t\t\timportReport.push(\"# [[\" + tiddlerFields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix || \"$:/state/folded/\";\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\tthis.wiki.renameTiddler(from,to);\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/password.js": {
            "title": "$:/core/modules/widgets/password.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/qualify.js": {
            "title": "$:/core/modules/widgets/qualify.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/qualify.js\ntype: application/javascript\nmodule-type: widget\n\nQualify text to a variable \n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar QualifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nQualifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nQualifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nQualifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.qualifyName = this.getAttribute(\"name\");\n\tthis.qualifyTitle = this.getAttribute(\"title\");\n\t// Set context variable\n\tif(this.qualifyName) {\n\t\tthis.setVariable(this.qualifyName,this.qualifyTitle + \"-\" + this.getStateQualifier());\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nQualifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.title) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.qualify = QualifyWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/radio.js": {
            "title": "$:/core/modules/widgets/radio.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nSet a field or index at a given tiddler via radio buttons\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tvar isChecked = this.getValue() === this.radioValue;\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",\n   \t\t\"tc-radio \" + this.radioClass + (isChecked ? \" tc-radio-selected\" : \"\")\n  \t);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(isChecked) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar value,\n\t\ttiddler = this.wiki.getTiddler(this.radioTitle);\n\tif (this.radioIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.radioTitle,this.radioIndex);\n\t} else {\n\t\tvalue = tiddler && tiddler.getFieldString(this.radioField);\n\t}\n\treturn value;\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioIndex) {\n\t\tthis.wiki.setText(this.radioTitle,\"\",this.radioIndex,this.radioValue);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioIndex = this.getAttribute(\"index\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.radioTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue() === this.radioValue;\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/range.js": {
            "title": "$:/core/modules/widgets/range.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/range.js\ntype: application/javascript\nmodule-type: widget\n\nRange widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RangeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRangeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRangeWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"range\");\n\tthis.inputDomNode.setAttribute(\"class\",this.elementClass);\n\tif(this.minValue){\n\t\tthis.inputDomNode.setAttribute(\"min\", this.minValue);\n\t}\n\tif(this.maxValue){\n\t\tthis.inputDomNode.setAttribute(\"max\", this.maxValue);\n\t}\n\tif(this.increment){\n\t\tthis.inputDomNode.setAttribute(\"step\", this.increment);\n\t}\n\tthis.inputDomNode.value = this.getValue();\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\t\t\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.inputDomNode,nextSibling);\n\tthis.domNodes.push(this.inputDomNode);\n};\n\nRangeWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle),\n\t\tfieldName = this.tiddlerField || \"text\",\n\t\tvalue   = this.defaultValue;\n\tif(tiddler) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(tiddler,this.tiddlerIndex,this.defaultValue || \"\");\n\t\t} else {\n\t\t\tif($tw.utils.hop(tiddler.fields,fieldName)) {\n\t\t\t\tvalue = tiddler.fields[fieldName] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.defaultValue || \"\";\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nRangeWidget.prototype.handleInputEvent = function(event) {\n\tif(this.getValue() !== this.inputDomNode.value) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,\"\",this.tiddlerIndex,this.inputDomNode.value);\n\t\t} else {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,this.tiddlerField,null,this.inputDomNode.value);\n\t\t}\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRangeWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.tiddlerField = this.getAttribute(\"field\");\n\tthis.tiddlerIndex = this.getAttribute(\"index\");\n\tthis.minValue = this.getAttribute(\"min\");\n\tthis.maxValue = this.getAttribute(\"max\");\n\tthis.increment = this.getAttribute(\"increment\");\n\tthis.defaultValue = this.getAttribute(\"default\");\n\tthis.elementClass = this.getAttribute(\"class\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRangeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes['min'] || changedAttributes['max'] || changedAttributes['increment'] || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.tiddlerTitle]) {\n\t\t\tvar value = this.getValue();\n\t\t\tif(this.inputDomNode.value !== value) {\n\t\t\t\tthis.inputDomNode.value = value;\t\t\t\t\n\t\t\t}\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.range = RangeWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/raw.js": {
            "title": "$:/core/modules/widgets/raw.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/reveal.js": {
            "title": "$:/core/modules/widgets/reveal.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) === -1) {\n\t\ttag = this.revealTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tvar classes = this[\"class\"].split(\" \") || [];\n\tclasses.push(\"tc-reveal\");\n\tdomNode.className = classes.join(\" \");\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tvar left,top;\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tleft = this.popup.left - domNode.offsetWidth;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top + this.popup.height - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tleft = this.popup.left + this.popup.width - domNode.offsetWidth;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t\tdefault: // Below\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t}\n\tif(!this.positionAllowNegative) {\n\t\tleft = Math.max(0,left);\n\t\ttop = Math.max(0,top);\n\t}\n\tdomNode.style.left = left + \"px\";\n\tdomNode.style.top = top + \"px\";\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.revealTag = this.getAttribute(\"tag\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis.positionAllowNegative = this.getAttribute(\"positionAllowNegative\") === \"yes\";\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.style = this.getAttribute(\"style\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTiddlerTitle = this.state;\n\tthis.stateTitle = this.getAttribute(\"stateTitle\");\n\tthis.stateField = this.getAttribute(\"stateField\");\n\tthis.stateIndex = this.getAttribute(\"stateIndex\");\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state,\n\t    defaultState = this[\"default\"];\n\tif(this.stateTitle) {\n\t\tvar stateTitleTiddler = this.wiki.getTiddler(this.stateTitle);\n\t\tif(this.stateField) {\n\t\t\tstate = stateTitleTiddler ? stateTitleTiddler.getFieldString(this.stateField) || defaultState : defaultState;\n\t\t} else if(this.stateIndex) {\n\t\t\tstate = stateTitleTiddler ? this.wiki.extractTiddlerDataItem(this.stateTitle,this.stateIndex) || defaultState : defaultState;\n\t\t} else if(stateTitleTiddler) {\n\t\t\tstate = this.wiki.getTiddlerText(this.stateTitle) || defaultState;\n\t\t} else {\n\t\t\tstate = defaultState;\n\t\t}\n\t} else {\n\t\tstate = this.stateTiddlerTitle ? this.wiki.getTextReference(this.state,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\t}\n\tif(state === null) {\n\t\tstate = this[\"default\"];\n\t}\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.isOpen = this.text === state;\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.isOpen = this.text !== state;\n\t\t\tbreak;\n\t\tcase \"lt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t\tcase \"gt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"lteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"gteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.compareStateText = function(state) {\n\treturn state.localeCompare(this.text,undefined,{numeric: true,sensitivity: \"case\"});\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes.positionAllowNegative || changedAttributes[\"default\"] || changedAttributes.animate || changedAttributes.stateTitle || changedAttributes.stateField || changedAttributes.stateIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar currentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\tvar self = this;\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n        $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\t//make sure that the state hasn't changed during the close animation\n\t\t\tself.readState()\n\t\t\tif(!self.isOpen) {\n\t\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t\t\t}\n\t\t}});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/scrollable.js": {
            "title": "$:/core/modules/widgets/scrollable.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tthis.scrollIntoView(event.target);\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/select.js": {
            "title": "$:/core/modules/widgets/select.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\t// Get the new value and assign it to the tiddler\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n\t// Trigger actions\n\tif(this.selectActions) {\n\t\tthis.invokeActionString(this.selectActions,this,event);\n\t}\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex,value);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tselect.children[i].selected = values.indexOf(select.children[i].value) !== -1\n\t\t}\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectActions = this.getAttribute(\"actions\");\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\tthis.selectTooltip = this.getAttribute(\"tooltip\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\tif(this.selectTooltip) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"title\",this.selectTooltip);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.selectTitle || changedAttributes.selectField || changedAttributes.selectIndex || changedAttributes.selectTooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(changedTiddlers[this.selectTitle] || childrenRefreshed) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn childrenRefreshed;\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/set.js": {
            "title": "$:/core/modules/widgets/set.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setSelect = this.getAttribute(\"select\");\n\tthis.setTiddler = this.getAttribute(\"tiddler\");\n\tthis.setSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.setField = this.getAttribute(\"field\");\n\tthis.setIndex = this.getAttribute(\"index\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,!!this.parseTreeNode.isMacroDefinition);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.setTiddler) {\n\t\tvar tiddler;\n\t\tif(this.setSubTiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.setTiddler,this.setSubTiddler);\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.setTiddler);\t\t\t\n\t\t}\n\t\tif(!tiddler) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t} else if(this.setField) {\n\t\t\tvalue = tiddler.getFieldString(this.setField) || this.setEmptyValue;\n\t\t} else if(this.setIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.setTiddler,this.setIndex,this.setEmptyValue);\n\t\t} else {\n\t\t\tvalue = tiddler.fields.text || this.setEmptyValue ;\n\t\t}\n\t} else if(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(this.setValue == null) {\n\t\t\tvar select;\n\t\t\tif(this.setSelect) {\n\t\t\t\tselect = parseInt(this.setSelect,10);\n\t\t\t}\n\t\t\tif(select !== undefined) {\n\t\t\t\tvalue = results[select] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = $tw.utils.stringifyList(results);\t\t\t\n\t\t\t}\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value || \"\";\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.select || changedAttributes.tiddler || (this.setTiddler && changedTiddlers[this.setTiddler]) || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes.emptyValue ||\n\t   (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/text.js": {
            "title": "$:/core/modules/widgets/text.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/tiddler.js": {
            "title": "$:/core/modules/widgets/tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/transclude.js": {
            "title": "$:/core/modules/widgets/transclude.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tthis.setVariable(\"transclusion\",recursionMarker);\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: $tw.language.getString(\"Error/RecursiveTransclusion\")}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/vars.js": {
            "title": "$:/core/modules/widgets/vars.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/vars.js\ntype: application/javascript\nmodule-type: widget\n\nThis widget allows multiple variables to be set in one go:\n\n```\n\\define helloworld() Hello world!\n<$vars greeting=\"Hi\" me={{!!title}} sentence=<<helloworld>>>\n  <<greeting>>! I am <<me>> and I say: <<sentence>>\n</$vars>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar VarsWidget = function(parseTreeNode,options) {\n\t// Call the constructor\n\tWidget.call(this);\n\t// Initialise\t\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nVarsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nVarsWidget.prototype.execute = function() {\n\t// Parse variables\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(val,key) {\n\t\tif(key.charAt(0) !== \"$\") {\n\t\t\tself.setVariable(key,val);\n\t\t}\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nVarsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"vars\"] = VarsWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/view.js": {
            "title": "$:/core/modules/widgets/view.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tthis.viewMode = this.getAttribute(\"mode\",\"block\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"plainwikified\":\n\t\t\tthis.text = this.getValueAsPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\t\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsPlainWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t}));\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/widget.js": {
            "title": "$:/core/modules/widgets/widget.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\t// Bail if parseTreeNode is undefined, meaning  that the widget constructor was called without any arguments so that it can be subclassed\n\tif(parseTreeNode === undefined) {\n\t\treturn;\n\t}\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\t// Get widget classes\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t\t// Process any subclasses\n\t\t$tw.modules.forEachModuleOfType(\"widget-subclass\",function(title,module) {\n\t\t\tif(module.baseClass) {\n\t\t\t\tvar baseClass = Widget.prototype.widgetClasses[module.baseClass];\n\t\t\t\tif(!baseClass) {\n\t\t\t\t\tthrow \"Module '\" + title + \"' is attemping to extend a non-existent base class '\" + module.baseClass + \"'\";\n\t\t\t\t}\n\t\t\t\tvar subClass = module.constructor;\n\t\t\t\tsubClass.prototype = new baseClass();\n\t\t\t\t$tw.utils.extend(subClass.prototype,module.prototype);\n\t\t\t\tWidget.prototype.widgetClasses[module.name || module.baseClass] = subClass;\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\nisMacroDefinition: true if the variable is set via a \\define macro pragma (and hence should have variable substitution performed)\n*/\nWidget.prototype.setVariable = function(name,value,params,isMacroDefinition) {\n\tthis.variables[name] = {value: value, params: params, isMacroDefinition: !!isMacroDefinition};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n\nReturns an object with the following fields:\n\nparams: array of {name:,value:} of parameters passed to wikitext variables\ntext: text of variable, with parameters properly substituted\n*/\nWidget.prototype.getVariableInfo = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\tvalue = variable.value,\n\t\t\tparams = this.resolveVariableParameters(variable.params,actualParams);\n\t\t// Substitute any parameters specified in the definition\n\t\t$tw.utils.each(params,function(param) {\n\t\t\tvalue = $tw.utils.replaceString(value,new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(param.name) + \"\\\\$\",\"mg\"),param.value);\n\t\t});\n\t\t// Only substitute variable references if this variable was defined with the \\define pragma\n\t\tif(variable.isMacroDefinition) {\n\t\t\tvalue = this.substituteVariableReferences(value);\t\t\t\n\t\t}\n\t\treturn {\n\t\t\ttext: value,\n\t\t\tparams: params\n\t\t};\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn {\n\t\ttext: this.evaluateMacroModule(name,actualParams,options.defaultValue)\n\t};\n};\n\n/*\nSimplified version of getVariableInfo() that just returns the text\n*/\nWidget.prototype.getVariable = function(name,options) {\n\treturn this.getVariableInfo(name,options).text;\n};\n\nWidget.prototype.resolveVariableParameters = function(formalParams,actualParams) {\n\tformalParams = formalParams || [];\n\tactualParams = actualParams || [];\n\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\tparamInfo, paramValue,\n\t\tresults = [];\n\t// Step through each of the parameters in the macro definition\n\tfor(var p=0; p<formalParams.length; p++) {\n\t\t// Check if we've got a macro call parameter with the same name\n\t\tparamInfo = formalParams[p];\n\t\tparamValue = undefined;\n\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t}\n\t\t}\n\t\t// If not, use the next available anonymous macro call parameter\n\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\tnextAnonParameter++;\n\t\t}\n\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t}\n\t\t// If we've still not got a value, use the default, if any\n\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t// Store the parameter name and value\n\t\tresults.push({name: paramInfo.name, value: paramValue});\n\t}\n\treturn results;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn (macro.run.apply(this,args) || \"\").toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"filtered\") {\n\t\t\tvalue = self.wiki.filterTiddlers(attribute.filter,self)[0] || \"\";\n\t\t} else if(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\tvar children = this.children;\n\tfor(var i = 0; i < children.length; i++) {\n\t\tchildren[i].render(parent,nextSibling);\n\t};\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar children = this.children,\n\t\trefreshed = false;\n\tfor (var i = 0; i < children.length; i++) {\n\t\trefreshed = children[i].refresh(changedTiddlers) || refreshed;\n\t}\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\tif(index !== -1) {\n\t\t\treturn parent.findNextSiblingDomNode(index);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke the action widgets that are descendents of the current widget.\n*/\nWidget.prototype.invokeActions = function(triggeringWidget,event) {\n\tvar handled = false;\n\t// For each child widget\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\t// Invoke the child if it is an action widget\n\t\tif(child.invokeAction) {\n\t\t\tchild.refreshSelf();\n\t\t\tif(child.invokeAction(triggeringWidget,event)) {\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t}\n\t\t// Propagate through through the child if it permits it\n\t\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\n/*\nInvoke the action widgets defined in a string\n*/\nWidget.prototype.invokeActionString = function(actions,triggeringWidget,event,variables) {\n\tactions = actions || \"\";\n\tvar parser = this.wiki.parseText(\"text/vnd.tiddlywiki\",actions,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t}),\n\t\twidgetNode = this.wiki.makeWidget(parser,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document,\n\t\t\tvariables: variables\n\t\t});\n\tvar container = this.document.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn widgetNode.invokeActions(this,event);\n};\n\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/wikify.js": {
            "title": "$:/core/modules/widgets/wikify.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/wikify.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to wikify text into a variable\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar WikifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nWikifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nWikifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWikifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.wikifyName = this.getAttribute(\"name\");\n\tthis.wikifyText = this.getAttribute(\"text\");\n\tthis.wikifyType = this.getAttribute(\"type\");\n\tthis.wikifyMode = this.getAttribute(\"mode\",\"block\");\n\tthis.wikifyOutput = this.getAttribute(\"output\",\"text\");\n\t// Create the parse tree\n\tthis.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{\n\t\t\tparseAsInline: this.wikifyMode === \"inline\"\n\t\t});\n\t// Create the widget tree \n\tthis.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{\n\t\t\tdocument: $tw.fakeDocument,\n\t\t\tparentWidget: this\n\t\t});\n\t// Render the widget tree to the container\n\tthis.wikifyContainer = $tw.fakeDocument.createElement(\"div\");\n\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\n\tthis.wikifyResult = this.getResult();\n\t// Set context variable\n\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nReturn the result string\n*/\nWikifyWidget.prototype.getResult = function() {\n\tvar result;\n\tswitch(this.wikifyOutput) {\n\t\tcase \"text\":\n\t\t\tresult = this.wikifyContainer.textContent;\n\t\t\tbreak;\n\t\tcase \"formattedtext\":\n\t\t\tresult = this.wikifyContainer.formattedTextContent;\n\t\t\tbreak;\n\t\tcase \"html\":\n\t\t\tresult = this.wikifyContainer.innerHTML;\n\t\t\tbreak;\n\t\tcase \"parsetree\":\n\t\t\tresult = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t\tcase \"widgettree\":\n\t\t\tresult = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t}\n\treturn result;\n};\n\n/*\nReturn a string of the widget tree\n*/\nWikifyWidget.prototype.getWidgetTree = function() {\n\tvar copyNode = function(widgetNode,resultNode) {\n\t\t\tvar type = widgetNode.parseTreeNode.type;\n\t\t\tresultNode.type = type;\n\t\t\tswitch(type) {\n\t\t\t\tcase \"element\":\n\t\t\t\t\tresultNode.tag = widgetNode.parseTreeNode.tag;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tresultNode.text = widgetNode.parseTreeNode.text;\n\t\t\t\t\tbreak;\t\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\n\t\t\t\tresultNode.attributes = {};\n\t\t\t\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\n\t\t\t\t\tresultNode.attributes[attrName] = widgetNode.getAttribute(attrName);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.children || {}).length > 0) {\n\t\t\t\tresultNode.children = [];\n\t\t\t\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\n\t\t\t\t\tvar node = {};\n\t\t\t\t\tresultNode.children.push(node);\n\t\t\t\t\tcopyNode(widgetChildNode,node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresults = {};\n\tcopyNode(this.wikifyWidgetNode,results);\n\treturn results;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWikifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh ourselves entirely if any of our attributes have changed\n\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Refresh the widget tree\n\t\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\n\t\t\t// Check if there was any change\n\t\t\tvar result = this.getResult();\n\t\t\tif(result !== this.wikifyResult) {\n\t\t\t\t// If so, save the change\n\t\t\t\tthis.wikifyResult = result;\n\t\t\t\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t\t\t\t// Refresh each of our child widgets\n\t\t\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\t\t\tchildWidget.refreshSelf();\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// Just refresh the children\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.wikify = WikifyWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/wiki-bulkops.js": {
            "title": "$:/core/modules/wiki-bulkops.js",
            "text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nfunction renameTiddler(fromTitle,toTitle,options) {\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar oldTiddler = this.getTiddler(fromTitle),\n\t\t\tnewTiddler = new $tw.Tiddler(oldTiddler,{title: toTitle},this.getModificationFields());\n\t\tnewTiddler = $tw.hooks.invokeHook(\"th-renaming-tiddler\",newTiddler,oldTiddler);\n\t\tthis.addTiddler(newTiddler);\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.relinkTiddler(fromTitle,toTitle,options)\n\t}\n}\n\n/*\nRelink any tags or lists that reference a given tiddler\n*/\nfunction relinkTiddler(fromTitle,toTitle,options) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar type = tiddler.fields.type || \"\";\n\t\t\t// Don't touch plugins or JavaScript modules\n\t\t\tif(!tiddler.fields[\"plugin-type\"] && type !== \"application/javascript\") {\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.slice(0) : undefined,\n\t\t\t\t\tlist = tiddler.fields.list ? tiddler.fields.list.slice(0) : undefined,\n\t\t\t\t\tisModified = false;\n\t\t\t\tif(!options.dontRenameInTags) {\n\t\t\t\t\t// Rename tags\n\t\t\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming tag '\" + tags[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(!options.dontRenameInLists) {\n\t\t\t\t\t// Rename lists\n\t\t\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming list item '\" + list[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(isModified) {\n\t\t\t\t\tvar newTiddler = new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())\n\t\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-relinking-tiddler\",newTiddler,tiddler);\n\t\t\t\t\tself.addTiddler(newTiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\nexports.renameTiddler = renameTiddler;\nexports.relinkTiddler = relinkTiddler;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/core/modules/wiki.js": {
            "title": "$:/core/modules/wiki.js",
            "text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\",\n\tTIMESTAMP_DISABLE_TITLE = \"$:/config/TimestampDisable\";\n\n/*\nAdd available indexers to this wiki\n*/\nexports.addIndexersToWiki = function() {\n\tvar self = this;\n\t$tw.utils.each($tw.modules.applyMethods(\"indexer\"),function(Indexer,name) {\n\t\tself.addIndexer(new Indexer(self),name);\n\t});\n};\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type]  || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.isBinaryTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.encoding === \"base64\";\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = {\n\t\t\t\tcreated: new Date()\n\t\t\t},\n\t\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\t\tif(creator) {\n\t\t\tfields.creator = creator;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = Object.create(null),\n\t\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\t\tfields.modified = new Date();\n\t\tif(modifier) {\n\t\t\tfields.modifier = modifier;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a sorted array of tiddler titles.  Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric,isAlphaNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tvar x,y,\n\t\t\tcompareNumbers = function(x,y) {\n\t\t\t\tvar result = \n\t\t\t\t\tisNaN(x) && !isNaN(y) ? (isDescending ? -1 : 1) :\n\t\t\t\t\t!isNaN(x) && isNaN(y) ? (isDescending ? 1 : -1) :\n\t\t\t\t\t\t\t\t\t\t\t(isDescending ? y - x :  x - y);\n\t\t\t\treturn result;\n\t\t\t};\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tx = Number(a);\n\t\ty = Number(b);\n\t\tif(isNumeric && (!isNaN(x) || !isNaN(y))) {\n\t\t\treturn compareNumbers(x,y);\n\t\t} else if(isAlphaNumeric) {\n\t\t\treturn isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \"base\"}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \"base\"});\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked within the given parse tree\n */\nexports.extractLinks = function(parseTreeRoot) {\n\t// Count up the links\n\tvar links = [],\n\t\tcheckParseTree = function(parseTree) {\n\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcheckParseTree(parseTreeRoot);\n\treturn links;\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\tif(parser) {\n\t\t\treturn self.extractLinks(parser.tree);\n\t\t}\n\t\treturn [];\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinksIndexer = this.getIndexer(\"BacklinksIndexer\"),\n\t\tbacklinks = backlinksIndexer && backlinksIndexer.lookup(targetTitle);\n\n\tif(!backlinks) {\n\t\tbacklinks = [];\n\t\tthis.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self.getTiddlerLinks(title);\n\t\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\t\tbacklinks.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\t// Try to use the indexer\n\tvar self = this,\n\t\ttagIndexer = this.getIndexer(\"TagIndexer\"),\n\t\tresults = tagIndexer && tagIndexer.subIndexers[3].lookup(tag);\n\tif(!results) {\n\t\t// If not available, perform a manual scan\n\t\tresults = this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\t\tvar tagmap = self.getTagMap();\n\t\t\treturn self.sortByList(tagmap[tag],tag);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar self = this,\n\t\treplacedTitles = Object.create(null);\n\t// Given a title, this function will place it in the correct location\n\t// within titles.\n\tfunction moveItemInList(title) {\n\t\tif(!$tw.utils.hop(replacedTitles, title)) {\n\t\t\treplacedTitles[title] = true;\n\t\t\tvar newPos = -1,\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(afterTitle === \"\") {\n\t\t\t\t\tnewPos = titles.length;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\t// if this title is placed relative\n\t\t\t\t\t// to another title, make sure that\n\t\t\t\t\t// title is placed before we place\n\t\t\t\t\t// this one.\n\t\t\t\t\tmoveItemInList(beforeTitle);\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\t// Same deal\n\t\t\t\t\tmoveItemInList(afterTitle);\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If a new position is specified, let's move it\n\t\t\t\tif (newPos !== -1) {\n\t\t\t\t\t// get its current Pos, and make sure\n\t\t\t\t\t// sure that it's _actually_ in the list\n\t\t\t\t\t// and that it would _actually_ move\n\t\t\t\t\t// (#4275) We don't bother calling\n\t\t\t\t\t//         indexOf unless we have a new\n\t\t\t\t\t//         position to work with\n\t\t\t\t\tvar currPos = titles.indexOf(title);\n\t\t\t\t\tif(currPos >= 0 && newPos !== currPos) {\n\t\t\t\t\t\t// move it!\n\t\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\tmoveItemInList(title);\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\nexports.getTiddlersAsJson = function(filter,spaces) {\n\tvar tiddlers = this.filterTiddlers(filter),\n\t\tspaces = (spaces === undefined) ? $tw.config.preferences.jsonSpaces : spaces,\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,spaces);\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,undefined);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t}) || defaultData;\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerDataCached(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(this.getCreationFields(),existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n\t// Use the generic binary parser for any binary types not registered so far\n\tif($tw.Wiki.parsers[\"application/octet-stream\"]) {\n\t\tObject.keys($tw.config.contentTypeInfo).forEach(function(type) {\n\t\t\tif(!$tw.utils.hop($tw.Wiki.parsers,type) && $tw.config.contentTypeInfo[type].encoding === \"base64\") {\n\t\t\t\t$tw.Wiki.parsers[type] = $tw.Wiki.parsers[\"application/octet-stream\"];\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\ttext = text || \"\";\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type,tiddler.fields.text,options);\t\t\t\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\ttext = title;\n\t\t} else {\n\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttext = tiddler.fields[field];\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\ttext = this.extractTiddlerDataItem(tiddler,index,undefined);\n\t\tif(text === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.mode: transclusion mode \"inline\" or \"block\"\noptions.children: optional array of children for the transclude widget\noptions.importVariables: optional importvariables filter string for macros to be included\noptions.importPageMacros: optional boolean; if true, equivalent to passing \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\" to options.importVariables\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTreeDiv = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: []}]},\n\t\tparseTreeImportVariables = {\n\t\t\ttype: \"importvariables\",\n\t\t\tattributes: {\n\t\t\t\tfilter: {\n\t\t\t\t\tname: \"filter\",\n\t\t\t\t\ttype: \"string\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: false,\n\t\t\tchildren: []},\n\t\tparseTreeTransclude = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {\n\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title}},\n\t\t\tisBlock: !options.parseAsInline};\n\tif(options.importVariables || options.importPageMacros) {\n\t\tif(options.importVariables) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = options.importVariables;\n\t\t} else if(options.importPageMacros) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\";\n\t\t}\n\t\tparseTreeDiv.tree[0].children.push(parseTreeImportVariables);\n\t\tparseTreeImportVariables.children.push(parseTreeTransclude);\n\t} else {\n\t\tparseTreeDiv.tree[0].children.push(parseTreeTransclude);\n\t}\n\tif(options.field) {\n\t\tparseTreeTransclude.attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTreeTransclude.attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTreeTransclude.children = options.children;\n\t}\n\treturn $tw.wiki.makeWidget(parseTreeDiv,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tfield: If specified, restricts the search to the specified field, or an array of field names\n\tanchored: If true, forces all but regexp searches to be anchored to the start of text\n\texcludeField: If true, the field options are inverted to specify the fields that are not to be searched\n\tThe search mode is determined by the first of these boolean flags to be true\n\t\tliteral: searches for literal string\n\t\twhitespace: same as literal except runs of whitespace are treated as a single space\n\t\tregexp: treats the search term as a regular expression\n\t\twords: (default) treats search string as a list of tokens, and matches if all tokens are found, regardless of adjacency or ordering\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\",\n\t\tanchor = options.anchored ? \"^\" : \"\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else if(options.whitespace) {\n\t\tterms = [];\n\t\t$tw.utils.each(text.split(/\\s+/g),function(term) {\n\t\t\tif(term) {\n\t\t\t\tterms.push($tw.utils.escapeRegExp(term));\n\t\t\t}\n\t\t});\n\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + terms.join(\"\\\\s+\") + \")\",flags)];\n\t} else if(options.regexp) {\n\t\ttry {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + text + \")\",flags)];\t\t\t\n\t\t} catch(e) {\n\t\t\tsearchTermsRegExps = null;\n\t\t\tconsole.log(\"Regexp error parsing /(\" + text + \")/\" + flags + \": \",e);\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Accumulate the array of fields to be searched or excluded from the search\n\tvar fields = [];\n\tif(options.field) {\n\t\tif($tw.utils.isArray(options.field)) {\n\t\t\t$tw.utils.each(options.field,function(fieldName) {\n\t\t\t\tif(fieldName) {\n\t\t\t\t\tfields.push(fieldName);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tfields.push(options.field);\n\t\t}\n\t}\n\t// Use default fields if none specified and we're not excluding fields (excluding fields with an empty field array is the same as searching all fields)\n\tif(fields.length === 0 && !options.excludeField) {\n\t\tfields.push(\"title\");\n\t\tfields.push(\"tags\");\n\t\tfields.push(\"text\");\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar notYetFound = searchTermsRegExps.slice();\n\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tsearchFields;\n\t\t// Get the list of fields we're searching\n\t\tif(options.excludeField) {\n\t\t\tsearchFields = Object.keys(tiddler.fields);\n\t\t\t$tw.utils.each(fields,function(fieldName) {\n\t\t\t\tvar p = searchFields.indexOf(fieldName);\n\t\t\t\tif(p !== -1) {\n\t\t\t\t\tsearchFields.splice(p,1);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsearchFields = fields;\n\t\t}\n\t\tfor(var fieldIndex=0; notYetFound.length>0 && fieldIndex<searchFields.length; fieldIndex++) {\n\t\t\t// Don't search the text field if the content type is binary\n\t\t\tvar fieldName = searchFields[fieldIndex];\n\t\t\tif(fieldName === \"text\" && contentTypeInfo.encoding !== \"utf8\") {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar str = tiddler.fields[fieldName],\n\t\t\t\tt;\n\t\t\tif(str) {\n\t\t\t\tif($tw.utils.isArray(str)) {\n\t\t\t\t\t// If the field value is an array, test each regexp against each field array entry and fail if each regexp doesn't match at least one field array entry\n\t\t\t\t\tfor(var s=0; s<str.length; s++) {\n\t\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\t\tif(notYetFound[t].test(str[s])) {\n\t\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If the field isn't an array, force it to a string and test each regexp against it and fail if any do not match\n\t\t\t\t\tstr = tiddler.getFieldString(fieldName);\n\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\tif(notYetFound[t].test(str)) {\n\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn notYetFound.length == 0;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== options.invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(!tiddler.hasField(\"_is_skinny\")) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text || \"\";\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nCheck whether the text of a tiddler matches a given value. By default, the comparison is case insensitive, and any spaces at either end of the tiddler text is trimmed\n*/\nexports.checkTiddlerText = function(title,targetText,options) {\n\toptions = options || {};\n\tvar text = this.getTiddlerText(title,\"\");\n\tif(!options.noTrim) {\n\t\ttext = text.trim();\n\t}\n\tif(!options.caseSensitive) {\n\t\ttext = text.toLowerCase();\n\t\ttargetText = targetText.toLowerCase();\n\t}\n\treturn text === targetText;\n}\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\tvar result = [],\n\t\toutstanding = files.length,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t};\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],$tw.utils.extend({},options,{callback: readFileCallback}));\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Give the hook a chance to process the drag\n\tif($tw.hooks.invokeHook(\"th-importing-file\",{\n\t\tfile: file,\n\t\ttype: type,\n\t\tisBinary: isBinary,\n\t\tcallback: callback\n\t}) !== true) {\n\t\tthis.readFileContent(file,type,isBinary,options.deserializer,callback);\n\t}\n};\n\n/*\nLower level utility to read the content of a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFileContent = function(file,type,isBinary,deserializer,callback) {\n\tvar self = this;\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\", type: type};\n\t\tif(isBinary) {\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttext = text.substr(commaPos + 1);\n\t\t\t}\n\t\t}\n\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedJson) {\n\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\tcallback(tiddlers);\n\t\t\t});\n\t\t} else {\n\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields,{deserializer: deserializer}));\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified.\nIf the original tiddler doesn't exist, create  a vanilla tiddler variable,\nto check if additional fields have been added.\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]) || new $tw.Tiddler({text:\"\", tags:[]}),\n\t\ttitleModified = tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"];\n\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\tstory.addToHistory(title,fromPageRect);\t\t\n};\n\n/*\nAdd a new tiddler to the story river\ntitle: a title string or an array of title strings\nfromTitle: the title of the tiddler from which the navigation originated\nstoryTitle: title of story tiddler (defaults to $:/StoryList)\noptions: see story.js\n*/\nexports.addToStory = function(title,fromTitle,storyTitle,options) {\n\tvar story = new $tw.Story({wiki: this, storyTitle: storyTitle});\n\tstory.addToStory(title,fromTitle,options);\t\t\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nexports.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle,\n\t\tusername = this.getTiddlerText(\"$:/status/UserName\"),\n\t\tattribution = username ? \" by \" + username : \"\";\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\" + attribution;\n\t\tc++;\n\t} while(this.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n// Determine whether a plugin by title is dynamically loadable\nexports.doesPluginRequireReload = function(title) {\n\treturn this.doesPluginInfoRequireReload(this.getPluginInfo(title) || this.getTiddlerDataCached(title));\n};\n\n// Determine whether a plugin info structure is dynamically loadable\nexports.doesPluginInfoRequireReload = function(pluginInfo) {\n\tif(pluginInfo) {\n\t\tvar foundModule = false;\n\t\t$tw.utils.each(pluginInfo.tiddlers,function(tiddler) {\n\t\t\tif(tiddler.type === \"application/javascript\" && $tw.utils.hop(tiddler,\"module-type\")) {\n\t\t\t\tfoundModule = true;\n\t\t\t}\n\t\t});\n\t\treturn foundModule;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/palettes/Blanca": {
            "title": "$:/palettes/Blanca",
            "name": "Blanca",
            "description": "A clean white palette to let you focus",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Blue": {
            "title": "$:/palettes/Blue",
            "name": "Blue",
            "description": "A blue theme",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Muted": {
            "title": "$:/palettes/Muted",
            "name": "Muted",
            "description": "Bright tiddlers on a muted background",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/ContrastLight": {
            "title": "$:/palettes/ContrastLight",
            "name": "Contrast (Light)",
            "description": "High contrast and unambiguous (light version)",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #000\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #000\ntag-foreground: #fff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/ContrastDark": {
            "title": "$:/palettes/ContrastDark",
            "name": "Contrast (Dark)",
            "description": "High contrast and unambiguous (dark version)",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #000\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #fff\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #fff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/DarkPhotos": {
            "title": "$:/palettes/DarkPhotos",
            "created": "20150402111612188",
            "description": "Good with dark photo backgrounds",
            "modified": "20150402112344080",
            "name": "DarkPhotos",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #ddd\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #336438\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #ccf\nsidebar-controls-foreground: #fff\nsidebar-foreground-shadow: rgba(0,0,0, 0.5)\nsidebar-foreground: #fff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #eee\nsidebar-tab-background-selected: rgba(255,255,255, 0.8)\nsidebar-tab-background: rgba(255,255,255, 0.4)\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: rgba(255,255,255, 0.2)\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #aaf\nsidebar-tiddler-link-foreground: #ddf\nsite-title-foreground: #fff\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/GruvboxDark": {
            "title": "$:/palettes/GruvboxDark",
            "name": "Gruvbox Dark",
            "description": "Retro groove color scheme",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "license": "https://github.com/morhetz/gruvbox",
            "text": "alert-background: #cc241d\nalert-border: #cc241d\nalert-highlight: #d79921\nalert-muted-foreground: #504945\nbackground: #3c3836\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: #504945\nbutton-foreground: #fbf1c7\nbutton-border: transparent\ncode-background: #504945\ncode-border: #504945\ncode-foreground: #fb4934\ndiff-delete-background: #fb4934\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #b8bb26\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #fb4934\ndownload-background: #b8bb26\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #665c54\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ebdbb2\ndropdown-tab-background: #665c54\ndropzone-background: #98971a\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #d3869b\nexternal-link-foreground: #8ec07c\nforeground: #fbf1c7\nmenubar-background: #504945\nmenubar-foreground: <<colour foreground>>\nmessage-background: #83a598\nmessage-border: #83a598\nmessage-foreground: #3c3836\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #504945\nmodal-footer-background: #3c3836\nmodal-footer-border: #3c3836\nmodal-header-border: #3c3836\nmuted-foreground: #d5c4a1\nnotification-background: <<colour primary>>\nnotification-border: <<colour primary>>\npage-background: #282828\npre-background: #504945\npre-border: #504945\nprimary: #d79921\nselect-tag-background: #665c54\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #7c6f64\nsidebar-controls-foreground: #504945\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #fbf1c7\nsidebar-muted-foreground-hover: #7c6f64\nsidebar-muted-foreground: #504945\nsidebar-tab-background-selected: #bdae93\nsidebar-tab-background: #3c3836\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #bdae93\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #282828\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #458588\nsidebar-tiddler-link-foreground: #98971a\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ebdbb2\ntab-background: #665c54\ntab-border-selected: #665c54\ntab-border: #665c54\ntab-divider: #bdae93\ntab-foreground-selected: #282828\ntab-foreground: #ebdbb2\ntable-border: #7c6f64\ntable-footer-background: #665c54\ntable-header-background: #504945\ntag-background: #d3869b\ntag-foreground: #282828\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #7c6f64\ntiddler-controls-foreground-selected: #7c6f64\ntiddler-controls-foreground: #665c54\ntiddler-editor-background: #282828\ntiddler-editor-border-image: #282828\ntiddler-editor-border: #282828\ntiddler-editor-fields-even: #504945\ntiddler-editor-fields-odd: #7c6f64\ntiddler-info-background: #32302f\ntiddler-info-border: #ebdbb2\ntiddler-info-tab-background: #ebdbb2\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #7c6f64\ntiddler-title-foreground: #a89984\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #504945\nvery-muted-foreground: #bdae93\nwikilist-background: <<colour page-background>>\nwikilist-button-background: <<colour button-background>>\nwikilist-button-foreground: <<colour button-foreground>>\nwikilist-item: <<colour background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-toolbar-foreground: <<colour foreground>>\nwikilist-title: <<colour foreground>>\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: <<colour muted-foreground>>\nwikilist-button-open-hover: <<colour primary>>\nwikilist-button-open: <<colour dropzone-background>>\nwikilist-button-remove: <<colour dirty-indicator>>\nwikilist-button-remove-hover: <<colour alert-background>>\nwikilist-droplink-dragover: <<colour dropzone-background>>\nwikilist-button-reveal: <<colour sidebar-tiddler-link-foreground-hover>>\nwikilist-button-reveal-hover: <<colour message-background>>"
        },
        "$:/palettes/Nord": {
            "title": "$:/palettes/Nord",
            "name": "Nord",
            "description": "An arctic, north-bluish color palette.",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "license": "MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md",
            "text": "alert-background: #D08770\nalert-border: #D08770\nalert-highlight: #B48EAD\nalert-muted-foreground: #4C566A\nbackground: #3b4252\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: #4C566A\nbutton-foreground: #D8DEE9\nbutton-border: transparent\ncode-background: #2E3440\ncode-border: #2E3440\ncode-foreground: #BF616A\ndiff-delete-background: #BF616A\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #A3BE8C\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #BF616A\ndownload-background: #A3BE8C\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ECEFF4\ndropdown-tab-background: #4C566A\ndropzone-background: #A3BE8C\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #5E81AC\nexternal-link-foreground: #8FBCBB\nforeground: #d8dee9\nmenubar-background: #2E3440\nmenubar-foreground: #d8dee9\nmessage-background: #2E3440\nmessage-border: #2E3440\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #3b4252\nmodal-footer-background: #3b4252\nmodal-footer-border: #3b4252\nmodal-header-border: #3b4252\nmuted-foreground: #4C566A\nnotification-background: <<colour primary>>\nnotification-border: #EBCB8B\npage-background: #2e3440\npre-background: #2E3440\npre-border: #2E3440\nprimary: #5E81AC\nselect-tag-background: #3b4252\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #D8DEE9\nsidebar-controls-foreground: #4C566A\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #D8DEE9\nsidebar-muted-foreground-hover: #4C566A\nsidebar-muted-foreground: #4C566A\nsidebar-tab-background-selected: #ECEFF4\nsidebar-tab-background: #4C566A\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #4C566A\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #4C566A\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #A3BE8C\nsidebar-tiddler-link-foreground: #81A1C1\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ECEFF4\ntab-background: #4C566A\ntab-border-selected: #4C566A\ntab-border: #4C566A\ntab-divider: #4C566A\ntab-foreground-selected: #4C566A\ntab-foreground: #D8DEE9\ntable-border: #4C566A\ntable-footer-background: #2e3440\ntable-header-background: #2e3440\ntag-background: #A3BE8C\ntag-foreground: #4C566A\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: \ntiddler-controls-foreground-selected: #EBCB8B\ntiddler-controls-foreground: #4C566A\ntiddler-editor-background: #2e3440\ntiddler-editor-border-image: #2e3440\ntiddler-editor-border: #2e3440\ntiddler-editor-fields-even: #2e3440\ntiddler-editor-fields-odd: #2e3440\ntiddler-info-background: #2e3440\ntiddler-info-border: #2e3440\ntiddler-info-tab-background: #2e3440\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #4C566A\ntiddler-title-foreground: #81A1C1\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #2d3038\nvery-muted-foreground: #2d3038\n"
        },
        "$:/palettes/Rocker": {
            "title": "$:/palettes/Rocker",
            "name": "Rocker",
            "description": "A dark theme",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/SolarFlare": {
            "title": "$:/palettes/SolarFlare",
            "name": "Solar Flare",
            "description": "Warm, relaxing earth colours",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": ": Background Tones\n\nbase03: #002b36\nbase02: #073642\n\n: Content Tones\n\nbase01: #586e75\nbase00: #657b83\nbase0: #839496\nbase1: #93a1a1\n\n: Background Tones\n\nbase2: #eee8d5\nbase3: #fdf6e3\n\n: Accent Colors\n\nyellow: #b58900\norange: #cb4b16\nred: #dc322f\nmagenta: #d33682\nviolet: #6c71c4\nblue: #268bd2\ncyan: #2aa198\ngreen: #859900\n\n: Additional Tones (RA)\n\nbase10: #c0c4bb\nviolet-muted: #7c81b0\nblue-muted: #4e7baa\n\nyellow-hot: #ffcc44\norange-hot: #eb6d20\nred-hot: #ff2222\nblue-hot: #2298ee\ngreen-hot: #98ee22\n\n: Palette\n\n: Do not use colour macro for background and foreground\nbackground: #fdf6e3\n    download-foreground: <<colour background>>\n    dragger-foreground: <<colour background>>\n    dropdown-background: <<colour background>>\n    modal-background: <<colour background>>\n    sidebar-foreground-shadow: <<colour background>>\n    tiddler-background: <<colour background>>\n    tiddler-border: <<colour background>>\n    tiddler-link-background: <<colour background>>\n    tab-background-selected: <<colour background>>\n        dropdown-tab-background-selected: <<colour tab-background-selected>>\nforeground: #657b83\n    dragger-background: <<colour foreground>>\n    tab-foreground: <<colour foreground>>\n        tab-foreground-selected: <<colour tab-foreground>>\n            sidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\n        sidebar-tab-foreground: <<colour tab-foreground>>\n    sidebar-button-foreground: <<colour foreground>>\n    sidebar-controls-foreground: <<colour foreground>>\n    sidebar-foreground: <<colour foreground>>\n: base03\n: base02\n: base01\n    alert-muted-foreground: <<colour base01>>\n: base00\n    code-foreground: <<colour base00>>\n    message-foreground: <<colour base00>>\n    tag-foreground: <<colour base00>>\n: base0\n    sidebar-tiddler-link-foreground: <<colour base0>>\n: base1\n    muted-foreground: <<colour base1>>\n        blockquote-bar: <<colour muted-foreground>>\n        dropdown-border: <<colour muted-foreground>>\n        sidebar-muted-foreground: <<colour muted-foreground>>\n        tiddler-title-foreground: <<colour muted-foreground>>\n            site-title-foreground: <<colour tiddler-title-foreground>>\n: base2\n    modal-footer-background: <<colour base2>>\n    page-background: <<colour base2>>\n        modal-backdrop: <<colour page-background>>\n        notification-background: <<colour page-background>>\n        code-background: <<colour page-background>>\n            code-border: <<colour code-background>>\n        pre-background: <<colour page-background>>\n            pre-border: <<colour pre-background>>\n        sidebar-tab-background-selected: <<colour page-background>>\n    table-header-background: <<colour base2>>\n    tag-background: <<colour base2>>\n    tiddler-editor-background: <<colour base2>>\n    tiddler-info-background: <<colour base2>>\n    tiddler-info-tab-background: <<colour base2>>\n    tab-background: <<colour base2>>\n        dropdown-tab-background: <<colour tab-background>>\n: base3\n    alert-background: <<colour base3>>\n    message-background: <<colour base3>>\n: yellow\n: orange\n: red\n: magenta\n    alert-highlight: <<colour magenta>>\n: violet\n    external-link-foreground: <<colour violet>>\n: blue\n: cyan\n: green\n: base10\n    tiddler-controls-foreground: <<colour base10>>\n: violet-muted\n    external-link-foreground-visited: <<colour violet-muted>>\n: blue-muted\n    primary: <<colour blue-muted>>\n        download-background: <<colour primary>>\n        tiddler-link-foreground: <<colour primary>>\n\nalert-border: #b99e2f\ndirty-indicator: #ff0000\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nmessage-border: #cfd6e6\nmodal-border: #999999\nselect-tag-background:\nselect-tag-foreground:\nsidebar-controls-foreground-hover:\nsidebar-muted-foreground-hover:\nsidebar-tab-background: #ded8c5\nsidebar-tiddler-link-foreground-hover:\nstatic-alert-foreground: #aaaaaa\ntab-border: #cccccc\n    modal-footer-border: <<colour tab-border>>\n    modal-header-border: <<colour tab-border>>\n    notification-border: <<colour tab-border>>\n    sidebar-tab-border: <<colour tab-border>>\n    tab-border-selected: <<colour tab-border>>\n        sidebar-tab-border-selected: <<colour tab-border-selected>>\ntab-divider: #d8d8d8\n    sidebar-tab-divider: <<colour tab-divider>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-border: #dddddd\ntiddler-subtitle-foreground: #c0c0c0\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/SolarizedLight": {
            "title": "$:/palettes/SolarizedLight",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "description": "Precision colors for machines and people",
            "license": "MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE",
            "name": "SolarizedLight",
            "text": "alert-background: #eee8d5\nalert-border: #073642\nalert-highlight: #cb4b16\nalert-muted-foreground: #586e75\nbackground: #fdf6e3\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: #cb4b16\nbutton-foreground: #fdf6e3\nbutton-border: transparent\ncode-background: #eee8d5\ncode-border: #93a1a1\ncode-foreground: #d33682\ndiff-delete-background: #BF616A\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #859900\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #D08770\ndownload-background: #859900\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #fdf6e3\ndropdown-tab-background: #93a1a1\ndropzone-background: #859900\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: #d33682\nexternal-link-foreground-visited: #b58900\nexternal-link-foreground: #cb4b16\nforeground: #839496\nmessage-background: #586e75\nmessage-border: #586e75\nmessage-foreground: #eee8d5\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #eee8d5\nmodal-footer-background: #eee8d5\nmodal-footer-border: #eee8d5\nmodal-header-border: #eee8d5\nmuted-foreground: #93a1a1\nnotification-background: #EBCB8B\nnotification-border: #D08770\npage-background: #eee8d5\npre-background: #eee8d5\npre-border: #93a1a1\nprimary: #2aa198\nselect-tag-background: #eee8d5\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: #eee8d5\nsidebar-controls-foreground-hover: #268bd2\nsidebar-controls-foreground: #586e75\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #839496\nsidebar-muted-foreground-hover: #657b83\nsidebar-muted-foreground: #93a1a1\nsidebar-tab-background-selected: #eee8d5\nsidebar-tab-background: #839496\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #657b83\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #839496\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #859900\nsidebar-tiddler-link-foreground: #268bd2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #dc322f\ntab-background-selected: #fdf6e3\ntab-background: #839496\ntab-border-selected: #93a1a1\ntab-border: #93a1a1\ntab-divider: #fdf6e3\ntab-foreground-selected: #839496\ntab-foreground: #eee8d5\ntable-border: #657b83\ntable-footer-background: #657b83\ntable-header-background: #93a1a1\ntag-background: #6c71c4\ntag-foreground: #eee8d5\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #b58900\ntiddler-controls-foreground-selected: #b58900\ntiddler-controls-foreground: #073642\ntiddler-editor-background: #eee8d5\ntiddler-editor-border-image: #eee8d5\ntiddler-editor-border: #eee8d5\ntiddler-editor-fields-even: #eee8d5\ntiddler-editor-fields-odd: #fdf6e3\ntiddler-info-background: #eee8d5\ntiddler-info-border: #eee8d5\ntiddler-info-tab-background: #586e75\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #586e75\ntiddler-title-foreground: #073642\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #839496\nvery-muted-foreground: #93a1a1\n"
        },
        "$:/palettes/SpartanDay": {
            "title": "$:/palettes/SpartanDay",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "description": "Cold, spartan day colors",
            "name": "Spartan Day",
            "text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #FAFAFA\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: #ececec\ncode-border: #ececec\ncode-foreground: \ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #FFFFFF\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #F5F5F5\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: \nexternal-link-foreground: \nforeground: rgba(0, 0, 0, 0.87)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(0, 0, 0, 0.54)\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour very-muted-foreground>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(0, 0, 0, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #f4f4f4\npre-background: #ececec\npre-border: #ececec\nprimary: #3949ab\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #aeaeae\nsidebar-controls-foreground: #c6c6c6\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground-hover: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground: rgba(0, 0, 0, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(0, 0, 0, 0.87)\nsidebar-tab-foreground: rgba(0, 0, 0, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(0, 0, 0, 0.87)\nsidebar-tiddler-link-foreground: rgba(0, 0, 0, 0.54)\nsite-title-foreground: rgba(0, 0, 0, 0.87)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(0, 0, 0, 0.87)\ntab-foreground: rgba(0, 0, 0, 0.54)\ntable-border: #d8d8d8\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: #f9f9f9\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: #e8e7e7\ntiddler-editor-fields-even: rgba(0, 0, 0, 0.1)\ntiddler-editor-fields-odd: rgba(0, 0, 0, 0.04)\ntiddler-info-background: #F5F5F5\ntiddler-info-border: #F5F5F5\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #000000\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(0, 0, 0, 0.12)\n"
        },
        "$:/palettes/SpartanNight": {
            "title": "$:/palettes/SpartanNight",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "description": "Dark spartan colors",
            "name": "Spartan Night",
            "text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #303030\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: <<colour pre-background>>\ncode-border: <<colour pre-border>>\ncode-foreground: rgba(255, 255, 255, 0.54)\ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #424242\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #050505\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #7c318c\nexternal-link-foreground: #9e3eb3\nforeground: rgba(255, 255, 255, 0.7)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(255, 255, 255, 0.54)\nmodal-backdrop: <<colour page-background>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour background>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(255, 255, 255, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #212121\npre-background: #2a2a2a\npre-border: transparent\nprimary: #5656f3\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #494949\nsidebar-controls-foreground: #5d5d5d\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\nsite-title-foreground: rgba(255, 255, 255, 0.7)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\ntab-foreground: rgba(255, 255, 255, 0.54)\ntable-border: #3a3a3a\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: rgb(55,55,55)\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: rgba(255, 255, 255, 0.08)\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\ntiddler-info-background: #454545\ntiddler-info-border: #454545\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #FFFFFF\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(255, 255, 255, 0.12)\n"
        },
        "$:/palettes/Twilight": {
            "title": "$:/palettes/Twilight",
            "tags": "$:/tags/Palette",
            "author": "Thomas Elmiger",
            "type": "application/x-tiddler-dictionary",
            "name": "Twilight",
            "description": "Delightful, soft darkness.",
            "text": "alert-background: rgb(255, 255, 102)\nalert-border: rgb(232, 232, 125)\nalert-highlight: rgb(255, 51, 51)\nalert-muted-foreground: rgb(224, 82, 82)\nbackground: rgb(38, 38, 38)\nblockquote-bar: rgba(240, 196, 117, 0.7)\nbutton-background: rgb(63, 63, 63)\nbutton-border: rgb(127, 127, 127)\nbutton-foreground: rgb(179, 179, 179)\ncode-background: rgba(0,0,0,0.03)\ncode-border: rgba(0,0,0,0.08)\ncode-foreground: rgb(255, 94, 94)\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: rgb(255, 94, 94)\ndownload-background: #19a974\ndownload-foreground: rgb(38, 38, 38)\ndragger-background: rgb(179, 179, 179)\ndragger-foreground: rgb(38, 38, 38)\ndropdown-background: rgb(38, 38, 38)\ndropdown-border: rgb(255, 255, 255)\ndropdown-tab-background: rgba(0,0,0,.1)\ndropdown-tab-background-selected: rgba(255,255,255,1)\ndropzone-background: #9eebcf\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: rgb(179, 179, 255)\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: rgb(153, 153, 255)\nforeground: rgb(179, 179, 179)\nmessage-background: <<colour tag-foreground>>\nmessage-border: #96ccff\nmessage-foreground: <<colour tag-background>>\nmodal-backdrop: rgb(179, 179, 179)\nmodal-background: rgb(38, 38, 38)\nmodal-border: rgba(0,0,0,.5)\nmodal-footer-background: #f4f4f4\nmodal-footer-border: rgba(0,0,0,.1)\nmodal-header-border: rgba(0,0,0,.2)\nmuted-foreground: rgb(255, 255, 255)\nnotification-background: <<colour tag-foreground>>\nnotification-border: <<colour tag-background>>\npage-background: rgb(26, 26, 26)\npre-background: rgb(25, 25, 25)\npre-border: rgba(0,0,0,.2)\nprimary: rgb(255, 201, 102)\nselect-tag-background: \nselect-tag-foreground: \nsidebar-button-foreground: rgb(179, 179, 179)\nsidebar-controls-foreground: rgb(153, 153, 153)\nsidebar-controls-foreground-hover: <<colour tiddler-controls-foreground-hover>>\nsidebar-foreground: rgb(141, 141, 141)\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: rgba(0, 0, 0, 0.5)\nsidebar-muted-foreground-hover: rgb(141, 141, 141)\nsidebar-tab-background: rgba(141, 141, 141, 0.2)\nsidebar-tab-background-selected: rgb(26, 26, 26)\nsidebar-tab-border: rgb(127, 127, 127)\nsidebar-tab-border-selected: rgb(127, 127, 127)\nsidebar-tab-divider: rgb(127, 127, 127)\nsidebar-tab-foreground: rgb(179, 179, 179)\nsidebar-tab-foreground-selected: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground-hover: rgb(115, 115, 115)\nsite-title-foreground: rgb(255, 201, 102)\nstatic-alert-foreground: rgba(0,0,0,.3)\ntab-background: rgba(0,0,0,0.125)\ntab-background-selected: rgb(38, 38, 38)\ntab-border: rgb(255, 201, 102)\ntab-border-selected: rgb(255, 201, 102)\ntab-divider: rgb(255, 201, 102)\ntab-foreground: rgb(179, 179, 179)\ntab-foreground-selected: rgb(179, 179, 179)\ntable-border: rgba(255,255,255,.3)\ntable-footer-background: rgba(0,0,0,.4)\ntable-header-background: rgba(0,0,0,.1)\ntag-background: rgb(255, 201, 102)\ntag-foreground: rgb(25, 25, 25)\ntiddler-background: rgb(38, 38, 38)\ntiddler-border: rgba(240, 196, 117, 0.7)\ntiddler-controls-foreground: rgb(128, 128, 128)\ntiddler-controls-foreground-hover: rgba(255, 255, 255, 0.8)\ntiddler-controls-foreground-selected: rgba(255, 255, 255, 0.9)\ntiddler-editor-background: rgb(33, 33, 33)\ntiddler-editor-border: rgb(63, 63, 63)\ntiddler-editor-border-image: rgb(25, 25, 25)\ntiddler-editor-fields-even: rgb(33, 33, 33)\ntiddler-editor-fields-odd: rgb(28, 28, 28)\ntiddler-info-background: rgb(43, 43, 43)\ntiddler-info-border: rgb(25, 25, 25)\ntiddler-info-tab-background: rgb(43, 43, 43)\ntiddler-link-background: rgb(38, 38, 38)\ntiddler-link-foreground: rgb(204, 204, 255)\ntiddler-subtitle-foreground: rgb(255, 255, 255)\ntiddler-title-foreground: rgb(255, 192, 76)\ntoolbar-cancel-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-done-button: \ntoolbar-edit-button: \ntoolbar-info-button: \ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \nuntagged-background: rgb(255, 255, 255)\nvery-muted-foreground: rgba(240, 196, 117, 0.7)\n"
        },
        "$:/palettes/Vanilla": {
            "title": "$:/palettes/Vanilla",
            "name": "Vanilla",
            "description": "Pale and unobtrusive",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #f4f4f4\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #f4f4f4\nsidebar-tab-background: #e0e0e0\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected:\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\nwikilist-background: #e5e5e5\nwikilist-item: #fff\nwikilist-info: #000\nwikilist-title: #666\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: #aaa\nwikilist-button-open: #4fb82b\nwikilist-button-open-hover: green\nwikilist-button-reveal: #5778d8\nwikilist-button-reveal-hover: blue\nwikilist-button-remove: #d85778\nwikilist-button-remove-hover: red\nwikilist-toolbar-background: #d3d3d3\nwikilist-toolbar-foreground: #888\nwikilist-droplink-dragover: rgba(255,192,192,0.5)\nwikilist-button-background: #acacac\nwikilist-button-foreground: #000\n"
        },
        "$:/core/readme": {
            "title": "$:/core/readme",
            "text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n"
        },
        "$:/library/sjcl.js/license": {
            "title": "$:/library/sjcl.js/license",
            "type": "text/plain",
            "text": "SJCL is open. You can use, modify and redistribute it under a BSD\nlicense or under the GNU GPL, version 2.0.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/BSD-2-Clause\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/GPL-2.0\n\nThe Stanford Javascript Crypto Library (hosted here on GitHub) is a\nproject by the Stanford Computer Security Lab to build a secure,\npowerful, fast, small, easy-to-use, cross-browser library for\ncryptography in Javascript.\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2 of the License, or (at your\noption) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\nPublic License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
        },
        "$:/core/templates/MOTW.html": {
            "title": "$:/core/templates/MOTW.html",
            "text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)https://tiddlywiki.com -->&#13;&#10;"
        },
        "$:/core/templates/alltiddlers.template.html": {
            "title": "$:/core/templates/alltiddlers.template.html",
            "type": "text/vnd.tiddlywiki-html",
            "text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
        },
        "$:/core/templates/canonical-uri-external-image": {
            "title": "$:/core/templates/canonical-uri-external-image",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
        },
        "$:/core/templates/canonical-uri-external-raw": {
            "title": "$:/core/templates/canonical-uri-external-raw",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external raw files that are stored in the same directory\n\n-->\n<$view field=\"title\" format=\"doubleurlencoded\"/>"
        },
        "$:/core/templates/canonical-uri-external-text": {
            "title": "$:/core/templates/canonical-uri-external-text",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid"
        },
        "$:/core/templates/css-tiddler": {
            "title": "$:/core/templates/css-tiddler",
            "text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
        },
        "$:/core/templates/exporters/CsvFile": {
            "title": "$:/core/templates/exporters/CsvFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/CsvFile}}",
            "extension": ".csv",
            "text": "\\define renderContent()\n<$text text=<<csvtiddlers filter:\"\"\"$(exportFilter)$\"\"\" format:\"quoted-comma-sep\">>/>\n\\end\n<<renderContent>>\n"
        },
        "$:/core/templates/exporters/JsonFile": {
            "title": "$:/core/templates/exporters/JsonFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/JsonFile}}",
            "extension": ".json",
            "text": "\\define renderContent()\n<$text text=<<jsontiddlers filter:\"\"\"$(exportFilter)$\"\"\">>/>\n\\end\n<<renderContent>>\n"
        },
        "$:/core/templates/exporters/StaticRiver": {
            "title": "$:/core/templates/exporters/StaticRiver",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/StaticRiver}}",
            "extension": ".html",
            "text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"tc-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
        },
        "$:/core/templates/exporters/StaticRiver/Content": {
            "title": "$:/core/templates/exporters/StaticRiver/Content",
            "text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>\n"
        },
        "$:/core/templates/exporters/TidFile": {
            "title": "$:/core/templates/exporters/TidFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/TidFile}}",
            "extension": ".tid",
            "text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>"
        },
        "$:/core/save/all-external-js": {
            "title": "$:/core/save/all-external-js",
            "text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/core]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5-external-js.html}}\n"
        },
        "$:/core/templates/tiddlywiki5.js": {
            "title": "$:/core/templates/tiddlywiki5.js",
            "text": "\\rules only filteredtranscludeinline transcludeinline codeinline\n\n/*\n{{ $:/core/copyright.txt ||$:/core/templates/plain-text-tiddler}}\n`*/\n`<!--~~ Library modules ~~-->\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/plain-text-tiddler}}}\n<!--~~ Boot prefix ~~-->\n{{ $:/boot/bootprefix.js ||$:/core/templates/plain-text-tiddler}}\n<!--~~ Core plugin ~~-->\n{{$:/core/templates/tiddlywiki5.js/tiddlers}}\n<!--~~ Boot kernel ~~-->\n{{ $:/boot/boot.js ||$:/core/templates/plain-text-tiddler}}\n"
        },
        "$:/core/templates/tiddlywiki5.js/tiddlers": {
            "title": "$:/core/templates/tiddlywiki5.js/tiddlers",
            "text": "`\n$tw.preloadTiddlerArray(`<$text text=<<jsontiddlers \"[[$:/core]]\">>/>`);\n$tw.preloadTiddlerArray([{\n\ttitle: \"$:/config/SaveWikiButton/Template\",\n\ttext: \"$:/core/save/all-external-js\"\n}]);\n`\n"
        },
        "$:/core/templates/tiddlywiki5-external-js.html": {
            "title": "$:/core/templates/tiddlywiki5-external-js.html",
            "text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Raw markup for the bottom of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}\n</body>\n<script src=\"%24%3A%2Fcore%2Ftemplates%2Ftiddlywiki5.js\" onerror=\"alert('Error: Cannot load tiddlywiki.js');\"></script>\n</html>\n"
        },
        "$:/core/templates/html-div-skinny-tiddler": {
            "title": "$:/core/templates/html-div-skinny-tiddler",
            "text": "<!--\n\nThis template is a variant of $:/core/templates/html-div-tiddler used for saving skinny tiddlers (with no text field)\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre></pre>\n</div>`\n"
        },
        "$:/core/templates/html-div-tiddler": {
            "title": "$:/core/templates/html-div-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
        },
        "$:/core/templates/html-tiddler": {
            "title": "$:/core/templates/html-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
        },
        "$:/core/templates/javascript-tiddler": {
            "title": "$:/core/templates/javascript-tiddler",
            "text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
        },
        "$:/core/templates/json-tiddler": {
            "title": "$:/core/templates/json-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as raw JSON\n\n--><$text text=<<jsontiddler>>/>"
        },
        "$:/core/templates/module-tiddler": {
            "title": "$:/core/templates/module-tiddler",
            "text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
        },
        "$:/core/templates/plain-text-tiddler": {
            "title": "$:/core/templates/plain-text-tiddler",
            "text": "<$view field=\"text\" format=\"text\" />"
        },
        "$:/core/templates/raw-static-tiddler": {
            "title": "$:/core/templates/raw-static-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as static HTML\n\n--><$view field=\"text\" format=\"plainwikified\" />"
        },
        "$:/core/save/all": {
            "title": "$:/core/save/all",
            "text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/empty": {
            "title": "$:/core/save/empty",
            "text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/lazy-all": {
            "title": "$:/core/save/lazy-all",
            "text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[!is[system]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/lazy-images": {
            "title": "$:/core/save/lazy-images",
            "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[is[image]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/templates/server/static.sidebar.wikitext": {
            "title": "$:/core/templates/server/static.sidebar.wikitext",
            "text": "\\whitespace trim\n<div class=\"tc-sidebar-scrollable\" style=\"overflow: auto;\">\n<div class=\"tc-sidebar-header\">\n<h1 class=\"tc-site-title\">\n<$transclude tiddler=\"$:/SiteTitle\"/>\n</h1>\n<div class=\"tc-site-subtitle\">\n<$transclude tiddler=\"$:/SiteSubtitle\"/>\n</div>\n<h2>\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$list filter={{$:/DefaultTiddlers}}>\n<div class=\"tc-menu-list-subitem\">\n<$link><$text text=<<currentTiddler>>/></$link>\n</div>\n</$list>\n</div>\n<!-- Currently disabled the recent list as it is unweildy when the responsive narrow view kicks in\n<h2>\n{{$:/language/SideBar/Recent/Caption}}\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n</div>\n</div>\n</div>\n-->\n"
        },
        "$:/core/templates/server/static.tiddler.html": {
            "title": "$:/core/templates/server/static.tiddler.html",
            "text": "\\whitespace trim\n\\define tv-wikilink-template() $uri_encoded$\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content={{$:/core/templates/version}} />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"%24%3A%2Fcore%2Ftemplates%2Fstatic.template.css\">\n<title><$view field=\"caption\" format=\"plainwikified\"><$view field=\"title\"/></$view>: <$view tiddler=\"$:/core/wiki/title\" format=\"plainwikified\"/></title>\n</head>\n<body class=\"tc-body\">\n<$transclude tiddler=\"$:/core/templates/server/static.sidebar.wikitext\" mode=\"inline\"/>\n<section class=\"tc-story-river\">\n<div class=\"tc-tiddler-frame\">\n<$transclude tiddler=\"$:/core/templates/server/static.tiddler.wikitext\" mode=\"inline\"/>\n</div>\n</section>\n</body>\n</html>"
        },
        "$:/core/templates/server/static.tiddler.wikitext": {
            "title": "$:/core/templates/server/static.tiddler.wikitext",
            "text": "\\whitespace trim\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<h2><$text text=<<currentTiddler>>/></h2>\n</div>\n</div>\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n<div class=\"tc-tags-wrapper\">\n<$list filter=\"[all[current]tags[]sort[title]]\">\n<a href={{{ [<currentTiddler>encodeuricomponent[]] }}}>\n<$macrocall $name=\"tag-pill\" tag=<<currentTiddler>>/>\n</a>\n</$list>\n</div>\n<div class=\"tc-tiddler-body\">\n<$transclude mode=\"block\"/>\n</div>\n"
        },
        "$:/core/templates/single.tiddler.window": {
            "title": "$:/core/templates/single.tiddler.window",
            "text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value={{$:/config/Toolbar/ButtonClass}}>\n\n<$set name=\"tv-show-missing-links\" value={{$:/config/MissingLinks}}>\n\n<$set name=\"storyviewTitle\" value={{$:/view}}>\n\n<$set name=\"languageTitle\" value={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n</$navigator>\n\n</div>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/templates/split-recipe": {
            "title": "$:/core/templates/split-recipe",
            "text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
        },
        "$:/core/templates/static-tiddler": {
            "title": "$:/core/templates/static-tiddler",
            "text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
        },
        "$:/core/templates/static.area": {
            "title": "$:/core/templates/static.area",
            "text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawStaticContent]!has[draft.of]] ||$:/core/templates/raw-static-tiddler}}}\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n<!-- ensure splash screen isn't shown when JS is disabled -->\n`<style>\n.tc-remove-when-wiki-loaded {display: none;}\n</style>`\n"
        },
        "$:/core/templates/static.content": {
            "title": "$:/core/templates/static.content",
            "text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|https://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
        },
        "$:/core/templates/static.template.css": {
            "title": "$:/core/templates/static.template.css",
            "text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
        },
        "$:/core/templates/static.template.html": {
            "title": "$:/core/templates/static.template.html",
            "type": "text/vnd.tiddlywiki-html",
            "text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
        },
        "$:/core/templates/static.tiddler.html": {
            "title": "$:/core/templates/static.tiddler.html",
            "text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river\">\n`<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>`\n</section>\n</body>\n</html>\n`"
        },
        "$:/core/templates/store.area.template.html": {
            "title": "$:/core/templates/store.area.template.html",
            "text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n<$list filter={{{ [<skinnySaveTiddlerFilter>] }}} template=\"$:/core/templates/html-div-skinny-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
        },
        "$:/core/templates/tid-tiddler": {
            "title": "$:/core/templates/tid-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
        },
        "$:/core/templates/tiddler-metadata": {
            "title": "$:/core/templates/tiddler-metadata",
            "text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
        },
        "$:/core/templates/tiddlywiki5.html": {
            "title": "$:/core/templates/tiddlywiki5.html",
            "text": "<$set name=\"saveTiddlerAndShadowsFilter\" filter=\"[subfilter<saveTiddlerFilter>] [subfilter<saveTiddlerFilter>plugintiddlers[]]\">\n`<!doctype html>\n`{{$:/core/templates/MOTW.html}}`<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n`{{{ [<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}`\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"`{{$:/core/copyright.txt}}`\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>`{{$:/core/wiki/title}}`</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}`\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}`\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n`{{$:/boot/boot.css||$:/core/templates/css-tiddler}}`\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n`{{$:/core/templates/static.area}}`\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n`{{$:/core/templates/store.area.template.html}}`\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n`{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}`\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n`{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n`{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Raw markup for the bottom of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}`\n</body>\n</html>`\n"
        },
        "$:/core/templates/version": {
            "title": "$:/core/templates/version",
            "text": "<<version>>"
        },
        "$:/core/templates/wikified-tiddler": {
            "title": "$:/core/templates/wikified-tiddler",
            "text": "<$transclude />"
        },
        "$:/core/ui/AboveStory/tw2-plugin-check": {
            "title": "$:/core/ui/AboveStory/tw2-plugin-check",
            "tags": "$:/tags/AboveStory",
            "text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n<ul>\n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]]\">\n\n<li>\n\n<$link><$view field=\"title\"/></$link>\n\n</li>\n\n</$list>\n\n</ul>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/Actions/new-image": {
            "title": "$:/core/ui/Actions/new-image",
            "tags": "$:/tags/Actions",
            "description": "create a new image tiddler",
            "text": "\\define get-type()\nimage/$(imageType)$\n\\end\n<$vars imageType={{$:/config/NewImageType}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=<<get-type>> tags={{$:/config/NewTiddler/Tags!!tags}}/>\n</$vars>\n"
        },
        "$:/core/ui/Actions/new-journal": {
            "title": "$:/core/ui/Actions/new-journal",
            "tags": "$:/tags/Actions",
            "description": "create a new journal tiddler",
            "text": "<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} journalTags={{$:/config/NewJournal/Tags!!tags}} journalText={{$:/config/NewJournal/Text}}>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$reveal type=\"nomatch\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalTags>> text={{{ [<journalTitle>get[]] }}}/>\n</$reveal>\n<$reveal type=\"match\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalTags>> text=<<journalText>>/>\n</$reveal>\n</$wikify>\n</$vars>\n"
        },
        "$:/core/ui/Actions/new-tiddler": {
            "title": "$:/core/ui/Actions/new-tiddler",
            "tags": "$:/tags/Actions",
            "description": "create a new empty tiddler",
            "text": "<$action-sendmessage $message=\"tm-new-tiddler\" tags={{$:/config/NewTiddler/Tags!!tags}}/>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter": {
            "title": "$:/core/ui/AdvancedSearch/Filter",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Filter/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]\"><$transclude/></$list>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$set>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button popup=<<qualify \"$:/state/filterDeleteDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}\n</$button>\n</$reveal>\n\n<$reveal state=<<qualify \"$:/state/filterDeleteDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<div class=\"tc-dropdown-item-plain\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nAre you sure you wish to delete <<resultCount>> tiddler(s)?\n</$set>\n</div>\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn\">\n<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>\nDelete these tiddlers\n</$button>\n</div>\n</div>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</span>\n\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</div>\n</$linkcatcher>\n</$set>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Shadows": {
            "title": "$:/core/ui/AdvancedSearch/Shadows",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Shadows/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo Shadows/Matches>>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Standard": {
            "title": "$:/core/ui/AdvancedSearch/Standard",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Standard/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$set name=\"searchTiddler\" value=\"$:/temp/advancedsearch\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n</$list>\n</$set>\n</$list>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/System": {
            "title": "$:/core/ui/AdvancedSearch/System",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/System/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo System/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
        },
        "$:/AdvancedSearch": {
            "title": "$:/AdvancedSearch",
            "icon": "$:/core/images/advanced-search-button",
            "color": "#bbb",
            "text": "<div class=\"tc-advanced-search\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" \"$:/core/ui/AdvancedSearch/System\">>\n</div>\n"
        },
        "$:/core/ui/AlertTemplate": {
            "title": "$:/core/ui/AlertTemplate",
            "text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/cancel-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$wikify name=\"format\" text=<<lingo Tiddler/DateFormat>>>\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=<<format>>/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">({{$:/language/Count}}: <$view field=\"count\"/>)</span></$reveal>\n</$wikify>\n</div>\n<div class=\"tc-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
        },
        "$:/core/ui/BinaryWarning": {
            "title": "$:/core/ui/BinaryWarning",
            "text": "\\define lingo-base() $:/language/BinaryWarning/\n<<lingo Prompt>>\n"
        },
        "$:/core/ui/Components/plugin-info": {
            "title": "$:/core/ui/Components/plugin-info",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage,default-popup-state)\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1>\n''<$text text={{{ [<currentTiddler>get[name]] ~[<currentTiddler>split[/]last[1]] }}}/>'': <$view field=\"description\"><$view field=\"title\"/></$view> $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2>\n</div>\n\\end\n\n\\define plugin-info(type,default-popup-state)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>> default=\"\"\"$default-popup-state$\"\"\">\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-body\">\n<$list filter=\"[all[current]] -[[$:/core]]\">\n<div style=\"float:right;\">\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<<lingo Disable/Caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<<lingo Enable/Caption>>\n</$button>\n</$reveal>\n</div>\n</$list>\n<$set name=\"tabsList\" filter=\"[<currentTiddler>list[]] contents\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList=<<tabsList>> default={{{ [enlist<tabsList>] }}} template=\"$:/core/ui/PluginInfo\"/>\n</$set>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n<$macrocall $name=\"plugin-info\" type=<<plugin-type>> default-popup-state=<<default-popup-state>>/>\n"
        },
        "$:/core/ui/Components/tag-link": {
            "title": "$:/core/ui/Components/tag-link",
            "text": "<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n</span>\n</$set>\n</$link>"
        },
        "$:/core/ui/ControlPanel/Advanced": {
            "title": "$:/core/ui/ControlPanel/Advanced",
            "tags": "$:/tags/ControlPanel/Info",
            "caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
            "text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" \"$:/core/ui/ControlPanel/TiddlerFields\">>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Appearance": {
            "title": "$:/core/ui/ControlPanel/Appearance",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
            "text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Theme\">>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Basics": {
            "title": "$:/core/ui/ControlPanel/Basics",
            "tags": "$:/tags/ControlPanel/Info",
            "caption": "{{$:/language/ControlPanel/Basics/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\" class=\"tc-edit-texteditor\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<$link to=\"$:/language/DefaultNewTiddlerTitle\"><<lingo NewTiddler/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/language/DefaultNewTiddlerTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Title\"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Text\"><<lingo NewJournal/Text/Prompt>></$link> |<$edit tiddler=\"$:/config/NewJournal/Text\" tag=\"textarea\" class=\"tc-edit-texteditor\" default=\"\"/> |\n|<$link to=\"$:/config/NewTiddler/Tags\"><<lingo NewTiddler/Tags/Prompt>></$link> |<$list filter=\"[[$:/config/NewTiddler/Tags]]\" template=\"$:/core/ui/EditTemplate/tags\"/> |\n|<$link to=\"$:/config/NewJournal/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$list filter=\"[[$:/config/NewJournal/Tags]]\" template=\"$:/core/ui/EditTemplate/tags\"/> |\n|<$link to=\"$:/config/AutoFocus\"><<lingo AutoFocus/Prompt>></$link> |{{$:/snippets/minifocusswitcher}} |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |<<show-filter-count \"[!is[system]sort[title]]\">> |\n|<<lingo Tags/Prompt>> |<<show-filter-count \"[tags[]sort[title]]\">> |\n|<<lingo SystemTiddlers/Prompt>> |<<show-filter-count \"[is[system]sort[title]]\">> |\n|<<lingo ShadowTiddlers/Prompt>> |<<show-filter-count \"[all[shadows]sort[title]]\">> |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |<<show-filter-count \"[is[tiddler]is[shadow]sort[title]]\">> |\n"
        },
        "$:/core/ui/ControlPanel/EditorTypes": {
            "title": "$:/core/ui/ControlPanel/EditorTypes",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<<lingo Hint>>\n\n<table>\n<tbody>\n<tr>\n<th><<lingo Type/Caption>></th>\n<th><<lingo Editor/Caption>></th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n<tr>\n<td>\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n</$list>\n</$link>\n</td>\n<td>\n<$view field=\"text\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ControlPanel/Info": {
            "title": "$:/core/ui/ControlPanel/Info",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Info/Caption}}",
            "text": "{{$:/language/ControlPanel/Info/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Basics\">>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/KeyboardShortcuts": {
            "title": "$:/core/ui/ControlPanel/KeyboardShortcuts",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\n\n\\define new-shortcut(title)\n<div class=\"tc-dropdown-item-plain\">\n<$edit-shortcut tiddler=\"$title$\" placeholder={{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} focus=\"true\" style=\"width:auto;\"/> <$button>\n<<lingo Add/Caption>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"[{$title$}]\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"$title$\"\n/>\n</$button>\n</div>\n\\end\n\n\\define shortcut-list-item(caption)\n<td>\n</td>\n<td style=\"text-align:right;font-size:0.7em;\">\n<<lingo Platform/$caption$>>\n</td>\n<td>\n<div style=\"position:relative;\">\n<$button popup=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> class=\"tc-btn-invisible\">\n{{$:/core/images/edit-button}}\n</$button>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutTitle)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\n<$reveal state=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown tc-popup-keep\">\n<$list filter=\"[list[$(shortcutTitle)$!!text]sort[title]]\" variable=\"shortcut\" emptyMessage=\"\"\"\n<div class=\"tc-dropdown-item-plain\">\n//<<lingo NoShortcuts/Caption>>//\n</div>\n\"\"\">\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint}}>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"+[remove<shortcut>]\"\n/>\n<small>{{$:/core/images/close-button}}</small>\n</$button>\n<kbd>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts=<<shortcut>>/>\n</kbd>\n</div>\n</$list>\n<hr/>\n<$macrocall $name=\"new-shortcut\" title=<<qualify \"$:/state/new-shortcut/$(shortcutTitle)$\">>/>\n</div>\n</div>\n</$reveal>\n</div>\n</td>\n\\end\n\n\\define shortcut-list(caption,prefix)\n<tr>\n<$list filter=\"[[$prefix$$(shortcutName)$]]\" variable=\"shortcutTitle\">\n<<shortcut-list-item \"$caption$\">>\n</$list>\n</tr>\n\\end\n\n\\define shortcut-editor()\n<<shortcut-list \"All\" \"$:/config/shortcuts/\">>\n<<shortcut-list \"Mac\" \"$:/config/shortcuts-mac/\">>\n<<shortcut-list \"NonMac\" \"$:/config/shortcuts-not-mac/\">>\n<<shortcut-list \"Linux\" \"$:/config/shortcuts-linux/\">>\n<<shortcut-list \"NonLinux\" \"$:/config/shortcuts-not-linux/\">>\n<<shortcut-list \"Windows\" \"$:/config/shortcuts-windows/\">>\n<<shortcut-list \"NonWindows\" \"$:/config/shortcuts-not-windows/\">>\n\\end\n\n\\define shortcut-preview()\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutPrefix)$$(shortcutName)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\\end\n\n\\define shortcut-item-inner()\n<tr>\n<td>\n<$reveal type=\"nomatch\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"open\"\n/>\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"close\"\n/>\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n''<$text text=<<shortcutName>>/>''\n</td>\n<td>\n<$transclude tiddler=\"$:/config/ShortcutInfo/$(shortcutName)$\"/>\n</td>\n<td>\n<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\" variable=\"shortcutPrefix\">\n<<shortcut-preview>>\n</$list>\n</td>\n</tr>\n<$set name=\"dropdownState\" value={{$(dropdownStateTitle)$}}>\n<$list filter=\"[<dropdownState>match[open]]\" variable=\"listItem\">\n<<shortcut-editor>>\n</$list>\n</$set>\n\\end\n\n\\define shortcut-item()\n<$set name=\"dropdownStateTitle\" value=<<qualify \"$:/state/dropdown/keyboardshortcut/$(shortcutName)$\">>>\n<<shortcut-item-inner>>\n</$set>\n\\end\n\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$:/config/ShortcutInfo/]]\" variable=\"shortcutName\">\n<<shortcut-item>>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ControlPanel/LoadedModules": {
            "title": "$:/core/ui/ControlPanel/LoadedModules",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
        },
        "$:/core/ui/ControlPanel/Modals/AddPlugins": {
            "title": "$:/core/ui/ControlPanel/Modals/AddPlugins",
            "subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}",
            "text": "\\define install-plugin-actions()\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$set name=\"url\" value={{!!url}}>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[title]]\" variable=\"dependency\">\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url=<<url>> title=<<dependency>>/>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define install-plugin-button()\n<div>\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$set name=\"reinstall-type\" value={{{ [<libraryVersion>compare:version:eq<installedVersion>then[tc-reinstall]] [<libraryVersion>compare:version:gt<installedVersion>then[tc-reinstall-upgrade]] [<libraryVersion>compare:version:lt<installedVersion>then[tc-reinstall-downgrade]] }}}>\n<$button actions=<<install-plugin-actions>> class={{{ [<assetInfo>get[original-title]has[version]then<reinstall-type>] tc-btn-invisible tc-install-plugin +[join[ ]] }}}>\n{{$:/core/images/download-button}}\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Install/Caption}}\">\n<$list filter=\"[<libraryVersion>compare:version:gt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[<libraryVersion>compare:version:lt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}\">\n{{$:/language/ControlPanel/Plugins/Downgrade/Caption}}\n</$list>\n\"\"\">\n{{$:/language/ControlPanel/Plugins/Update/Caption}}\n</$list>\n</$list>\n</$button>\n<div>\n</div>\n<$reveal stateTitle=<<assetInfo>> stateField=\"requires-reload\" type=\"match\" text=\"yes\">{{$:/language/ControlPanel/Plugins/PluginWillRequireReload}}</$reveal>\n</$set>\n</$set>\n</$set>\n</div>\n\\end\n\n\\define popup-state-macro()\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\n\\end\n\n\\define display-plugin-info(type)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<div class=\"tc-plugin-info\">\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$list filter=\"[<assetInfo>has[icon]]\" emptyMessage=\"\"\"<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\"\"\">\n<img src={{$(assetInfo)$!!icon}}/>\n</$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1><strong><$text text={{{ [<assetInfo>get[name]] ~[<assetInfo>get[original-title]split[/]last[1]] }}}/></strong>: <$view tiddler=<<assetInfo>> field=\"description\"/></h1>\n<h2><$view tiddler=<<assetInfo>> field=\"original-title\"/></h2>\n<div><em><$view tiddler=<<assetInfo>> field=\"version\"/></em></div>\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\"><div><em>{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}</em></div></$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-buttons\">\n<<install-plugin-button>>\n</div>\n</div>\n<$set name=\"original-title\" value={{{ [<assetInfo>get[original-title]] }}}>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]] ~[<assetInfo>get[original-title]!is[tiddler]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-dropdown-message\">\n<$list filter=\"[<assetInfo>get[original-title]!is[tiddler]]\">\n{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\n</$list>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]]\" variable=\"ignore\">\n<div>\n{{$:/language/ControlPanel/Plugins/AlsoRequires}}\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[title]]\" variable=\"dependency\">\n<$text text=<<dependency>>/>\n</$list>\n</div>\n</$list>\n</$set>\n</div>\n</$list>\n<div class=\"tc-plugin-info-dropdown-body\">\n<$transclude tiddler=<<assetInfo>> field=\"readme\" mode=\"block\"/>\n</div>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-sub-plugins\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>sort[title]]\" variable=\"assetInfo\">\n<<display-plugin-info \"$type$\">>\n</$list>\n</div>\n</$list>\n</div>\n</$reveal>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<$reveal type=\"nomatch\" text=\"yes\" state=<<popup-state>> tag=\"div\" class=\"tc-plugin-info-sub-plugin-indicator\">\n<$wikify name=\"count\" text=\"\"\"<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>]\"/>\"\"\">\n<$button class=\"tc-btn-invisible\" set=<<popup-state>> setTo=\"yes\">\n{{$:/language/ControlPanel/Plugins/SubPluginPrompt}}\n</$button>\n</$wikify>\n</$reveal>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define load-plugin-library-button()\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-load-plugin-library\" url={{!!url}} infoTitlePrefix=\"$:/temp/RemoteAssetInfo/\"/>\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n</$button>\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<div class=\"tc-plugin-library-listing\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search:author,description,original-title,readme,title{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[title]]\" variable=\"assetInfo\">\n<$list filter=\"[[$:/temp/RemoteAssetSearch/$(currentTiddler)$]has[text]] ~[<assetInfo>!has[parent-plugin]]\" variable=\"ignore\"><!-- Hide sub-plugins if we're not searching -->\n<<display-plugin-info \"$type$\">>\n</$list>\n</$list>\n</div>\n\\end\n\n\\define display-server-connection()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]\" variable=\"connectionTiddler\" emptyMessage=<<load-plugin-library-button>>>\n\n<$set name=\"transclusion\" value=<<connectionTiddler>>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Add/Updates]] [[$:/core/ui/ControlPanel/Plugins/Add/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Add/Themes]] [[$:/core/ui/ControlPanel/Plugins/Add/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Add/Plugins\">>\n\n</$set>\n\n</$list>\n\\end\n\n\\define close-library-button()\n<$reveal type='nomatch' state='$:/temp/ServerConnection/$(PluginLibraryURL)$' text=''>\n<$button class='tc-btn-big-green'>\n<$action-sendmessage $message=\"tm-unload-plugin-library\" url={{!!url}}/>\n{{$:/core/images/chevron-left}} {{$:/language/ControlPanel/Plugins/ClosePluginLibrary}}\n<$action-deletetiddler $filter=\"[prefix[$:/temp/ServerConnection/$(PluginLibraryURL)$]][prefix[$:/temp/RemoteAssetInfo/$(PluginLibraryURL)$]]\"/>\n</$button>\n</$reveal>\n\\end\n\n\\define plugin-library-listing()\n<div class=\"tc-tab-set\">\n<$set name=\"defaultTab\" value={{{ [all[tiddlers+shadows]tag[$:/tags/PluginLibrary]] }}}>\n<div class=\"tc-tab-buttons\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$button set=<<qualify \"$:/state/addplugins/tab\">> setTo=<<currentTiddler>> default=<<defaultTab>> selectedClass=\"tc-tab-selected\">\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude field=\"caption\"/>\n</$set>\n</$button>\n</$list>\n</div>\n<div class=\"tc-tab-divider\"/>\n<div class=\"tc-tab-content\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$reveal type=\"match\" state=<<qualify \"$:/state/addplugins/tab\">> text=<<currentTiddler>> default=<<defaultTab>>>\n<h2><$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link></h2>\n//<$view field=\"url\"/>//\n<$transclude mode=\"block\"/>\n<$set name=PluginLibraryURL value={{!!url}}>\n<<close-library-button>>\n</$set>\n<<display-server-connection>>\n</$reveal>\n</$list>\n</div>\n</$set>\n</div>\n\\end\n\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<div>\n<<plugin-library-listing>>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Palette": {
            "title": "$:/core/ui/ControlPanel/Palette",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Palette/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/PaletteManager}}\n\n</$reveal>\n\n"
        },
        "$:/core/ui/ControlPanel/Parsing": {
            "title": "$:/core/ui/ControlPanel/Parsing",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/Parsing/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define toggle(Type)\n<$checkbox\ntiddler=\"\"\"$:/config/WikiParserRules/$Type$/$(rule)$\"\"\"\nfield=\"text\"\nchecked=\"enable\"\nunchecked=\"disable\"\ndefault=\"enable\">\n<<rule>>\n</$checkbox>\n\\end\n\n\\define rules(type,Type)\n<$list filter=\"[wikiparserrules[$type$]]\" variable=\"rule\">\n<dd><<toggle $Type$>></dd>\n</$list>\n\\end\n\n<<lingo Hint>>\n\n<dl>\n<dt><<lingo Pragma/Caption>></dt>\n<<rules pragma Pragma>>\n<dt><<lingo Inline/Caption>></dt>\n<<rules inline Inline>>\n<dt><<lingo Block/Caption>></dt>\n<<rules block Block>>\n</dl>"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Languages": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Languages",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]\"/>)",
            "text": "<<display-server-assets language>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}  (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]\"/>)",
            "text": "<<display-server-assets plugin>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Themes": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Themes",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}  (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]\"/>)",
            "text": "<<display-server-assets theme>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Updates": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Updates",
            "caption": "<$importvariables filter=\"$:/core/ui/ControlPanel/Plugins/Add/Updates\">{{$:/language/ControlPanel/Plugins/Updates/Caption}} (<<update-count>>)</$importvariables>",
            "text": "\\define each-updateable-plugin(body)\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}sort[title]]\" variable=\"assetInfo\">\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$list filter=\"[<assetInfo>get[original-title]has[version]!version<libraryVersion>]\" variable=\"ignore\">\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$list filter=\"[<installedversion>!match<libraryVersion>]\" variable=\"ignore\">\n$body$\n</$list>\n</$set>\n</$list>\n</$set>\n</$list>\n\\end\n\n\\define update-all-actions()\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<<install-plugin-actions>>\n\"\"\"/>\n\\end\n\n\\define update-count()\n<$wikify name=\"count-filter\" text=<<each-updateable-plugin \"&#91;&#91;<$text text=<<assetInfo>>/>]]\">>><$count filter=<<count-filter>>/></$wikify>\n\\end\n\n<$button actions=<<update-all-actions>> class=\"tc-btn-invisible tc-install-plugin tc-reinstall-upgrade\">\n{{$:/core/images/download-button}} {{||$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption}}\n</$button>\n\n<div class=\"tc-plugin-library-listing\">\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<$macrocall $name=\"display-plugin-info\" type={{{ [<assetInfo>get[original-plugin-type]] }}}/>\n\"\"\"/>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/AddPlugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/AddPlugins",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green tc-primary-btn\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Languages": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)",
            "text": "<<plugin-table language>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)",
            "text": "<<plugin-table plugin>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Themes": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)",
            "text": "<<plugin-table theme>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define plugin-table(type)\n<$set name=\"plugin-type\" value=\"\"\"$type$\"\"\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[title]]\" emptyMessage=<<lingo \"Empty/Hint\">> template=\"$:/core/ui/Components/plugin-info\"/>\n</$set>\n</$set>\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\n\n<<lingo Installed/Hint>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Installed/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Installed/Themes]] [[$:/core/ui/ControlPanel/Plugins/Installed/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Installed/Plugins\">>\n"
        },
        "$:/core/ui/ControlPanel/Saving/DownloadSaver": {
            "title": "$:/core/ui/ControlPanel/Saving/DownloadSaver",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/DownloadSaver/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/DownloadSaver/\n\n<<lingo Hint>>\n\n!! <$link to=\"$:/config/DownloadSaver/AutoSave\"><<lingo AutoSave/Hint>></$link>\n\n<$checkbox tiddler=\"$:/config/DownloadSaver/AutoSave\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <<lingo AutoSave/Description>> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Saving/General": {
            "title": "$:/core/ui/ControlPanel/Saving/General",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/General/Caption}}",
            "list-before": "",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n{{$:/language/ControlPanel/Saving/General/Hint}}\n\n!! <$link to=\"$:/config/AutoSave\"><<lingo AutoSave/Caption>></$link>\n\n<<lingo AutoSave/Hint>>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo AutoSave/Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo AutoSave/Disabled/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Saving/GitHub": {
            "title": "$:/core/ui/ControlPanel/Saving/GitHub",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/GitService/GitHub/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitHub\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitHub/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitHub/Password>> |<$password name=\"github\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitHub/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitHub/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitHub/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitHub/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitHub/ServerURL\" default=\"https://api.github.com\" tag=\"input\"/> |"
        },
        "$:/core/ui/ControlPanel/Saving/GitLab": {
            "title": "$:/core/ui/ControlPanel/Saving/GitLab",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/GitService/GitLab/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitLab\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitLab/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitLab/Password>> |<$password name=\"gitlab\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitLab/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitLab/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitLab/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitLab/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitLab/ServerURL\" default=\"https://gitlab.com/api/v4\" tag=\"input\"/> |"
        },
        "$:/core/ui/ControlPanel/Saving/TiddlySpot": {
            "title": "$:/core/ui/ControlPanel/Saving/TiddlySpot",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/TiddlySpot/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/TiddlySpot/\n\n\\define backupURL()\nhttp://$(userName)$.tiddlyspot.com/backup/\n\\end\n\\define backupLink()\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<<backupURL>>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/UploadURL\" text=\"\">\n<$macrocall $name=resolvePath source={{$:/UploadBackupDir}} root={{$:/UploadURL}}>>\n</$reveal>\n</$set>\n</$reveal>\n\\end\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo Password>> |<$password name=\"upload\"/> |\n|<<lingo Backups>> |<<backupLink>> |\n\n''<<lingo Advanced/Heading>>''\n\n|<<lingo ServerURL>>  |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>"
        },
        "$:/core/ui/ControlPanel/Saving/Gitea": {
            "title": "$:/core/ui/ControlPanel/Saving/Gitea",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~Gitea\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/Gitea/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo Gitea/Password>> |<$password name=\"Gitea\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/Gitea/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/Gitea/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/Gitea/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/Gitea/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/Gitea/ServerURL\" default=\"https://gitea/api/v1\" tag=\"input\"/> |\n"
        },
        "$:/core/ui/ControlPanel/Saving": {
            "title": "$:/core/ui/ControlPanel/Saving",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Saving/Caption}}",
            "text": "{{$:/language/ControlPanel/Saving/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Saving]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Saving/General\">>\n</div>\n"
        },
        "$:/core/buttonstyles/Borderless": {
            "title": "$:/core/buttonstyles/Borderless",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}",
            "text": "tc-btn-invisible"
        },
        "$:/core/buttonstyles/Boxed": {
            "title": "$:/core/buttonstyles/Boxed",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}",
            "text": "tc-btn-boxed"
        },
        "$:/core/buttonstyles/Rounded": {
            "title": "$:/core/buttonstyles/Rounded",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}",
            "text": "tc-btn-rounded"
        },
        "$:/core/ui/ControlPanel/Settings/CamelCase": {
            "title": "$:/core/ui/ControlPanel/Settings/CamelCase",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><<lingo Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab": {
            "title": "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab",
            "caption": "{{$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption}}",
            "tags": "$:/tags/ControlPanel/Settings",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultMoreSidebarTab/\n\n<$link to=\"$:/config/DefaultMoreSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultMoreSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab": {
            "title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab",
            "caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}",
            "tags": "$:/tags/ControlPanel/Settings",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\n\n<$link to=\"$:/config/DefaultSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/EditorToolbar": {
            "title": "$:/core/ui/ControlPanel/Settings/EditorToolbar",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/TextEditor/EnableToolbar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/TextEditor/EnableToolbar\"><<lingo Description>></$link> </$checkbox>\n\n"
        },
        "$:/core/ui/ControlPanel/Settings/InfoPanelMode": {
            "title": "$:/core/ui/ControlPanel/Settings/InfoPanelMode",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/InfoPanelMode/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/InfoPanelMode/\n<$link to=\"$:/config/TiddlerInfo/Mode\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"popup\"> <<lingo Popup/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"sticky\"> <<lingo Sticky/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/LinkToBehaviour": {
            "title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><<lingo \"InsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n  <option value=\"above\"><<lingo \"OpenAbove\">></option>\n  <option value=\"below\"><<lingo \"OpenBelow\">></option>\n  <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n  <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><<lingo \"OutsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n  <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n  <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/MissingLinks": {
            "title": "$:/core/ui/ControlPanel/Settings/MissingLinks",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/MissingLinks\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/MissingLinks\"><<lingo Description>></$link> </$checkbox>\n\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationHistory": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationPermalinkviewMode/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/CopyToClipboard\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/CopyToClipboard\"><<lingo CopyToClipboard/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\"><<lingo UpdateAddressBar/Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": {
            "title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><<lingo Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/TitleLinks": {
            "title": "$:/core/ui/ControlPanel/Settings/TitleLinks",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": {
            "title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><<lingo \"Hint\">></$link>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n<option value={{!!text}}>{{!!caption}}</option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
            "title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings": {
            "title": "$:/core/ui/ControlPanel/Settings",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Settings/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/ControlPanel/StoryView": {
            "title": "$:/core/ui/ControlPanel/StoryView",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
            "text": "{{$:/snippets/viewswitcher}}\n"
        },
        "$:/core/ui/ControlPanel/Stylesheets": {
            "title": "$:/core/ui/ControlPanel/Stylesheets",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/Stylesheets/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo Stylesheets/Hint>>\n\n{{$:/snippets/peek-stylesheets}}\n"
        },
        "$:/core/ui/ControlPanel/Theme": {
            "title": "$:/core/ui/ControlPanel/Theme",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Theme/Caption}}",
            "text": "{{$:/snippets/themeswitcher}}\n"
        },
        "$:/core/ui/ControlPanel/TiddlerFields": {
            "title": "$:/core/ui/ControlPanel/TiddlerFields",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
        },
        "$:/core/ui/ControlPanel/Toolbars/EditToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>"
        },
        "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate": {
            "title": "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate",
            "text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"><$transclude tiddler={{!!icon}}/></span> <$transclude field=\"caption\"/> -- <i class=\"tc-muted\"><$transclude field=\"description\"/></i>\n</$draggable>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/EditorToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/EditorToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditorToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditorToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\"/>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/ItemTemplate": {
            "title": "$:/core/ui/ControlPanel/Toolbars/ItemTemplate",
            "text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"> <$transclude field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude field=\"description\"/></i></span>\n</$draggable>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/PageControls": {
            "title": "$:/core/ui/ControlPanel/Toolbars/PageControls",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/PageControlButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/PageControls\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/ViewToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/ViewToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/ViewToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars": {
            "title": "$:/core/ui/ControlPanel/Toolbars",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Toolbars/Caption}}",
            "text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" \"$:/state/tabs/controlpanel/toolbars\" \"tc-vertical\">>\n</div>\n"
        },
        "$:/ControlPanel": {
            "title": "$:/ControlPanel",
            "icon": "$:/core/images/options-button",
            "color": "#bbb",
            "text": "<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Info\">>\n</div>\n"
        },
        "$:/core/ui/DefaultSearchResultList": {
            "title": "$:/core/ui/DefaultSearchResultList",
            "tags": "$:/tags/SearchResults",
            "caption": "{{$:/language/Search/DefaultResults/Caption}}",
            "text": "\\define searchResultList()\n//<small>{{$:/language/Search/Matches/Title}}</small>//\n\n<$list filter=\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n\n<$list filter=\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n\\end\n<<searchResultList>>\n"
        },
        "$:/core/ui/EditTemplate/body/preview/diffs-current": {
            "title": "$:/core/ui/EditTemplate/body/preview/diffs-current",
            "tags": "$:/tags/EditPreview",
            "caption": "differences from current",
            "list-after": "$:/core/ui/EditTemplate/body/preview/output",
            "text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
        },
        "$:/core/ui/EditTemplate/body/preview/diffs-shadow": {
            "title": "$:/core/ui/EditTemplate/body/preview/diffs-shadow",
            "tags": "$:/tags/EditPreview",
            "caption": "differences from shadow (if any)",
            "list-after": "$:/core/ui/EditTemplate/body/preview/output",
            "text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{{ [{!!draft.of}shadowsource[]] }}} sourceSubTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
        },
        "$:/core/ui/EditTemplate/body/preview/output": {
            "title": "$:/core/ui/EditTemplate/body/preview/output",
            "tags": "$:/tags/EditPreview",
            "caption": "{{$:/language/EditTemplate/Body/Preview/Type/Output}}",
            "text": "\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n"
        },
        "$:/state/showeditpreview": {
            "title": "$:/state/showeditpreview",
            "text": "no"
        },
        "$:/core/ui/EditTemplate/body/editor": {
            "title": "$:/core/ui/EditTemplate/body/editor",
            "text": "<$edit\n\n  field=\"text\"\n  class=\"tc-edit-texteditor tc-edit-texteditor-body\"\n  placeholder={{$:/language/EditTemplate/Body/Placeholder}}\n  tabindex={{$:/config/EditTabIndex}}\n  focus={{{ [{$:/config/AutoFocus}match[text]then[true]] ~[[false]] }}}\n\n><$set\n\n  name=\"targetTiddler\"\n  value=<<currentTiddler>>\n\n><$list\n\n  filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\"\n\n><$reveal\n\n  type=\"nomatch\"\n  state=<<config-visibility-title>>\n  text=\"hide\"\n  class=\"tc-text-editor-toolbar-item-wrapper\"\n\n><$transclude\n\n  tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\"\n  mode=\"inline\"\n\n/></$reveal></$list></$set></$edit>\n"
        },
        "$:/core/ui/EditTemplate/body/toolbar/button": {
            "title": "$:/core/ui/EditTemplate/body/toolbar/button",
            "text": "\\define toolbar-button-icon()\n<$list\n\n  filter=\"[all[current]!has[custom-icon]]\"\n  variable=\"no-custom-icon\"\n\n><$transclude\n\n  tiddler={{!!icon}}\n\n/></$list>\n\\end\n\n\\define toolbar-button-tooltip()\n{{!!description}}<$macrocall $name=\"displayshortcuts\" $output=\"text/plain\" shortcuts={{!!shortcuts}} prefix=\"` - [\" separator=\"] [\" suffix=\"]`\"/>\n\\end\n\n\\define toolbar-button()\n<$list\n\n  filter={{!!condition}}\n  variable=\"list-condition\"\n\n><$wikify\n\n  name=\"tooltip-text\"\n  text=<<toolbar-button-tooltip>>\n  mode=\"inline\"\n  output=\"text\"\n\n><$list\n\n  filter=\"[all[current]!has[dropdown]]\"\n  variable=\"no-dropdown\"\n\n><$button\n\n  class=\"tc-btn-invisible $(buttonClasses)$\"\n  tooltip=<<tooltip-text>>\n  actions={{!!actions}}\n\n><span\n\n  data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n  tiddler=<<currentTiddler>>\n  field=\"text\"\n\n/></$button></$list><$list\n\n  filter=\"[all[current]has[dropdown]]\"\n  variable=\"dropdown\"\n\n><$set\n\n  name=\"dropdown-state\"\n  value=<<qualify \"$:/state/EditorToolbarDropdown\">>\n\n><$button\n\n  popup=<<dropdown-state>>\n  class=\"tc-popup-keep tc-btn-invisible $(buttonClasses)$\"\n  selectedClass=\"tc-selected\"\n  tooltip=<<tooltip-text>>\n  actions={{!!actions}}\n\n><span\n\n  data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n  tiddler=<<currentTiddler>>\n  field=\"text\"\n\n/></$button><$reveal\n\n  state=<<dropdown-state>>\n  type=\"popup\"\n  position=\"below\"\n  animate=\"yes\"\n  tag=\"span\"\n\n><div\n\n  class=\"tc-drop-down tc-popup-keep\"\n\n><$transclude\n\n  tiddler={{!!dropdown}}\n  mode=\"block\"\n\n/></div></$reveal></$set></$list></$wikify></$list>\n\\end\n\n\\define toolbar-button-outer()\n<$set\n\n  name=\"buttonClasses\"\n  value={{!!button-classes}}\n\n><<toolbar-button>></$set>\n\\end\n\n<<toolbar-button-outer>>"
        },
        "$:/core/ui/EditTemplate/body": {
            "title": "$:/core/ui/EditTemplate/body",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n<$list filter=\"[all[current]has[_canonical_uri]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo External/Hint>>\n\n<a href={{!!_canonical_uri}}><$text text={{!!_canonical_uri}}/></a>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\" tabindex={{$:/config/EditTabIndex}}></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[all[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n<div class=\"tc-tiddler-preview\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n<div class=\"tc-tiddler-preview-preview\">\n\n<$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n\n</$transclude>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n"
        },
        "$:/core/ui/EditTemplate/controls": {
            "title": "$:/core/ui/EditTemplate/controls",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
        },
        "$:/core/ui/EditTemplate/fields": {
            "title": "$:/core/ui/EditTemplate/fields",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define current-tiddler-new-field-selector()\n[data-tiddler-title=\"$(currentTiddlerCSSescaped)$\"] .tc-edit-field-add-name input\n\\end\n\n\\define new-field-actions()\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/>\n\\end\n\n\\define new-field()\n<$vars name={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button tooltip=<<lingo Fields/Add/Button/Hint>>>\n<$action-sendmessage $message=\"tm-add-field\"\n$name=<<name>>\n$value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n</$vars>\n\\end\n\\whitespace trim\n\n<div class=\"tc-edit-fields\">\n<table class=\"tc-edit-fields\">\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\" storyview=\"pop\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$text text=<<currentField>>/>:</td>\n<td class=\"tc-edit-field-value\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex={{$:/config/EditTabIndex}}/>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit\">\n<<lingo Fields/Add/Prompt>>&nbsp;&nbsp;\n</em>\n<span class=\"tc-edit-field-add-name\">\n<$edit-text tiddler=<<newFieldNameTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[fields]then[true]] ~[[false]] }}}/>\n</span>&nbsp;\n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button>&nbsp;\n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=<<newFieldNameTiddler>>>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$set name=\"newFieldName\" value={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$list filter=\"[!is[shadow]!is[system]fields[]search:title<newFieldName>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\"  variable=\"currentField\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]search:title<newFieldName>sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$set>\n</$linkcatcher>\n</$set>\n</div>\n</$reveal>\n<span class=\"tc-edit-field-add-value\">\n<$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}>\n<$keyboard key=\"((add-field))\" actions=<<new-field-actions>>>\n<$edit-text tiddler=<<newFieldValueTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\" tabindex={{$:/config/EditTabIndex}}/>\n</$keyboard>\n</$set>\n</span>&nbsp;\n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</div>\n</$fieldmangler>\n"
        },
        "$:/core/ui/EditTemplate/shadow": {
            "title": "$:/core/ui/EditTemplate/shadow",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n</$link>\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>"
        },
        "$:/core/ui/EditTemplate/tags": {
            "title": "$:/core/ui/EditTemplate/tags",
            "tags": "$:/tags/EditTemplate",
            "text": "\\whitespace trim\n\n\\define lingo-base() $:/language/EditTemplate/\n\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB,icon)\n\\whitespace trim\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<span style=<<tag-styles>> class=\"tc-tag-label tc-tag-list-item\">\n<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view field=\"title\" format=\"text\" />\n<$button message=\"tm-remove-tag\" param={{!!title}} class=\"tc-btn-invisible tc-remove-tag-button\">{{$:/core/images/close-button}}</$button>\n</span>\n</$vars>\n\\end\n\n\\define tag-body(colour,palette,icon)\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} icon=\"\"\"$icon$\"\"\"/>\n\\end\n\n<div class=\"tc-edit-tags\">\n<$fieldmangler>\n<$list filter=\"[all[current]tags[]sort[title]]\" storyview=\"pop\">\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}} icon={{!!icon}}/>\n</$list>\n<$set name=\"tabIndex\" value={{$:/config/EditTabIndex}}>\n<$macrocall $name=\"tag-picker\"/>\n</$set>\n</$fieldmangler>\n</div>\n"
        },
        "$:/core/ui/EditTemplate/title": {
            "title": "$:/core/ui/EditTemplate/title",
            "tags": "$:/tags/EditTemplate",
            "text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus={{{ [{$:/config/AutoFocus}match[title]then[true]] ~[[false]] }}} tabindex={{$:/config/EditTabIndex}}/>\n\n<$vars pattern=\"\"\"[\\|\\[\\]{}]\"\"\" bad-chars=\"\"\"`| [ ] { }`\"\"\">\n\n<$list filter=\"[all[current]regexp:draft.title<pattern>]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}\n\n</div>\n\n</$list>\n\n</$vars>\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n\n<$list filter=\"[{!!draft.title}!is[missing]]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}\n\n</div>\n\n</$list>\n\n<$list filter=\"[{!!draft.of}!is[missing]]\" variable=\"listItem\">\n\n<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}>\n\n<$checkbox tiddler=\"$:/config/RelinkOnRename\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> {{$:/language/EditTemplate/Title/Relink/Prompt}}</$checkbox>\n\n<$list filter=\"[title<fromTitle>backlinks[]limit[1]]\" variable=\"listItem\">\n\n<$vars stateTiddler=<<qualify \"$:/state/edit/references\">> >\n\n<$reveal type=\"nomatch\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/right-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"hide\" class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$tiddler tiddler=<<fromTitle>> >\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo/References\"/>\n</$tiddler>\n</$reveal>\n\n</$vars>\n\n</$list>\n\n</$vars>\n\n</$list>\n\n</$reveal>\n"
        },
        "$:/core/ui/EditTemplate/type": {
            "title": "$:/core/ui/EditTemplate/type",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n\\whitespace trim\n<div class=\"tc-type-selector\"><$fieldmangler>\n<em class=\"tc-edit\"><<lingo Type/Prompt>></em>&nbsp;&nbsp;<$edit-text field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[type]then[true]] ~[[false]] }}}/>&nbsp;<$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button>&nbsp;<$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}</$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$reveal state=<<qualify \"$:/state/popup/type-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group-sort]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]]\"><$link to={{!!name}}><$view field=\"description\"/> (<$view field=\"name\"/>)</$link>\n</$list>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</$set>\n</div>\n"
        },
        "$:/core/ui/EditTemplate": {
            "title": "$:/core/ui/EditTemplate",
            "text": "\\define save-tiddler-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{{ [<newTagNameTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n\\end\n<div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}>\n<$fieldmangler>\n<$vars storyTiddler=<<currentTiddler>> newTagNameTiddler=<<qualify \"$:/temp/NewTagName\">> newFieldNameTiddler=<<qualify \"$:/temp/NewFieldName\">> newFieldValueTiddler=<<qualify \"$:/temp/NewFieldValue\">>>\n<$keyboard key=\"((cancel-edit-tiddler))\" message=\"tm-cancel-tiddler\">\n<$keyboard key=\"((save-tiddler))\" actions=<<save-tiddler-actions>>>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>>/>\n</$set>\n</$list>\n</$keyboard>\n</$keyboard>\n</$vars>\n</$fieldmangler>\n</div>\n"
        },
        "$:/core/ui/Buttons/cancel": {
            "title": "$:/core/ui/Buttons/cancel",
            "tags": "$:/tags/EditToolbar",
            "caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}",
            "description": "{{$:/language/Buttons/Cancel/Hint}}",
            "text": "<$button message=\"tm-cancel-tiddler\" tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/delete": {
            "title": "$:/core/ui/Buttons/delete",
            "tags": "$:/tags/EditToolbar $:/tags/ViewToolbar",
            "caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
            "description": "{{$:/language/Buttons/Delete/Hint}}",
            "text": "<$button message=\"tm-delete-tiddler\" tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/save": {
            "title": "$:/core/ui/Buttons/save",
            "tags": "$:/tags/EditToolbar",
            "caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}",
            "description": "{{$:/language/Buttons/Save/Hint}}",
            "text": "\\define save-tiddler-button()\n<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<<save-tiddler-actions>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button></$fieldmangler>\n\\end\n<<save-tiddler-button>>\n"
        },
        "$:/core/ui/EditorToolbar/bold": {
            "title": "$:/core/ui/EditorToolbar/bold",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/bold",
            "caption": "{{$:/language/Buttons/Bold/Caption}}",
            "description": "{{$:/language/Buttons/Bold/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((bold))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"''\"\n\tsuffix=\"''\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/clear-dropdown": {
            "title": "$:/core/ui/EditorToolbar/clear-dropdown",
            "text": "''{{$:/language/Buttons/Clear/Hint}}''\n\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"clear\"\n\tcolour=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n\n</div>\n"
        },
        "$:/core/ui/EditorToolbar/clear": {
            "title": "$:/core/ui/EditorToolbar/clear",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/erase",
            "caption": "{{$:/language/Buttons/Clear/Caption}}",
            "description": "{{$:/language/Buttons/Clear/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/clear-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/editor-height-dropdown": {
            "title": "$:/core/ui/EditorToolbar/editor-height-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/EditorHeight/\n''<<lingo Hint>>''\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"auto\"> {{$:/core/images/auto-height}} <<lingo Caption/Auto>></$radio>\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"fixed\"> {{$:/core/images/fixed-height}} <<lingo Caption/Fixed>> <$edit-text tag=\"input\" tiddler=\"$:/config/TextEditor/EditorHeight/Height\" default=\"100px\"/></$radio>\n"
        },
        "$:/core/ui/EditorToolbar/editor-height": {
            "title": "$:/core/ui/EditorToolbar/editor-height",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/fixed-height",
            "custom-icon": "yes",
            "caption": "{{$:/language/Buttons/EditorHeight/Caption}}",
            "description": "{{$:/language/Buttons/EditorHeight/Hint}}",
            "condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] +[first[]]",
            "dropdown": "$:/core/ui/EditorToolbar/editor-height-dropdown",
            "text": "<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n{{$:/core/images/fixed-height}}\n</$reveal>\n<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n{{$:/core/images/auto-height}}\n</$reveal>\n"
        },
        "$:/core/ui/EditorToolbar/excise-dropdown": {
            "title": "$:/core/ui/EditorToolbar/excise-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Excise/\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<<lingo Caption/NewTitle>> <$edit-text tag=\"input\" tiddler=\"$config-title$/new-title\" default=\"\" focus=\"true\"/>\n\n<$set name=\"new-title\" value={{$config-title$/new-title}}>\n<$list filter=\"\"\"[<new-title>is[tiddler]]\"\"\">\n<div class=\"tc-error\">\n<<lingo Caption/TiddlerExists>>\n</div>\n</$list>\n</$set>\n\n<$checkbox tiddler=\"\"\"$config-title$/tagnew\"\"\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"false\"> <<lingo Caption/Tag>></$checkbox>\n\n<<lingo Caption/Replace>> <$select tiddler=\"\"\"$config-title$/type\"\"\" default=\"transclude\">\n<option value=\"link\"><<lingo Caption/Replace/Link>></option>\n<option value=\"transclude\"><<lingo Caption/Replace/Transclusion>></option>\n<option value=\"macro\"><<lingo Caption/Replace/Macro>></option>\n</$select>\n\n<$reveal state=\"\"\"$config-title$/type\"\"\" type=\"match\" text=\"macro\">\n<<lingo Caption/MacroName>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/macro-title\"\"\" default=\"translink\"/>\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excise\"\n\ttitle={{$config-title$/new-title}}\n\ttype={{$config-title$/type}}\n\tmacro={{$config-title$/macro-title}}\n\ttagnew={{$config-title$/tagnew}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"$config-title$/new-title\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Excise>>\n</$button>\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Excise/\">>/>\n"
        },
        "$:/core/ui/EditorToolbar/excise": {
            "title": "$:/core/ui/EditorToolbar/excise",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/excise",
            "caption": "{{$:/language/Buttons/Excise/Caption}}",
            "description": "{{$:/language/Buttons/Excise/Hint}}",
            "condition": "[<targetTiddler>type[]] [<targetTiddler>type[text/vnd.tiddlywiki]] +[first[]]",
            "shortcuts": "((excise))",
            "dropdown": "$:/core/ui/EditorToolbar/excise-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/heading-1": {
            "title": "$:/core/ui/EditorToolbar/heading-1",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-1",
            "caption": "{{$:/language/Buttons/Heading1/Caption}}",
            "description": "{{$:/language/Buttons/Heading1/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((heading-1))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"1\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-2": {
            "title": "$:/core/ui/EditorToolbar/heading-2",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-2",
            "caption": "{{$:/language/Buttons/Heading2/Caption}}",
            "description": "{{$:/language/Buttons/Heading2/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-2))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"2\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-3": {
            "title": "$:/core/ui/EditorToolbar/heading-3",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-3",
            "caption": "{{$:/language/Buttons/Heading3/Caption}}",
            "description": "{{$:/language/Buttons/Heading3/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-3))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"3\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-4": {
            "title": "$:/core/ui/EditorToolbar/heading-4",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-4",
            "caption": "{{$:/language/Buttons/Heading4/Caption}}",
            "description": "{{$:/language/Buttons/Heading4/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-4))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"4\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-5": {
            "title": "$:/core/ui/EditorToolbar/heading-5",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-5",
            "caption": "{{$:/language/Buttons/Heading5/Caption}}",
            "description": "{{$:/language/Buttons/Heading5/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-5))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"5\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-6": {
            "title": "$:/core/ui/EditorToolbar/heading-6",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-6",
            "caption": "{{$:/language/Buttons/Heading6/Caption}}",
            "description": "{{$:/language/Buttons/Heading6/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-6))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"6\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/italic": {
            "title": "$:/core/ui/EditorToolbar/italic",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/italic",
            "caption": "{{$:/language/Buttons/Italic/Caption}}",
            "description": "{{$:/language/Buttons/Italic/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((italic))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"//\"\n\tsuffix=\"//\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/line-width-dropdown": {
            "title": "$:/core/ui/EditorToolbar/line-width-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/LineWidth/\n\n\\define toolbar-line-width-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(line-width)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/LineWidth\"\n\t$value=\"$(line-width)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; margin: 4px calc(80px - $(line-width)$); background-color: #000; width: calc(100px + $(line-width)$ * 2); height: $(line-width)$; border-radius: 120px; vertical-align: middle;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(line-width)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/LineWidth\" type=\"match\" text=\"\"\"$(line-width)$\"\"\" tag=\"span\">\n\n<$entity entity=\"&nbsp;\"/>\n\n<$entity entity=\"&#x2713;\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/LineWidths}} variable=\"line-width\">\n\n<<toolbar-line-width-inner>>\n\n</$list>\n"
        },
        "$:/core/ui/EditorToolbar/line-width": {
            "title": "$:/core/ui/EditorToolbar/line-width",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/line-width",
            "caption": "{{$:/language/Buttons/LineWidth/Caption}}",
            "description": "{{$:/language/Buttons/LineWidth/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/line-width-dropdown",
            "text": "<$text text={{$:/config/BitmapEditor/LineWidth}}/>"
        },
        "$:/core/ui/EditorToolbar/link-dropdown": {
            "title": "$:/core/ui/EditorToolbar/link-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Link/\n\n\\define add-link-actions()\n<$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"make-link\" text={{$(linkTiddler)$}} />\n<$action-deletetiddler $tiddler=<<dropdown-state>> />\n<$action-deletetiddler $tiddler=<<searchTiddler>> />\n<$action-deletetiddler $tiddler=<<linkTiddler>> />\n\\end\n\n\\define external-link()\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\" actions=<<add-link-actions>>>\n{{$:/core/images/chevron-right}}\n</$button>\n\\end\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<$vars searchTiddler=\"\"\"$config-title$/search\"\"\" linkTiddler=\"\"\"$config-title$/link\"\"\" linktext=\"\" >\n\n<$vars linkTiddler=<<searchTiddler>>>\n<$keyboard key=\"ENTER\" actions=<<add-link-actions>>>\n<$edit-text tiddler=<<searchTiddler>> type=\"search\" tag=\"input\" focus=\"true\" placeholder={{$:/language/Search/Search}} default=\"\"/>\n<$reveal tag=\"span\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n<<external-link>>\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<$action-setfield $tiddler=<<searchTiddler>> text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</$keyboard>\n</$vars>\n\n<$reveal tag=\"div\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n\n<$linkcatcher actions=<<add-link-actions>> to=<<linkTiddler>>>\n\n{{$:/core/ui/SearchResults}}\n\n</$linkcatcher>\n\n</$reveal>\n\n</$vars>\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Link/\">>/>"
        },
        "$:/core/ui/EditorToolbar/link": {
            "title": "$:/core/ui/EditorToolbar/link",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/link",
            "caption": "{{$:/language/Buttons/Link/Caption}}",
            "description": "{{$:/language/Buttons/Link/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((link))",
            "dropdown": "$:/core/ui/EditorToolbar/link-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/linkify": {
            "title": "$:/core/ui/EditorToolbar/linkify",
            "caption": "{{$:/language/Buttons/Linkify/Caption}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "description": "{{$:/language/Buttons/Linkify/Hint}}",
            "icon": "$:/core/images/linkify",
            "list-before": "$:/core/ui/EditorToolbar/mono-block",
            "shortcuts": "((linkify))",
            "tags": "$:/tags/EditorToolbar",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"[[\"\n\tsuffix=\"]]\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/list-bullet": {
            "title": "$:/core/ui/EditorToolbar/list-bullet",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/list-bullet",
            "caption": "{{$:/language/Buttons/ListBullet/Caption}}",
            "description": "{{$:/language/Buttons/ListBullet/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((list-bullet))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/list-number": {
            "title": "$:/core/ui/EditorToolbar/list-number",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/list-number",
            "caption": "{{$:/language/Buttons/ListNumber/Caption}}",
            "description": "{{$:/language/Buttons/ListNumber/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((list-number))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/mono-block": {
            "title": "$:/core/ui/EditorToolbar/mono-block",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/mono-block",
            "caption": "{{$:/language/Buttons/MonoBlock/Caption}}",
            "description": "{{$:/language/Buttons/MonoBlock/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((mono-block))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n```\"\n\tsuffix=\"```\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/mono-line": {
            "title": "$:/core/ui/EditorToolbar/mono-line",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/mono-line",
            "caption": "{{$:/language/Buttons/MonoLine/Caption}}",
            "description": "{{$:/language/Buttons/MonoLine/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((mono-line))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/more-dropdown": {
            "title": "$:/core/ui/EditorToolbar/more-dropdown",
            "text": "\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\n\\end\n\n\\define conditional-button()\n<$list filter={{$(toolbarItem)$!!condition}} variable=\"condition\">\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\" mode=\"inline\"/> <$transclude tiddler=<<toolbarItem>> field=\"description\"/>\n</$list>\n\\end\n\n<div class=\"tc-text-editor-toolbar-more\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]] -[[$:/core/ui/EditorToolbar/more]]\">\n<$reveal type=\"match\" state=<<config-visibility-title>> text=\"hide\" tag=\"div\">\n<<conditional-button>>\n</$reveal>\n</$list>\n</div>\n"
        },
        "$:/core/ui/EditorToolbar/more": {
            "title": "$:/core/ui/EditorToolbar/more",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/down-arrow",
            "caption": "{{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "condition": "[<targetTiddler>]",
            "dropdown": "$:/core/ui/EditorToolbar/more-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/opacity-dropdown": {
            "title": "$:/core/ui/EditorToolbar/opacity-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Opacity/\n\n\\define toolbar-opacity-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(opacity)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Opacity\"\n\t$value=\"$(opacity)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(current-paint-colour)$; opacity: $(opacity)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(opacity)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/Opacity\" type=\"match\" text=\"\"\"$(opacity)$\"\"\" tag=\"span\">\n\n<$entity entity=\"&nbsp;\"/>\n\n<$entity entity=\"&#x2713;\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n\\define toolbar-opacity()\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/Opacities}} variable=\"opacity\">\n\n<<toolbar-opacity-inner>>\n\n</$list>\n\\end\n\n<$set name=\"current-paint-colour\" value={{$:/config/BitmapEditor/Colour}}>\n\n<$set name=\"current-opacity\" value={{$:/config/BitmapEditor/Opacity}}>\n\n<<toolbar-opacity>>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/EditorToolbar/opacity": {
            "title": "$:/core/ui/EditorToolbar/opacity",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/opacity",
            "caption": "{{$:/language/Buttons/Opacity/Caption}}",
            "description": "{{$:/language/Buttons/Opacity/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/opacity-dropdown",
            "text": "<$text text={{$:/config/BitmapEditor/Opacity}}/>\n"
        },
        "$:/core/ui/EditorToolbar/paint-dropdown": {
            "title": "$:/core/ui/EditorToolbar/paint-dropdown",
            "text": "''{{$:/language/Buttons/Paint/Hint}}''\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Colour\"\n\t$value=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
        },
        "$:/core/ui/EditorToolbar/paint": {
            "title": "$:/core/ui/EditorToolbar/paint",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/paint",
            "caption": "{{$:/language/Buttons/Paint/Caption}}",
            "description": "{{$:/language/Buttons/Paint/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/paint-dropdown",
            "text": "\\define toolbar-paint()\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(colour-picker-value)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\\end\n<$set name=\"colour-picker-value\" value={{$:/config/BitmapEditor/Colour}}>\n<<toolbar-paint>>\n</$set>\n"
        },
        "$:/core/ui/EditorToolbar/picture-dropdown": {
            "title": "$:/core/ui/EditorToolbar/picture-dropdown",
            "text": "\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n''{{$:/language/Buttons/Picture/Hint}}''\n\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext=<<replacement-text>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
        },
        "$:/core/ui/EditorToolbar/picture": {
            "title": "$:/core/ui/EditorToolbar/picture",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/picture",
            "caption": "{{$:/language/Buttons/Picture/Caption}}",
            "description": "{{$:/language/Buttons/Picture/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((picture))",
            "dropdown": "$:/core/ui/EditorToolbar/picture-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/preview-type-dropdown": {
            "title": "$:/core/ui/EditorToolbar/preview-type-dropdown",
            "text": "\\define preview-type-button()\n<$button tag=\"a\">\n\n<$action-setfield $tiddler=\"$:/state/editpreviewtype\" $value=\"$(previewType)$\"/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<previewType>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<previewType>> field=\"title\" mode=\"inline\"/>\n\n</$transclude> \n\n<$reveal tag=\"span\" state=\"$:/state/editpreviewtype\" type=\"match\" text=<<previewType>> default=\"$:/core/ui/EditTemplate/body/preview/output\">\n\n<$entity entity=\"&nbsp;\"/>\n\n<$entity entity=\"&#x2713;\"/>\n\n</$reveal>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]]\" variable=\"previewType\">\n\n<<preview-type-button>>\n\n</$list>\n"
        },
        "$:/core/ui/EditorToolbar/preview-type": {
            "title": "$:/core/ui/EditorToolbar/preview-type",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/chevron-down",
            "caption": "{{$:/language/Buttons/PreviewType/Caption}}",
            "description": "{{$:/language/Buttons/PreviewType/Hint}}",
            "condition": "[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]butfirst[]limit[1]]",
            "button-classes": "tc-text-editor-toolbar-item-adjunct",
            "dropdown": "$:/core/ui/EditorToolbar/preview-type-dropdown"
        },
        "$:/core/ui/EditorToolbar/preview": {
            "title": "$:/core/ui/EditorToolbar/preview",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/preview-open",
            "custom-icon": "yes",
            "caption": "{{$:/language/Buttons/Preview/Caption}}",
            "description": "{{$:/language/Buttons/Preview/Hint}}",
            "condition": "[<targetTiddler>]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((preview))",
            "text": "<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-open}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"no\"/>\n</$reveal>\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-closed}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"yes\"/>\n</$reveal>\n"
        },
        "$:/core/ui/EditorToolbar/quote": {
            "title": "$:/core/ui/EditorToolbar/quote",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/quote",
            "caption": "{{$:/language/Buttons/Quote/Caption}}",
            "description": "{{$:/language/Buttons/Quote/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((quote))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n<<<\"\n\tsuffix=\"<<<\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/rotate-left": {
            "title": "$:/core/ui/EditorToolbar/rotate-left",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/rotate-left",
            "caption": "{{$:/language/Buttons/RotateLeft/Caption}}",
            "description": "{{$:/language/Buttons/RotateLeft/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"rotate-left\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/size-dropdown": {
            "title": "$:/core/ui/EditorToolbar/size-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Size/\n\n\\define toolbar-button-size-preset(config-title)\n<$set name=\"width\" filter=\"$(sizePair)$ +[first[]]\">\n\n<$set name=\"height\" filter=\"$(sizePair)$ +[last[]]\">\n\n<$button tag=\"a\">\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n\t$value=<<width>>\n/>\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n\t$value=<<height>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/presets-popup\"\"\"\n/>\n\n<$text text=<<width>>/> &times; <$text text=<<height>>/>\n\n</$button>\n\n</$set>\n\n</$set>\n\\end\n\n\\define toolbar-button-size(config-title)\n''{{$:/language/Buttons/Size/Hint}}''\n\n<<lingo Caption/Width>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-width\"\"\" default=<<tv-bitmap-editor-width>> focus=\"true\" size=\"8\"/> <<lingo Caption/Height>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-height\"\"\" default=<<tv-bitmap-editor-height>> size=\"8\"/> <$button popup=\"\"\"$config-title$/presets-popup\"\"\" class=\"tc-btn-invisible tc-popup-keep\" style=\"width: auto; display: inline-block; background-colour: inherit;\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n\n<$reveal tag=\"span\" state=\"\"\"$config-title$/presets-popup\"\"\" type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down tc-popup-keep\">\n\n<$list filter={{$:/config/BitmapEditor/ImageSizes}} variable=\"sizePair\">\n\n<$macrocall $name=\"toolbar-button-size-preset\" config-title=\"$config-title$\"/>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"resize\"\n\twidth={{$config-title$/new-width}}\n\theight={{$config-title$/new-height}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Resize>>\n</$button>\n\\end\n\n<$macrocall $name=\"toolbar-button-size\" config-title=<<qualify \"$:/state/Size/\">>/>\n"
        },
        "$:/core/ui/EditorToolbar/size": {
            "title": "$:/core/ui/EditorToolbar/size",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/size",
            "caption": "{{$:/language/Buttons/Size/Caption}}",
            "description": "{{$:/language/Buttons/Size/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/size-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/stamp-dropdown": {
            "title": "$:/core/ui/EditorToolbar/stamp-dropdown",
            "text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n</$list>\n\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix={{{ [[$(snippetTitle)$]addsuffix[/prefix]get[text]] }}}\nsuffix={{{ [[$(snippetTitle)$]addsuffix[/suffix]get[text]] }}}\n/>\n\n</$list>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<snippetTitle>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<snippetTitle>> field=\"title\" />\n\n</$transclude>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TextEditor/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<<toolbar-button-stamp-inner>>\n\n</$list>\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/TextEditor/Snippet\"\n\tcaption={{$:/language/Buttons/Stamp/New/Title}}\n\ttext={{$:/language/Buttons/Stamp/New/Text}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<em>\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n</em>\n\n</$button>\n"
        },
        "$:/core/ui/EditorToolbar/stamp": {
            "title": "$:/core/ui/EditorToolbar/stamp",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/stamp",
            "caption": "{{$:/language/Buttons/Stamp/Caption}}",
            "description": "{{$:/language/Buttons/Stamp/Hint}}",
            "condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] +[first[]]",
            "shortcuts": "((stamp))",
            "dropdown": "$:/core/ui/EditorToolbar/stamp-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/strikethrough": {
            "title": "$:/core/ui/EditorToolbar/strikethrough",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/strikethrough",
            "caption": "{{$:/language/Buttons/Strikethrough/Caption}}",
            "description": "{{$:/language/Buttons/Strikethrough/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((strikethrough))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"~~\"\n\tsuffix=\"~~\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/subscript": {
            "title": "$:/core/ui/EditorToolbar/subscript",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/subscript",
            "caption": "{{$:/language/Buttons/Subscript/Caption}}",
            "description": "{{$:/language/Buttons/Subscript/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((subscript))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\",,\"\n\tsuffix=\",,\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/superscript": {
            "title": "$:/core/ui/EditorToolbar/superscript",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/superscript",
            "caption": "{{$:/language/Buttons/Superscript/Caption}}",
            "description": "{{$:/language/Buttons/Superscript/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((superscript))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"^^\"\n\tsuffix=\"^^\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/transcludify": {
            "title": "$:/core/ui/EditorToolbar/transcludify",
            "caption": "{{$:/language/Buttons/Transcludify/Caption}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "description": "{{$:/language/Buttons/Transcludify/Hint}}",
            "icon": "$:/core/images/transcludify",
            "list-before": "$:/core/ui/EditorToolbar/mono-block",
            "shortcuts": "((transcludify))",
            "tags": "$:/tags/EditorToolbar",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"{{\"\n\tsuffix=\"}}\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/underline": {
            "title": "$:/core/ui/EditorToolbar/underline",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/underline",
            "caption": "{{$:/language/Buttons/Underline/Caption}}",
            "description": "{{$:/language/Buttons/Underline/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((underline))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"__\"\n\tsuffix=\"__\"\n/>\n"
        },
        "$:/core/Filters/AllTags": {
            "title": "$:/core/Filters/AllTags",
            "tags": "$:/tags/Filter",
            "filter": "[tags[]!is[system]sort[title]]",
            "description": "{{$:/language/Filters/AllTags}}",
            "text": ""
        },
        "$:/core/Filters/AllTiddlers": {
            "title": "$:/core/Filters/AllTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]sort[title]]",
            "description": "{{$:/language/Filters/AllTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/Drafts": {
            "title": "$:/core/Filters/Drafts",
            "tags": "$:/tags/Filter",
            "filter": "[has[draft.of]sort[title]]",
            "description": "{{$:/language/Filters/Drafts}}",
            "text": ""
        },
        "$:/core/Filters/Missing": {
            "title": "$:/core/Filters/Missing",
            "tags": "$:/tags/Filter",
            "filter": "[all[missing]sort[title]]",
            "description": "{{$:/language/Filters/Missing}}",
            "text": ""
        },
        "$:/core/Filters/Orphans": {
            "title": "$:/core/Filters/Orphans",
            "tags": "$:/tags/Filter",
            "filter": "[all[orphans]sort[title]]",
            "description": "{{$:/language/Filters/Orphans}}",
            "text": ""
        },
        "$:/core/Filters/OverriddenShadowTiddlers": {
            "title": "$:/core/Filters/OverriddenShadowTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[is[shadow]]",
            "description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/RecentSystemTiddlers": {
            "title": "$:/core/Filters/RecentSystemTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[has[modified]!sort[modified]limit[50]]",
            "description": "{{$:/language/Filters/RecentSystemTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/RecentTiddlers": {
            "title": "$:/core/Filters/RecentTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
            "description": "{{$:/language/Filters/RecentTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/SessionTiddlers": {
            "title": "$:/core/Filters/SessionTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[haschanged[]]",
            "description": "{{$:/language/Filters/SessionTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/ShadowTiddlers": {
            "title": "$:/core/Filters/ShadowTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[all[shadows]sort[title]]",
            "description": "{{$:/language/Filters/ShadowTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/StoryList": {
            "title": "$:/core/Filters/StoryList",
            "tags": "$:/tags/Filter",
            "filter": "[list[$:/StoryList]] -$:/AdvancedSearch",
            "description": "{{$:/language/Filters/StoryList}}",
            "text": ""
        },
        "$:/core/Filters/SystemTags": {
            "title": "$:/core/Filters/SystemTags",
            "tags": "$:/tags/Filter",
            "filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]",
            "description": "{{$:/language/Filters/SystemTags}}",
            "text": ""
        },
        "$:/core/Filters/SystemTiddlers": {
            "title": "$:/core/Filters/SystemTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[is[system]sort[title]]",
            "description": "{{$:/language/Filters/SystemTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/TypedTiddlers": {
            "title": "$:/core/Filters/TypedTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]",
            "description": "{{$:/language/Filters/TypedTiddlers}}",
            "text": ""
        },
        "$:/core/ui/ImportListing": {
            "title": "$:/core/ui/ImportListing",
            "text": "\\define lingo-base() $:/language/Import/\n\n\\define messageField()\nmessage-$(payloadTiddler)$\n\\end\n\n\\define selectionField()\nselection-$(payloadTiddler)$\n\\end\n\n\\define previewPopupState()\n$(currentTiddler)$!!popup-$(payloadTiddler)$\n\\end\n\n\\define select-all-actions()\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<$action-setfield $field={{{ [<payloadTiddler>addprefix[selection-]] }}} $value={{$:/state/import/select-all}}/>\n</$list>\n\\end\n\n<table>\n<tbody>\n<tr>\n<th>\n<$checkbox tiddler=\"$:/state/import/select-all\" field=\"text\" checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" actions=<<select-all-actions>>>\n<<lingo Listing/Select/Caption>>\n</$checkbox>\n</th>\n<th>\n<<lingo Listing/Title/Caption>>\n</th>\n<th>\n<<lingo Listing/Status/Caption>>\n</th>\n</tr>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<tr>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\"/>\n</td>\n<td>\n<$reveal type=\"nomatch\" stateTitle=<<previewPopupState>> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" setTitle=<<previewPopupState>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}&nbsp;<$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<previewPopupState>> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" setTitle=<<previewPopupState>> setTo=\"no\">\n{{$:/core/images/down-arrow}}&nbsp;<$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n</td>\n<td>\n<$view field=<<messageField>>/>\n</td>\n</tr>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" stateTitle=<<previewPopupState>> tag=\"div\">\n<$list filter=\"[{$:/state/importpreviewtype}has[text]]\" variable=\"listItem\" emptyMessage={{$:/core/ui/ImportPreviews/Text}}>\n<$transclude tiddler={{$:/state/importpreviewtype}}/>\n</$list>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ImportPreviews/Diff": {
            "title": "$:/core/ui/ImportPreviews/Diff",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/Diff}}",
            "text": "<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>>/>\n"
        },
        "$:/core/ui/ImportPreviews/DiffFields": {
            "title": "$:/core/ui/ImportPreviews/DiffFields",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/DiffFields}}",
            "text": "<$macrocall $name=\"compareTiddlers\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>> exclude=\"text\"/>\n"
        },
        "$:/core/ui/ImportPreviews/Fields": {
            "title": "$:/core/ui/ImportPreviews/Fields",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/Fields}}",
            "text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[<payloadTiddler>subtiddlerfields<currentTiddler>sort[]] -text\" variable=\"fieldName\">\n<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<fieldName>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<fieldName>> tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>>/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ImportPreviews/Text": {
            "title": "$:/core/ui/ImportPreviews/Text",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/Text}}",
            "text": "<$transclude tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> mode=\"block\"/>\n"
        },
        "$:/core/ui/ImportPreviews/TextRaw": {
            "title": "$:/core/ui/ImportPreviews/TextRaw",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/TextRaw}}",
            "text": "<pre><code><$view tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> /></code></pre>"
        },
        "$:/core/ui/KeyboardShortcuts/advanced-search": {
            "title": "$:/core/ui/KeyboardShortcuts/advanced-search",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((advanced-search))",
            "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\"[data-tiddler-title=\"$:/AdvancedSearch\"] .tc-search input\"\"\"/>\n</$navigator>\n"
        },
        "$:/core/ui/KeyboardShortcuts/new-image": {
            "title": "$:/core/ui/KeyboardShortcuts/new-image",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((new-image))",
            "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-image}}\n</$navigator>\n"
        },
        "$:/core/ui/KeyboardShortcuts/new-journal": {
            "title": "$:/core/ui/KeyboardShortcuts/new-journal",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((new-journal))",
            "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-journal}}\n</$navigator>\n"
        },
        "$:/core/ui/KeyboardShortcuts/new-tiddler": {
            "title": "$:/core/ui/KeyboardShortcuts/new-tiddler",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((new-tiddler))",
            "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-tiddler}}\n</$navigator>\n"
        },
        "$:/core/ui/KeyboardShortcuts/sidebar-search": {
            "title": "$:/core/ui/KeyboardShortcuts/sidebar-search",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((sidebar-search))",
            "text": "<$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-search input\"/>\n"
        },
        "$:/core/ui/KeyboardShortcut/toggle-sidebar": {
            "title": "$:/core/ui/KeyboardShortcut/toggle-sidebar",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((toggle-sidebar))",
            "text": "<$list filter=\"[[$:/state/sidebar]is[missing]] [{$:/state/sidebar}removeprefix[yes]]\" emptyMessage=\"\"\"\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"yes\"/>\n\"\"\">\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"no\"/>\n</$list>\n"
        },
        "$:/core/ui/ListItemTemplate": {
            "title": "$:/core/ui/ListItemTemplate",
            "text": "<div class=\"tc-menu-list-item\">\n<$link />\n</div>"
        },
        "$:/Manager/ItemMain/Fields": {
            "title": "$:/Manager/ItemMain/Fields",
            "tags": "$:/tags/Manager/ItemMain",
            "caption": "{{$:/language/Manager/Item/Fields}}",
            "text": "<table>\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
        },
        "$:/Manager/ItemMain/RawText": {
            "title": "$:/Manager/ItemMain/RawText",
            "tags": "$:/tags/Manager/ItemMain",
            "caption": "{{$:/language/Manager/Item/RawText}}",
            "text": "<pre><code><$view/></code></pre>\n"
        },
        "$:/Manager/ItemMain/WikifiedText": {
            "title": "$:/Manager/ItemMain/WikifiedText",
            "tags": "$:/tags/Manager/ItemMain",
            "caption": "{{$:/language/Manager/Item/WikifiedText}}",
            "text": "<$transclude mode=\"block\"/>\n"
        },
        "$:/Manager/ItemSidebar/Colour": {
            "title": "$:/Manager/ItemSidebar/Colour",
            "tags": "$:/tags/Manager/ItemSidebar",
            "caption": "{{$:/language/Manager/Item/Colour}}",
            "text": "\\define swatch-styles()\nheight: 1em;\nbackground-color: $(colour)$\n\\end\n\n<$vars colour={{!!color}}>\n<p style=<<swatch-styles>>/>\n</$vars>\n<p>\n<$edit-text field=\"color\" tag=\"input\" type=\"color\"/> / <$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/>\n</p>\n"
        },
        "$:/Manager/ItemSidebar/Icon": {
            "title": "$:/Manager/ItemSidebar/Icon",
            "tags": "$:/tags/Manager/ItemSidebar",
            "caption": "{{$:/language/Manager/Item/Icon}}",
            "text": "<p>\n<div class=\"tc-manager-icon-editor\">\n<$button popup=<<qualify \"$:/state/popup/image-picker\">> class=\"tc-btn-invisible\">\n<$transclude tiddler={{!!icon}}>\n{{$:/language/Manager/Item/Icon/None}}\n</$transclude>\n</$button>\n<div class=\"tc-block-dropdown-wrapper\" style=\"position: static;\">\n<$reveal state=<<qualify \"$:/state/popup/image-picker\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-popup\">\n<div class=\"tc-block-dropdown tc-popup-keep\" style=\"width: 80%; left: 10%; right: 10%; padding: 0.5em;\">\n<$macrocall $name=\"image-picker-include-tagged-images\" actions=\"\"\"\n<$action-setfield $field=\"icon\" $value=<<imageTitle>>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/image-picker\">>/>\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n</div>\n</p>\n"
        },
        "$:/Manager/ItemSidebar/Tags": {
            "title": "$:/Manager/ItemSidebar/Tags",
            "tags": "$:/tags/Manager/ItemSidebar",
            "caption": "{{$:/language/Manager/Item/Tags}}",
            "text": "\\define tag-checkbox-actions()\n<$action-listops\n\t$tiddler=\"$:/config/Manager/RecentTags\"\n\t$subfilter=\"[<tag>] [list[$:/config/Manager/RecentTags]] +[limit[12]]\"\n/>\n\\end\n\n\\define tag-picker-actions()\n<<tag-checkbox-actions>>\n<$action-listops\n\t$tiddler=<<currentTiddler>>\n\t$field=\"tags\"\n\t$subfilter=\"[<tag>] [all[current]tags[]]\"\n/>\n\\end\n\n<p>\n<$list filter=\"[all[current]tags[]] [list[$:/config/Manager/RecentTags]] +[sort[title]] \" variable=\"tag\">\n<div>\n<$checkbox tiddler=<<currentTiddler>> tag=<<tag>> actions=<<tag-checkbox-actions>>>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$checkbox>\n</div>\n</$list>\n</p>\n<p>\n<$macrocall $name=\"tag-picker\" actions=<<tag-picker-actions>>/>\n</p>\n"
        },
        "$:/Manager/ItemSidebar/Tools": {
            "title": "$:/Manager/ItemSidebar/Tools",
            "tags": "$:/tags/Manager/ItemSidebar",
            "caption": "{{$:/language/Manager/Item/Tools}}",
            "text": "<p>\n<$button to=<<currentTiddler>>>{{$:/core/images/link}} open</$button>\n</p>\n<p>\n<$button message=\"tm-edit-tiddler\" param=<<currentTiddler>>>{{$:/core/images/edit-button}} edit</$button>\n</p>\n"
        },
        "$:/Manager": {
            "title": "$:/Manager",
            "icon": "$:/core/images/list",
            "color": "#bbb",
            "text": "\\define lingo-base() $:/language/Manager/\n\n\\define list-item-content-item()\n<div class=\"tc-manager-list-item-content-item\">\n\t<$vars state-title=\"\"\"$:/state/popup/manager/item/$(listItem)$\"\"\">\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"hide\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/down-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"nomatch\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"show\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/right-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\" class=\"tc-manager-list-item-content-item-body\">\n\t\t\t<$transclude tiddler=<<listItem>>/>\n\t\t</$reveal>\n\t</$vars>\n</div>\n\\end\n\n<div class=\"tc-manager-wrapper\">\n\t<div class=\"tc-manager-controls\">\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Show/Prompt>> <$select tiddler=\"$:/config/Manager/Show\" default=\"tiddlers\">\n\t\t\t\t<option value=\"tiddlers\"><<lingo Controls/Show/Option/Tiddlers>></option>\n\t\t\t\t<option value=\"tags\"><<lingo Controls/Show/Option/Tags>></option>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Search/Prompt>> <$edit-text tiddler=\"$:/config/Manager/Filter\" tag=\"input\" default=\"\" placeholder={{$:/language/Manager/Controls/Search/Placeholder}}/>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/FilterByTag/Prompt>> <$select tiddler=\"$:/config/Manager/Tag\" default=\"\">\n\t\t\t\t<option value=\"\"><<lingo Controls/FilterByTag/None>></option>\n\t\t\t\t<$list filter=\"[!is{$:/config/Manager/System}tags[]!is[system]sort[title]]\" variable=\"tag\">\n\t\t\t\t\t<option value=<<tag>>><$text text=<<tag>>/></option>\n\t\t\t\t</$list>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Sort/Prompt>> <$select tiddler=\"$:/config/Manager/Sort\" default=\"title\">\n\t\t\t\t<optgroup label=\"Common\">\n\t\t\t\t\t<$list filter=\"title modified modifier created creator created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t\t<optgroup label=\"All\">\n\t\t\t\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}fields[]sort[title]] -title -modified -modifier -created -creator -created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t</$select>\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/Order\" field=\"text\" checked=\"reverse\" unchecked=\"forward\" default=\"forward\">\n\t\t\t\t<<lingo Controls/Order/Prompt>>\n\t\t\t</$checkbox>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/System\" field=\"text\" checked=\"\" unchecked=\"system\" default=\"system\">\n\t\t\t\t{{$:/language/SystemTiddlers/Include/Prompt}}\n\t\t\t</$checkbox>\n\t\t</div>\n\t</div>\n\t<div class=\"tc-manager-list\">\n\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}search{$:/config/Manager/Filter}tag:strict{$:/config/Manager/Tag}sort{$:/config/Manager/Sort}order{$:/config/Manager/Order}]\">\n\t\t\t<$vars transclusion=<<currentTiddler>>>\n\t\t\t\t<div style=\"tc-manager-list-item\">\n\t\t\t\t\t<$button popup=<<qualify \"$:/state/manager/popup\">> class=\"tc-btn-invisible tc-manager-list-item-heading\" selectedClass=\"tc-manager-list-item-heading-selected\">\n\t\t\t\t\t\t<$text text=<<currentTiddler>>/>\n\t\t\t\t\t</$button>\n\t\t\t\t\t<$reveal state=<<qualify \"$:/state/manager/popup\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-manager-list-item-content tc-popup-handle\">\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-tiddler\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemMain]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-sidebar\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemSidebar]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</$reveal>\n\t\t\t\t</div>\n\t\t\t</$vars>\n\t\t</$list>\n\t</div>\n</div>\n"
        },
        "$:/core/ui/MissingTemplate": {
            "title": "$:/core/ui/MissingTemplate",
            "text": "<div class=\"tc-tiddler-missing\">\n<$button popup=<<qualify \"$:/state/popup/missing\">> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/missing\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</div>\n"
        },
        "$:/core/ui/MoreSideBar/All": {
            "title": "$:/core/ui/MoreSideBar/All",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/All/Caption}}",
            "text": "<$list filter={{$:/core/Filters/AllTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Drafts": {
            "title": "$:/core/ui/MoreSideBar/Drafts",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Drafts/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Drafts!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Explorer": {
            "title": "$:/core/ui/MoreSideBar/Explorer",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Explorer/Caption}}",
            "text": "<<tree \"$:/\">>\n"
        },
        "$:/core/ui/MoreSideBar/Missing": {
            "title": "$:/core/ui/MoreSideBar/Missing",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Missing/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Missing!!filter}} template=\"$:/core/ui/MissingTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Orphans": {
            "title": "$:/core/ui/MoreSideBar/Orphans",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Orphans/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Orphans!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Plugins": {
            "title": "$:/core/ui/MoreSideBar/Plugins",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
            "text": "\n{{$:/language/ControlPanel/Plugins/Installed/Hint}}\n\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar/Plugins]!has[draft.of]]\" \"$:/core/ui/MoreSideBar/Plugins/Plugins\">>\n"
        },
        "$:/core/ui/MoreSideBar/Recent": {
            "title": "$:/core/ui/MoreSideBar/Recent",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Recent/Caption}}",
            "text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
        },
        "$:/core/ui/MoreSideBar/Shadows": {
            "title": "$:/core/ui/MoreSideBar/Shadows",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Shadows/Caption}}",
            "text": "<$list filter={{$:/core/Filters/ShadowTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/System": {
            "title": "$:/core/ui/MoreSideBar/System",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/System/Caption}}",
            "text": "<$list filter={{$:/core/Filters/SystemTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Tags": {
            "title": "$:/core/ui/MoreSideBar/Tags",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Tags/Caption}}",
            "text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n</$set>\n\n</$set>\n\n</$set>\n\n<$list filter={{$:/core/Filters/AllTags!!filter}}>\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\n\n</$list>\n\n<hr class=\"tc-untagged-separator\">\n\n{{$:/core/ui/UntaggedTemplate}}\n"
        },
        "$:/core/ui/MoreSideBar/Types": {
            "title": "$:/core/ui/MoreSideBar/Types",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Types/Caption}}",
            "text": "<$list filter={{$:/core/Filters/TypedTiddlers!!filter}}>\n<div class=\"tc-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
        },
        "$:/core/ui/MoreSideBar/Plugins/Languages": {
            "title": "$:/core/ui/MoreSideBar/Plugins/Languages",
            "tags": "$:/tags/MoreSideBar/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}}",
            "text": "<$list filter=\"[!has[draft.of]plugin-type[language]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
        },
        "$:/core/ui/MoreSideBar/Plugins/Plugins": {
            "title": "$:/core/ui/MoreSideBar/Plugins/Plugins",
            "tags": "$:/tags/MoreSideBar/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}",
            "text": "<$list filter=\"[!has[draft.of]plugin-type[plugin]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>\n"
        },
        "$:/core/ui/MoreSideBar/Plugins/Theme": {
            "title": "$:/core/ui/MoreSideBar/Plugins/Theme",
            "tags": "$:/tags/MoreSideBar/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}",
            "text": "<$list filter=\"[!has[draft.of]plugin-type[theme]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
        },
        "$:/core/ui/Buttons/advanced-search": {
            "title": "$:/core/ui/Buttons/advanced-search",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}",
            "description": "{{$:/language/Buttons/AdvancedSearch/Hint}}",
            "text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/close-all": {
            "title": "$:/core/ui/Buttons/close-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}",
            "description": "{{$:/language/Buttons/CloseAll/Hint}}",
            "text": "<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/control-panel": {
            "title": "$:/core/ui/Buttons/control-panel",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
            "description": "{{$:/language/Buttons/ControlPanel/Hint}}",
            "text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/encryption": {
            "title": "$:/core/ui/Buttons/encryption",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}",
            "description": "{{$:/language/Buttons/Encryption/Hint}}",
            "text": "\\whitespace trim\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/export-page": {
            "title": "$:/core/ui/Buttons/export-page",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}",
            "description": "{{$:/language/Buttons/ExportPage/Hint}}",
            "text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>"
        },
        "$:/core/ui/Buttons/fold-all": {
            "title": "$:/core/ui/Buttons/fold-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}",
            "description": "{{$:/language/Buttons/FoldAll/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/full-screen": {
            "title": "$:/core/ui/Buttons/full-screen",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
            "description": "{{$:/language/Buttons/FullScreen/Hint}}",
            "text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FullScreen/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/home": {
            "title": "$:/core/ui/Buttons/home",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}",
            "description": "{{$:/language/Buttons/Home/Hint}}",
            "text": "<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Home/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/import": {
            "title": "$:/core/ui/Buttons/import",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}",
            "description": "{{$:/language/Buttons/Import/Hint}}",
            "text": "<div class=\"tc-file-input-wrapper\">\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Import/Caption}}/></span>\n</$list>\n</$button>\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n</div>"
        },
        "$:/core/ui/Buttons/language": {
            "title": "$:/core/ui/Buttons/language",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}",
            "description": "{{$:/language/Buttons/Language/Hint}}",
            "text": "\\whitespace trim\n\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/language\">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<<flag-title>>/>\n</$set>\n</span>\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Language/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/language\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/languageswitcher}}\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/manager": {
            "title": "$:/core/ui/Buttons/manager",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}}",
            "description": "{{$:/language/Buttons/Manager/Hint}}",
            "text": "\\whitespace trim\n\\define manager-button(class)\n<$button to=\"$:/Manager\" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/list}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Manager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/Manager]]\" emptyMessage=<<manager-button>>>\n<<manager-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/more-page-actions": {
            "title": "$:/core/ui/Buttons/more-page-actions",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
        },
        "$:/core/ui/Buttons/new-image": {
            "title": "$:/core/ui/Buttons/new-image",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}",
            "description": "{{$:/language/Buttons/NewImage/Hint}}",
            "text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-image}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-image-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewImage/Caption}}/></span>\n</$list>\n</$button>\n"
        },
        "$:/core/ui/Buttons/new-journal": {
            "title": "$:/core/ui/Buttons/new-journal",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
            "description": "{{$:/language/Buttons/NewJournal/Hint}}",
            "text": "\\whitespace trim\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-journal}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournal/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<<journalButton>>\n"
        },
        "$:/core/ui/Buttons/new-tiddler": {
            "title": "$:/core/ui/Buttons/new-tiddler",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}",
            "description": "{{$:/language/Buttons/NewTiddler/Hint}}",
            "text": "\\whitespace trim\n<$button actions={{$:/core/ui/Actions/new-tiddler}} tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>\n"
        },
        "$:/core/ui/Buttons/palette": {
            "title": "$:/core/ui/Buttons/palette",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}",
            "description": "{{$:/language/Buttons/Palette/Hint}}",
            "text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/palette\">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/palette}}\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Palette/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/palette\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\" style=\"font-size:0.7em;\">\n{{$:/snippets/paletteswitcher}}\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/print": {
            "title": "$:/core/ui/Buttons/print",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/print-button}} {{$:/language/Buttons/Print/Caption}}",
            "description": "{{$:/language/Buttons/Print/Hint}}",
            "text": "<$button message=\"tm-print\" tooltip={{$:/language/Buttons/Print/Hint}} aria-label={{$:/language/Buttons/Print/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/print-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Print/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/refresh": {
            "title": "$:/core/ui/Buttons/refresh",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}",
            "description": "{{$:/language/Buttons/Refresh/Hint}}",
            "text": "<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Refresh/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/save-wiki": {
            "title": "$:/core/ui/Buttons/save-wiki",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}",
            "description": "{{$:/language/Buttons/SaveWiki/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\n</$wikify>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/SaveWiki/Caption}}/></span>\n</$list>\n</span>\n</$button>"
        },
        "$:/core/ui/Buttons/storyview": {
            "title": "$:/core/ui/Buttons/storyview",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}",
            "description": "{{$:/language/Buttons/StoryView/Hint}}",
            "text": "\\whitespace trim\n\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/storyview\">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/storyview\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/viewswitcher}}\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/tag-manager": {
            "title": "$:/core/ui/Buttons/tag-manager",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}",
            "description": "{{$:/language/Buttons/TagManager/Hint}}",
            "text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/TagManager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/TagManager]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/theme": {
            "title": "$:/core/ui/Buttons/theme",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}",
            "description": "{{$:/language/Buttons/Theme/Hint}}",
            "text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/theme\">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Theme/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/theme\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/theme\">\n{{$:/snippets/themeswitcher}}\n</$linkcatcher>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/timestamp": {
            "title": "$:/core/ui/Buttons/timestamp",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/timestamp-on}} {{$:/language/Buttons/Timestamp/Caption}}",
            "description": "{{$:/language/Buttons/Timestamp/Hint}}",
            "text": "\\whitespace trim\n<$reveal type=\"nomatch\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/On/Hint}} aria-label={{$:/language/Buttons/Timestamp/On/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"yes\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-on}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/On/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/Off/Hint}} aria-label={{$:/language/Buttons/Timestamp/Off/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"no\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-off}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/Off/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/unfold-all": {
            "title": "$:/core/ui/Buttons/unfold-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}",
            "description": "{{$:/language/Buttons/UnfoldAll/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/UnfoldAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/PageTemplate/pagecontrols": {
            "title": "$:/core/ui/PageTemplate/pagecontrols",
            "text": "\\whitespace trim\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"hidden\" value=<<config-title>>>\n<$list filter=\"[<hidden>!text[hide]]\" storyview=\"pop\" variable=\"ignore\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$set>\n</$list>\n</$set>\n</$list>\n</div>\n"
        },
        "$:/core/ui/PageStylesheet": {
            "title": "$:/core/ui/PageStylesheet",
            "text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/PageTemplate/alerts": {
            "title": "$:/core/ui/PageTemplate/alerts",
            "tags": "$:/tags/PageTemplate",
            "text": "<div class=\"tc-alerts\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n"
        },
        "$:/core/ui/PageTemplate/drafts": {
            "title": "$:/core/ui/PageTemplate/drafts",
            "tags": "$:/tags/PageTemplate",
            "text": "\\whitespace trim\n<$reveal state=\"$:/status/IsReadOnly\" type=\"nomatch\" text=\"yes\" tag=\"div\" class=\"tc-drafts-list\">\n<$list filter=\"[has[draft.of]!sort[modified]] -[list[$:/StoryList]]\">\n<$link>\n{{$:/core/images/edit-button}} <$text text=<<currentTiddler>>/>\n</$link>\n</$list>\n</$reveal>\n"
        },
        "$:/core/ui/PageTemplate/pluginreloadwarning": {
            "title": "$:/core/ui/PageTemplate/pluginreloadwarning",
            "tags": "$:/tags/PageTemplate",
            "text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[{$:/status/RequireReloadDueToPluginChange}match[yes]]\">\n\n<$reveal type=\"nomatch\" state=\"$:/temp/HidePluginWarning\" text=\"yes\">\n\n<div class=\"tc-plugin-reload-warning\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<<lingo PluginReloadWarning>> <$button set=\"$:/temp/HidePluginWarning\" setTo=\"yes\" class=\"tc-btn-invisible\">{{$:/core/images/close-button}}</$button>\n\n</$set>\n\n</div>\n\n</$reveal>\n\n</$list>\n"
        },
        "$:/core/ui/PageTemplate/sidebar": {
            "title": "$:/core/ui/PageTemplate/sidebar",
            "tags": "$:/tags/PageTemplate",
            "text": "\\whitespace trim\n\\define config-title()\n$:/config/SideBarSegments/Visibility/$(listItem)$\n\\end\n\n<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n<div class=\"tc-sidebar-header\">\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBarSegment]!has[draft.of]]\" variable=\"listItem\">\n\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"  tag=\"div\">\n\n<$transclude tiddler=<<listItem>> mode=\"block\"/>\n\n</$reveal>\n\n</$list>\n\n</$reveal>\n\n</div>\n\n</$scrollable>\n"
        },
        "$:/core/ui/PageTemplate/story": {
            "title": "$:/core/ui/PageTemplate/story",
            "tags": "$:/tags/PageTemplate",
            "text": "\\whitespace trim\n<section class=\"tc-story-river\">\n\n<section class=\"story-backdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template={{$:/config/ui/ViewTemplate}} editTemplate={{$:/config/ui/EditTemplate}} storyview={{$:/view}} emptyMessage={{$:/config/EmptyStoryMessage}}/>\n\n<section class=\"story-frontdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n</section>\n"
        },
        "$:/core/ui/PageTemplate/topleftbar": {
            "title": "$:/core/ui/PageTemplate/topleftbar",
            "tags": "$:/tags/PageTemplate",
            "text": "<span class=\"tc-topbar tc-topbar-left\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
        },
        "$:/core/ui/PageTemplate/toprightbar": {
            "title": "$:/core/ui/PageTemplate/toprightbar",
            "tags": "$:/tags/PageTemplate",
            "text": "<span class=\"tc-topbar tc-topbar-right\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
        },
        "$:/core/ui/PageTemplate": {
            "title": "$:/core/ui/PageTemplate",
            "text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value={{$:/config/Toolbar/ButtonClass}}>\n\n<$set name=\"tv-enable-drag-and-drop\" value={{$:/config/DragAndDrop/Enable}}>\n\n<$set name=\"tv-show-missing-links\" value={{$:/config/MissingLinks}}>\n\n<$set name=\"storyviewTitle\" value={{$:/view}}>\n\n<$set name=\"languageTitle\" value={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n\n<$dropzone enable=<<tv-enable-drag-and-drop>>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n</div>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/PaletteManager": {
            "title": "$:/PaletteManager",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n<$transclude tiddler=\"$:/language/Docs/PaletteColours/$colour$\"><$text text=\"$colour$\"/></$transclude>\n\\end\n\\define edit-colour-placeholder()\n edit $(colourName)$\n\\end\n\\define colour-tooltip(showhide) $showhide$ editor for $(newColourName)$ \n\\define resolve-colour(macrocall)\n\\import $:/core/macros/utils\n\\whitespace trim\n<$wikify name=\"name\" text=\"\"\"$macrocall$\"\"\">\n<<name>>\n</$wikify>\n\\end\n\\define delete-colour-index-actions() <$action-setfield $index=<<colourName>>/>\n\\define palette-manager-colour-row-segment()\n\\whitespace trim\n<$edit-text index=<<colourName>> tag=\"input\" placeholder=<<edit-colour-placeholder>> default=\"\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\" class=\"tc-palette-manager-colour-input\"/>\n<$list filter=\"[<currentTiddler>getindex<colourName>removeprefix[<<]removesuffix[>>]] [<currentTiddler>getindex<colourName>removeprefix[<$]removesuffix[/>]]\" variable=\"ignore\">\n<$set name=\"state\" value={{{ [[$:/state/palettemanager/]addsuffix<currentTiddler>addsuffix[/]addsuffix<colourName>] }}}>\n<$wikify name=\"newColourName\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall={{{ [<currentTiddler>getindex<colourName>] }}}/>\"\"\">\n<$reveal state=<<state>> type=\"nomatch\" text=\"show\">\n<$button tooltip=<<colour-tooltip show>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" set=<<state>> setTo=\"show\">{{$:/core/images/down-arrow}}&nbsp;<$text text=<<newColourName>>/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$button tooltip=<<colour-tooltip hide>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" actions=\"\"\"<$action-deletetiddler $tiddler=<<state>>/>\"\"\">{{$:/core/images/up-arrow}}&nbsp;<$text text=<<newColourName>>/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$set name=\"colourName\" value=<<newColourName>>>\n<br>\n<<palette-manager-colour-row-segment>>\n<br><br>\n</$set>\n</$reveal>\n</$wikify>\n</$set>\n</$list>\n\\end\n\\define palette-manager-colour-row()\n\\whitespace trim\n<tr>\n<td>\n<span style=\"float:right;\">\n<$button tooltip=<<lingo Delete/Hint>> aria-label=<<lingo Delete/Hint>> class=\"tc-btn-invisible\" actions=<<delete-colour-index-actions>>>\n{{$:/core/images/delete-button}}</$button>\n</span>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<<palette-manager-colour-row-segment>>\n</td>\n</tr>\n\\end\n\\define palette-manager-table()\n\\whitespace trim\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]indexes[]]\" variable=\"colourName\">\n<$list filter=\"[<currentTiddler>indexes[]removeprefix<colourName>suffix[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[{$:/state/palettemanager/showexternal}removeprefix[yes]suffix[]]\" variable=\"ignore\">\n<<palette-manager-colour-row>>\n</$list>\n\"\"\">\n<<palette-manager-colour-row>>\n</$list>\n</$list>\n</tbody>\n</table>\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<$checkbox tiddler=\"$:/state/palettemanager/showexternal\" field=\"text\" checked=\"yes\" unchecked=\"no\">&nbsp;<<lingo Names/External/Show>></$checkbox>\n\n<<palette-manager-table>>\n"
        },
        "$:/core/ui/PluginInfo": {
            "title": "$:/core/ui/PluginInfo",
            "text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n\\define default-tiddler-title()\n$:/core/ui/PluginInfo/Default/$(currentTab)$\n\\end\n<$transclude tiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<default-tiddler-title>> mode=\"block\">\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\n</$transclude>\n</$transclude>\n</$transclude>\n</$transclude>\n"
        },
        "$:/core/ui/PluginInfo/Default/contents": {
            "title": "$:/core/ui/PluginInfo/Default/contents",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link />\n</li>\n</$list>\n</ul>\n"
        },
        "$:/core/ui/PluginListItemTemplate": {
            "title": "$:/core/ui/PluginListItemTemplate",
            "text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}><$view field=\"description\"><$view field=\"title\"/></$view></$link>\n</div>"
        },
        "$:/core/ui/SearchResults": {
            "title": "$:/core/ui/SearchResults",
            "text": "<div class=\"tc-search-results\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\"\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n\n</$list>\n\n</div>\n"
        },
        "$:/core/ui/SideBar/More": {
            "title": "$:/core/ui/SideBar/More",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/More/Caption}}",
            "text": "<div class=\"tc-more-sidebar\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" default={{$:/config/DefaultMoreSidebarTab}} state=\"$:/state/tab/moresidebar\" class=\"tc-vertical tc-sidebar-tabs-more\" />\n</div>"
        },
        "$:/core/ui/SideBar/Open": {
            "title": "$:/core/ui/SideBar/Open",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Open/Caption}}",
            "text": "\\whitespace trim\n\\define lingo-base() $:/language/CloseAll/\n\n\\define drop-actions()\n<$action-listops $tiddler=<<tv-story-list>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define placeholder()\n<div class=\"tc-droppable-placeholder\"/>\n\\end\n\n\\define droppable-item(button)\n\\whitespace trim\n<$droppable actions=<<drop-actions>> enable=<<tv-allow-drag-and-drop>>>\n<<placeholder>>\n<div>\n$button$\n</div>\n</$droppable>\n\\end\n\n<div class=\"tc-sidebar-tab-open\">\n<$list filter=\"[list<tv-story-list>]\" history=<<tv-history-list>> storyview=\"pop\">\n<div class=\"tc-sidebar-tab-open-item\">\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini\">{{$:/core/images/close-button}}</$button>&nbsp;<$link to={{!!title}}><$view field=\"title\"/></$link>\"\"\"/>\n</div>\n</$list>\n<$tiddler tiddler=\"\">\n<div>\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\"\"\"/>\n</div>\n</$tiddler>\n</div>\n"
        },
        "$:/core/ui/SideBar/Recent": {
            "title": "$:/core/ui/SideBar/Recent",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Recent/Caption}}",
            "text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
        },
        "$:/core/ui/SideBar/Tools": {
            "title": "$:/core/ui/SideBar/Tools",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Tools/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/SideBarLists": {
            "title": "$:/core/ui/SideBarLists",
            "text": "<$transclude tiddler=\"$:/core/ui/SideBarSegments/search\"/>\n\n<$transclude tiddler=\"$:/core/ui/SideBarSegments/tabs\"/>\n\n"
        },
        "$:/core/ui/SideBarSegments/page-controls": {
            "title": "$:/core/ui/SideBarSegments/page-controls",
            "tags": "$:/tags/SideBarSegment",
            "text": "{{||$:/core/ui/PageTemplate/pagecontrols}}\n"
        },
        "$:/core/ui/SideBarSegments/search": {
            "title": "$:/core/ui/SideBarSegments/search",
            "tags": "$:/tags/SideBarSegment",
            "text": "\\whitespace trim\n<div class=\"tc-sidebar-lists tc-sidebar-search\">\n\n<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-popup-handle\"/>\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n<$button popup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<$list filter=\"[{$:/temp/search}minlength{$:/config/Search/MinLength}limit[1]]\" variable=\"listItem\">\n<$set name=\"searchTerm\" value={{{ [<searchTiddler>get[text]] }}}>\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[!is[system]search<searchTerm>]\"/>\"\"\">\n{{$:/language/Search/Matches}}\n</$set>\n</$set>\n</$list>\n</$button>\n</$reveal>\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<<qualify \"$:/state/popup/search-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n\n<$list filter=\"[{$:/temp/search}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n{{$:/core/ui/SearchResults}}\n\n</$list>\n\n</$reveal>\n\n</$reveal>\n\n</$set>\n\n</div>\n"
        },
        "$:/core/ui/SideBarSegments/site-subtitle": {
            "title": "$:/core/ui/SideBarSegments/site-subtitle",
            "tags": "$:/tags/SideBarSegment",
            "text": "<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n"
        },
        "$:/core/ui/SideBarSegments/site-title": {
            "title": "$:/core/ui/SideBarSegments/site-title",
            "tags": "$:/tags/SideBarSegment",
            "text": "<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n"
        },
        "$:/core/ui/SideBarSegments/tabs": {
            "title": "$:/core/ui/SideBarSegments/tabs",
            "tags": "$:/tags/SideBarSegment",
            "text": "<div class=\"tc-sidebar-lists tc-sidebar-tabs\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" class=\"tc-sidebar-tabs-main\"/>\n\n</div>\n"
        },
        "$:/TagManager": {
            "title": "$:/TagManager",
            "icon": "$:/core/images/tag-button",
            "color": "#bbb",
            "text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n\\whitespace trim\n<$link to=\"\"><<lingo Icons/None>></$link>\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n\\end\n\\define iconEditor(title)\n\\whitespace trim\n<div class=\"tc-drop-down-wrapper\">\n<$button popupTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal stateTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=<<__title__>> icon=<<navigateTo>>/>\"\"\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define toggleButton(state)\n\\whitespace trim\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"closed\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"open\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n\\end\n\\whitespace trim\n<table class=\"tc-tag-manager-table\">\n<tbody>\n<tr>\n<th><<lingo Colour/Heading>></th>\n<th class=\"tc-tag-manager-tag\"><<lingo Tag/Heading>></th>\n<th><<lingo Count/Heading>></th>\n<th><<lingo Icon/Heading>></th>\n<th><<lingo Info/Heading>></th>\n</tr>\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n<tr>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n<td>{{||$:/core/ui/TagTemplate}}</td>\n<td><$count filter=\"[all[current]tagging[]]\"/></td>\n<td>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n</td>\n<td>\n<$macrocall $name=\"toggleButton\" state={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td colspan=\"4\">\n<$reveal stateTitle={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} type=\"match\" text=\"open\" default=\"\">\n<table>\n<tbody>\n<tr><td><<lingo Colour/Heading>></td><td><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/></td></tr>\n<tr><td><<lingo Icon/Heading>></td><td><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/></td></tr>\n</tbody>\n</table>\n</$reveal>\n</td>\n</tr>\n</$list>\n<tr>\n<td></td>\n<td style=\"position:relative;\">\n{{$:/core/ui/UntaggedTemplate}}\n</td>\n<td>\n<small class=\"tc-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n</td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/TagTemplate": {
            "title": "$:/core/ui/TagTemplate",
            "text": "\\whitespace trim\n<span class=\"tc-tag-list-item\">\n<$set name=\"transclusion\" value=<<currentTiddler>>>\n<$macrocall $name=\"tag-pill-body\" tag=<<currentTiddler>> icon={{!!icon}} colour={{!!color}} palette={{$:/palette}} element-tag=\"\"\"$button\"\"\" element-attributes=\"\"\"popup=<<qualify \"$:/state/popup/tag\">> dragFilter='[all[current]tagging[]]' tag='span'\"\"\"/>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\" class=\"tc-drop-down\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</$set>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]\" variable=\"listItem\"> \n<$transclude tiddler=<<listItem>>/> \n</$list>\n<hr>\n<$macrocall $name=\"list-tagged-draggable\" tag=<<currentTiddler>>/>\n</$reveal>\n</$set>\n</span>\n"
        },
        "$:/core/ui/TiddlerFieldTemplate": {
            "title": "$:/core/ui/TiddlerFieldTemplate",
            "text": "<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<listItem>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<listItem>>/>\n</td>\n</tr>"
        },
        "$:/core/ui/TiddlerFields": {
            "title": "$:/core/ui/TiddlerFields",
            "text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced/PluginInfo": {
            "title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo",
            "tags": "$:/tags/TiddlerInfo/Advanced",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <<lingo Heading>>\n\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n\n</$list>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": {
            "title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo",
            "tags": "$:/tags/TiddlerInfo/Advanced",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<<currentTiddler>>>\n\n''<<lingo Heading>>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<<lingo NotShadow/Hint>>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<<lingo Shadow/Hint>>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<<currentTiddler>>>\n<<lingo Shadow/Source>>\n</$set>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<<lingo OverriddenShadow/Hint>>\n\n</$list>\n\n\n</$list>\n</$set>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced": {
            "title": "$:/core/ui/TiddlerInfo/Advanced",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}",
            "text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n"
        },
        "$:/core/ui/TiddlerInfo/Fields": {
            "title": "$:/core/ui/TiddlerInfo/Fields",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
            "text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/List": {
            "title": "$:/core/ui/TiddlerInfo/List",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/List/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/Listed": {
            "title": "$:/core/ui/TiddlerInfo/Listed",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/References": {
            "title": "$:/core/ui/TiddlerInfo/References",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/References/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>"
        },
        "$:/core/ui/TiddlerInfo/Tagging": {
            "title": "$:/core/ui/TiddlerInfo/Tagging",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/Tools": {
            "title": "$:/core/ui/TiddlerInfo/Tools",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Tools/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/TiddlerInfo": {
            "title": "$:/core/ui/TiddlerInfo",
            "text": "<div style=\"position:relative;\">\n<div class=\"tc-tiddler-controls\" style=\"position:absolute;right:0;\">\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n</div>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>"
        },
        "$:/core/ui/TopBar/menu": {
            "title": "$:/core/ui/TopBar/menu",
            "tags": "$:/tags/TopRightBar",
            "text": "<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]!match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}}</$button>\n</$list>\n<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-left}}</$button>\n</$list>\n"
        },
        "$:/core/ui/UntaggedTemplate": {
            "title": "$:/core/ui/UntaggedTemplate",
            "text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<<lingo Tags/Untagged/Caption>>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/body": {
            "title": "$:/core/ui/ViewTemplate/body",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/classic": {
            "title": "$:/core/ui/ViewTemplate/classic",
            "tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/import": {
            "title": "$:/core/ui/ViewTemplate/import",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\define lingo-base() $:/language/Import/\n\n\\define buttons()\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n<<lingo Listing/Preview>> <$select tiddler=\"$:/state/importpreviewtype\" default=\"$:/core/ui/ImportPreviews/Text\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ImportPreview]!has[draft.of]]\">\n<option value=<<currentTiddler>>>{{!!caption}}</option>\n</$list>\n</$select>\n\\end\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n<<buttons>>\n\n{{||$:/core/ui/ImportListing}}\n\n<<buttons>>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/plugin": {
            "title": "$:/core/ui/ViewTemplate/plugin",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n<$set name=\"plugin-type\" value={{!!plugin-type}}>\n<$set name=\"default-popup-state\" value=\"yes\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n{{||$:/core/ui/Components/plugin-info}}\n</$set>\n</$set>\n</$set>\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/subtitle": {
            "title": "$:/core/ui/ViewTemplate/subtitle",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}} />\n<$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/tags": {
            "title": "$:/core/ui/ViewTemplate/tags",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/title": {
            "title": "$:/core/ui/ViewTemplate/title",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\whitespace trim\n\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<span class=\"tc-tiddler-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\"><$transclude tiddler=<<listItem>>/></$set></$reveal></$list>\n</span>\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}>\n<$transclude tiddler={{$:/config/DefaultTiddlerIcon}}/>\n</$transclude>\n</span>\n</$set>\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n<h2 class=\"tc-title\" title={{$:/language/SystemTiddler/Tooltip}}>\n<span class=\"tc-system-title-prefix\">$:/</span><$text text=<<currentTiddler>>/>\n</h2>\n</$list>\n<$list filter=\"[all[current]!prefix[$:/]]\">\n<h2 class=\"tc-title\">\n<$view field=\"title\"/>\n</h2>\n</$list>\n</$link>\n</$set>\n</div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfoSegment]!has[draft.of]] [[$:/core/ui/TiddlerInfo]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>> mode=\"block\"/></$list>\n\n</$reveal>\n</div>"
        },
        "$:/core/ui/ViewTemplate/unfold": {
            "title": "$:/core/ui/ViewTemplate/unfold",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$reveal>\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate": {
            "title": "$:/core/ui/ViewTemplate",
            "text": "\\define folded-state()\n$:/state/folded/$(currentTiddler)$\n\\end\n\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$vars storyTiddler=<<currentTiddler>> tiddlerInfoState=<<qualify \"$:/state/popup/tiddler-info\">>><div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-view-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[shadow]is[tiddler]then[tc-tiddler-overridden-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$vars>\n"
        },
        "$:/core/ui/Buttons/clone": {
            "title": "$:/core/ui/Buttons/clone",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}",
            "description": "{{$:/language/Buttons/Clone/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-new-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Clone/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/close-others": {
            "title": "$:/core/ui/Buttons/close-others",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}",
            "description": "{{$:/language/Buttons/CloseOthers/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-close-other-tiddlers\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/CloseOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/close": {
            "title": "$:/core/ui/Buttons/close",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}",
            "description": "{{$:/language/Buttons/Close/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Close/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/edit": {
            "title": "$:/core/ui/Buttons/edit",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}",
            "description": "{{$:/language/Buttons/Edit/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Edit/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/export-tiddler": {
            "title": "$:/core/ui/Buttons/export-tiddler",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}",
            "description": "{{$:/language/Buttons/ExportTiddler/Hint}}",
            "text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<<makeExportFilter>> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<<currentTiddler>>/>"
        },
        "$:/core/ui/Buttons/fold-bar": {
            "title": "$:/core/ui/Buttons/fold-bar",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Fold/FoldBar/Caption}}",
            "description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}",
            "text": "<!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->"
        },
        "$:/core/ui/Buttons/fold-others": {
            "title": "$:/core/ui/Buttons/fold-others",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}",
            "description": "{{$:/language/Buttons/FoldOthers/Hint}}",
            "text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/FoldOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/fold": {
            "title": "$:/core/ui/Buttons/fold",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}",
            "description": "{{$:/language/Buttons/Fold/Hint}}",
            "text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/info": {
            "title": "$:/core/ui/Buttons/info",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
            "description": "{{$:/language/Buttons/Info/Hint}}",
            "text": "\\whitespace trim\n\\define button-content()\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Info/Caption}}/>\n</span>\n</$list>\n\\end\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"popup\">\n<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$reveal state=<<tiddlerInfoState>> type=\"match\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"yes\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=<<tiddlerInfoState>> type=\"nomatch\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n</$reveal>"
        },
        "$:/core/ui/Buttons/more-tiddler-actions": {
            "title": "$:/core/ui/Buttons/more-tiddler-actions",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "text": "\\whitespace trim\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/More/Caption}}/>\n</span>\n</$list>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
        },
        "$:/core/ui/Buttons/new-here": {
            "title": "$:/core/ui/Buttons/new-here",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}",
            "description": "{{$:/language/Buttons/NewHere/Hint}}",
            "text": "\\whitespace trim\n\\define newHereActions()\n<$set name=\"tags\" filter=\"[<currentTiddler>] [{$:/config/NewTiddler/Tags!!tags}]\">\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<tags>>/>\n</$set>\n\\end\n\\define newHereButton()\n<$button actions=<<newHereActions>> tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewHere/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>\n"
        },
        "$:/core/ui/Buttons/new-journal-here": {
            "title": "$:/core/ui/Buttons/new-journal-here",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}",
            "description": "{{$:/language/Buttons/NewJournalHere/Hint}}",
            "text": "\\whitespace trim\n\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewJournalHere/Caption}}/>\n</span>\n</$list>\n</$wikify>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags!!tags}}>\n<$set name=\"currentTiddlerTag\" value=<<currentTiddler>>>\n<<journalButton>>\n</$set>\n</$set>\n</$set>\n"
        },
        "$:/core/ui/Buttons/open-window": {
            "title": "$:/core/ui/Buttons/open-window",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}",
            "description": "{{$:/language/Buttons/OpenWindow/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-open-window\" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/open-window}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/OpenWindow/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/permalink": {
            "title": "$:/core/ui/Buttons/permalink",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}",
            "description": "{{$:/language/Buttons/Permalink/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permalink/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/permaview": {
            "title": "$:/core/ui/Buttons/permaview",
            "tags": "$:/tags/ViewToolbar $:/tags/PageControls",
            "caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}",
            "description": "{{$:/language/Buttons/Permaview/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permaview/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/DefaultTiddlers": {
            "title": "$:/DefaultTiddlers",
            "text": "GettingStarted\n"
        },
        "$:/temp/advancedsearch": {
            "title": "$:/temp/advancedsearch",
            "text": ""
        },
        "$:/snippets/allfields": {
            "title": "$:/snippets/allfields",
            "text": "\\define renderfield(title)\n<tr class=\"tc-view-field\"><td class=\"tc-view-field-name\">''$title$'':</td><td class=\"tc-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tc-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
        },
        "$:/config/AnimationDuration": {
            "title": "$:/config/AnimationDuration",
            "text": "400"
        },
        "$:/config/AutoFocus": {
            "title": "$:/config/AutoFocus",
            "text": "title"
        },
        "$:/config/AutoSave": {
            "title": "$:/config/AutoSave",
            "text": "yes"
        },
        "$:/config/BitmapEditor/Colour": {
            "title": "$:/config/BitmapEditor/Colour",
            "text": "#444"
        },
        "$:/config/BitmapEditor/ImageSizes": {
            "title": "$:/config/BitmapEditor/ImageSizes",
            "text": "[[62px 100px]] [[100px 62px]] [[124px 200px]] [[200px 124px]] [[248px 400px]] [[371px 600px]] [[400px 248px]] [[556px 900px]] [[600px 371px]] [[742px 1200px]] [[900px 556px]] [[1200px 742px]]"
        },
        "$:/config/BitmapEditor/LineWidth": {
            "title": "$:/config/BitmapEditor/LineWidth",
            "text": "3px"
        },
        "$:/config/BitmapEditor/LineWidths": {
            "title": "$:/config/BitmapEditor/LineWidths",
            "text": "0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px"
        },
        "$:/config/BitmapEditor/Opacities": {
            "title": "$:/config/BitmapEditor/Opacities",
            "text": "0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0"
        },
        "$:/config/BitmapEditor/Opacity": {
            "title": "$:/config/BitmapEditor/Opacity",
            "text": "1.0"
        },
        "$:/config/DefaultMoreSidebarTab": {
            "title": "$:/config/DefaultMoreSidebarTab",
            "text": "$:/core/ui/MoreSideBar/Tags"
        },
        "$:/config/DefaultSidebarTab": {
            "title": "$:/config/DefaultSidebarTab",
            "text": "$:/core/ui/SideBar/Open"
        },
        "$:/config/DownloadSaver/AutoSave": {
            "title": "$:/config/DownloadSaver/AutoSave",
            "text": "no"
        },
        "$:/config/Drafts/TypingTimeout": {
            "title": "$:/config/Drafts/TypingTimeout",
            "text": "400"
        },
        "$:/config/EditTemplateFields/Visibility/title": {
            "title": "$:/config/EditTemplateFields/Visibility/title",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/tags": {
            "title": "$:/config/EditTemplateFields/Visibility/tags",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/text": {
            "title": "$:/config/EditTemplateFields/Visibility/text",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/creator": {
            "title": "$:/config/EditTemplateFields/Visibility/creator",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/created": {
            "title": "$:/config/EditTemplateFields/Visibility/created",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/modified": {
            "title": "$:/config/EditTemplateFields/Visibility/modified",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/modifier": {
            "title": "$:/config/EditTemplateFields/Visibility/modifier",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/type": {
            "title": "$:/config/EditTemplateFields/Visibility/type",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/draft.title": {
            "title": "$:/config/EditTemplateFields/Visibility/draft.title",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/draft.of": {
            "title": "$:/config/EditTemplateFields/Visibility/draft.of",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/revision": {
            "title": "$:/config/EditTemplateFields/Visibility/revision",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/bag": {
            "title": "$:/config/EditTemplateFields/Visibility/bag",
            "text": "hide"
        },
        "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4": {
            "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4",
            "text": "hide"
        },
        "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5": {
            "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5",
            "text": "hide"
        },
        "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6": {
            "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6",
            "text": "hide"
        },
        "$:/config/EditorTypeMappings/image/gif": {
            "title": "$:/config/EditorTypeMappings/image/gif",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/webp": {
            "title": "$:/config/EditorTypeMappings/image/webp",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/heic": {
            "title": "$:/config/EditorTypeMappings/image/heic",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/heif": {
            "title": "$:/config/EditorTypeMappings/image/heif",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/jpeg": {
            "title": "$:/config/EditorTypeMappings/image/jpeg",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/jpg": {
            "title": "$:/config/EditorTypeMappings/image/jpg",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/png": {
            "title": "$:/config/EditorTypeMappings/image/png",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/x-icon": {
            "title": "$:/config/EditorTypeMappings/image/x-icon",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
            "title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
            "text": "text"
        },
        "$:/config/Manager/Show": {
            "title": "$:/config/Manager/Show",
            "text": "tiddlers"
        },
        "$:/config/Manager/Filter": {
            "title": "$:/config/Manager/Filter",
            "text": ""
        },
        "$:/config/Manager/Order": {
            "title": "$:/config/Manager/Order",
            "text": "forward"
        },
        "$:/config/Manager/Sort": {
            "title": "$:/config/Manager/Sort",
            "text": "title"
        },
        "$:/config/Manager/System": {
            "title": "$:/config/Manager/System",
            "text": "system"
        },
        "$:/config/Manager/Tag": {
            "title": "$:/config/Manager/Tag",
            "text": ""
        },
        "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText": {
            "title": "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText",
            "text": "hide"
        },
        "$:/config/MissingLinks": {
            "title": "$:/config/MissingLinks",
            "text": "yes"
        },
        "$:/config/Navigation/UpdateAddressBar": {
            "title": "$:/config/Navigation/UpdateAddressBar",
            "text": "no"
        },
        "$:/config/Navigation/UpdateHistory": {
            "title": "$:/config/Navigation/UpdateHistory",
            "text": "no"
        },
        "$:/config/NewImageType": {
            "title": "$:/config/NewImageType",
            "text": "jpeg"
        },
        "$:/config/OfficialPluginLibrary": {
            "title": "$:/config/OfficialPluginLibrary",
            "tags": "$:/tags/PluginLibrary",
            "url": "https://tiddlywiki.com/library/v5.1.22/index.html",
            "caption": "{{$:/language/OfficialPluginLibrary}}",
            "text": "{{$:/language/OfficialPluginLibrary/Hint}}\n"
        },
        "$:/config/Navigation/openLinkFromInsideRiver": {
            "title": "$:/config/Navigation/openLinkFromInsideRiver",
            "text": "below"
        },
        "$:/config/Navigation/openLinkFromOutsideRiver": {
            "title": "$:/config/Navigation/openLinkFromOutsideRiver",
            "text": "top"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all",
            "text": "hide"
        },
        "$:/config/Performance/Instrumentation": {
            "title": "$:/config/Performance/Instrumentation",
            "text": "no"
        },
        "$:/config/RegisterPluginType/plugin": {
            "title": "$:/config/RegisterPluginType/plugin",
            "text": "yes"
        },
        "$:/config/RegisterPluginType/theme": {
            "title": "$:/config/RegisterPluginType/theme",
            "text": "no"
        },
        "$:/config/RegisterPluginType/language": {
            "title": "$:/config/RegisterPluginType/language",
            "text": "no"
        },
        "$:/config/RegisterPluginType/info": {
            "title": "$:/config/RegisterPluginType/info",
            "text": "no"
        },
        "$:/config/RegisterPluginType/import": {
            "title": "$:/config/RegisterPluginType/import",
            "text": "no"
        },
        "$:/config/SaveWikiButton/Template": {
            "title": "$:/config/SaveWikiButton/Template",
            "text": "$:/core/save/all"
        },
        "$:/config/SaverFilter": {
            "title": "$:/config/SaverFilter",
            "text": "[all[]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
        },
        "$:/config/Search/AutoFocus": {
            "title": "$:/config/Search/AutoFocus",
            "text": "true"
        },
        "$:/config/Search/MinLength": {
            "title": "$:/config/Search/MinLength",
            "text": "3"
        },
        "$:/config/SearchResults/Default": {
            "title": "$:/config/SearchResults/Default",
            "text": "$:/core/ui/DefaultSearchResultList"
        },
        "$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]": {
            "title": "$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]",
            "text": "yes"
        },
        "$:/config/ShortcutInfo/add-field": {
            "title": "$:/config/ShortcutInfo/add-field",
            "text": "{{$:/language/EditTemplate/Fields/Add/Button/Hint}}"
        },
        "$:/config/ShortcutInfo/advanced-search": {
            "title": "$:/config/ShortcutInfo/advanced-search",
            "text": "{{$:/language/Buttons/AdvancedSearch/Hint}}"
        },
        "$:/config/ShortcutInfo/bold": {
            "title": "$:/config/ShortcutInfo/bold",
            "text": "{{$:/language/Buttons/Bold/Hint}}"
        },
        "$:/config/ShortcutInfo/cancel-edit-tiddler": {
            "title": "$:/config/ShortcutInfo/cancel-edit-tiddler",
            "text": "{{$:/language/Buttons/Cancel/Hint}}"
        },
        "$:/config/ShortcutInfo/excise": {
            "title": "$:/config/ShortcutInfo/excise",
            "text": "{{$:/language/Buttons/Excise/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-1": {
            "title": "$:/config/ShortcutInfo/heading-1",
            "text": "{{$:/language/Buttons/Heading1/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-2": {
            "title": "$:/config/ShortcutInfo/heading-2",
            "text": "{{$:/language/Buttons/Heading2/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-3": {
            "title": "$:/config/ShortcutInfo/heading-3",
            "text": "{{$:/language/Buttons/Heading3/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-4": {
            "title": "$:/config/ShortcutInfo/heading-4",
            "text": "{{$:/language/Buttons/Heading4/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-5": {
            "title": "$:/config/ShortcutInfo/heading-5",
            "text": "{{$:/language/Buttons/Heading5/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-6": {
            "title": "$:/config/ShortcutInfo/heading-6",
            "text": "{{$:/language/Buttons/Heading6/Hint}}"
        },
        "$:/config/ShortcutInfo/italic": {
            "title": "$:/config/ShortcutInfo/italic",
            "text": "{{$:/language/Buttons/Italic/Hint}}"
        },
        "$:/config/ShortcutInfo/link": {
            "title": "$:/config/ShortcutInfo/link",
            "text": "{{$:/language/Buttons/Link/Hint}}"
        },
        "$:/config/ShortcutInfo/list-bullet": {
            "title": "$:/config/ShortcutInfo/list-bullet",
            "text": "{{$:/language/Buttons/ListBullet/Hint}}"
        },
        "$:/config/ShortcutInfo/list-number": {
            "title": "$:/config/ShortcutInfo/list-number",
            "text": "{{$:/language/Buttons/ListNumber/Hint}}"
        },
        "$:/config/ShortcutInfo/mono-block": {
            "title": "$:/config/ShortcutInfo/mono-block",
            "text": "{{$:/language/Buttons/MonoBlock/Hint}}"
        },
        "$:/config/ShortcutInfo/mono-line": {
            "title": "$:/config/ShortcutInfo/mono-line",
            "text": "{{$:/language/Buttons/MonoLine/Hint}}"
        },
        "$:/config/ShortcutInfo/new-image": {
            "title": "$:/config/ShortcutInfo/new-image",
            "text": "{{$:/language/Buttons/NewImage/Hint}}"
        },
        "$:/config/ShortcutInfo/new-journal": {
            "title": "$:/config/ShortcutInfo/new-journal",
            "text": "{{$:/language/Buttons/NewJournal/Hint}}"
        },
        "$:/config/ShortcutInfo/new-tiddler": {
            "title": "$:/config/ShortcutInfo/new-tiddler",
            "text": "{{$:/language/Buttons/NewTiddler/Hint}}"
        },
        "$:/config/ShortcutInfo/picture": {
            "title": "$:/config/ShortcutInfo/picture",
            "text": "{{$:/language/Buttons/Picture/Hint}}"
        },
        "$:/config/ShortcutInfo/preview": {
            "title": "$:/config/ShortcutInfo/preview",
            "text": "{{$:/language/Buttons/Preview/Hint}}"
        },
        "$:/config/ShortcutInfo/quote": {
            "title": "$:/config/ShortcutInfo/quote",
            "text": "{{$:/language/Buttons/Quote/Hint}}"
        },
        "$:/config/ShortcutInfo/save-tiddler": {
            "title": "$:/config/ShortcutInfo/save-tiddler",
            "text": "{{$:/language/Buttons/Save/Hint}}"
        },
        "$:/config/ShortcutInfo/sidebar-search": {
            "title": "$:/config/ShortcutInfo/sidebar-search",
            "text": "{{$:/language/Buttons/SidebarSearch/Hint}}"
        },
        "$:/config/ShortcutInfo/stamp": {
            "title": "$:/config/ShortcutInfo/stamp",
            "text": "{{$:/language/Buttons/Stamp/Hint}}"
        },
        "$:/config/ShortcutInfo/strikethrough": {
            "title": "$:/config/ShortcutInfo/strikethrough",
            "text": "{{$:/language/Buttons/Strikethrough/Hint}}"
        },
        "$:/config/ShortcutInfo/subscript": {
            "title": "$:/config/ShortcutInfo/subscript",
            "text": "{{$:/language/Buttons/Subscript/Hint}}"
        },
        "$:/config/ShortcutInfo/superscript": {
            "title": "$:/config/ShortcutInfo/superscript",
            "text": "{{$:/language/Buttons/Superscript/Hint}}"
        },
        "$:/config/ShortcutInfo/toggle-sidebar": {
            "title": "$:/config/ShortcutInfo/toggle-sidebar",
            "text": "{{$:/language/Buttons/ToggleSidebar/Hint}}"
        },
        "$:/config/ShortcutInfo/underline": {
            "title": "$:/config/ShortcutInfo/underline",
            "text": "{{$:/language/Buttons/Underline/Hint}}"
        },
        "$:/config/SyncFilter": {
            "title": "$:/config/SyncFilter",
            "text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
        },
        "$:/config/Tags/MinLength": {
            "title": "$:/config/Tags/MinLength",
            "text": "0"
        },
        "$:/config/TextEditor/EditorHeight/Height": {
            "title": "$:/config/TextEditor/EditorHeight/Height",
            "text": "400px"
        },
        "$:/config/TextEditor/EditorHeight/Mode": {
            "title": "$:/config/TextEditor/EditorHeight/Mode",
            "text": "auto"
        },
        "$:/config/TiddlerInfo/Default": {
            "title": "$:/config/TiddlerInfo/Default",
            "text": "$:/core/ui/TiddlerInfo/Fields"
        },
        "$:/config/TiddlerInfo/Mode": {
            "title": "$:/config/TiddlerInfo/Mode",
            "text": "popup"
        },
        "$:/config/Tiddlers/TitleLinks": {
            "title": "$:/config/Tiddlers/TitleLinks",
            "text": "no"
        },
        "$:/config/Toolbar/ButtonClass": {
            "title": "$:/config/Toolbar/ButtonClass",
            "text": "tc-btn-invisible"
        },
        "$:/config/Toolbar/Icons": {
            "title": "$:/config/Toolbar/Icons",
            "text": "yes"
        },
        "$:/config/Toolbar/Text": {
            "title": "$:/config/Toolbar/Text",
            "text": "no"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
            "text": "show"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others",
            "text": "hide"
        },
        "$:/config/shortcuts-mac/bold": {
            "title": "$:/config/shortcuts-mac/bold",
            "text": "meta-B"
        },
        "$:/config/shortcuts-mac/italic": {
            "title": "$:/config/shortcuts-mac/italic",
            "text": "meta-I"
        },
        "$:/config/shortcuts-mac/underline": {
            "title": "$:/config/shortcuts-mac/underline",
            "text": "meta-U"
        },
        "$:/config/shortcuts-mac/new-image": {
            "title": "$:/config/shortcuts-mac/new-image",
            "text": "ctrl-I"
        },
        "$:/config/shortcuts-mac/new-journal": {
            "title": "$:/config/shortcuts-mac/new-journal",
            "text": "ctrl-J"
        },
        "$:/config/shortcuts-mac/new-tiddler": {
            "title": "$:/config/shortcuts-mac/new-tiddler",
            "text": "ctrl-N"
        },
        "$:/config/shortcuts-not-mac/bold": {
            "title": "$:/config/shortcuts-not-mac/bold",
            "text": "ctrl-B"
        },
        "$:/config/shortcuts-not-mac/italic": {
            "title": "$:/config/shortcuts-not-mac/italic",
            "text": "ctrl-I"
        },
        "$:/config/shortcuts-not-mac/underline": {
            "title": "$:/config/shortcuts-not-mac/underline",
            "text": "ctrl-U"
        },
        "$:/config/shortcuts-not-mac/new-image": {
            "title": "$:/config/shortcuts-not-mac/new-image",
            "text": "alt-I"
        },
        "$:/config/shortcuts-not-mac/new-journal": {
            "title": "$:/config/shortcuts-not-mac/new-journal",
            "text": "alt-J"
        },
        "$:/config/shortcuts-not-mac/new-tiddler": {
            "title": "$:/config/shortcuts-not-mac/new-tiddler",
            "text": "alt-N"
        },
        "$:/config/shortcuts/add-field": {
            "title": "$:/config/shortcuts/add-field",
            "text": "enter"
        },
        "$:/config/shortcuts/advanced-search": {
            "title": "$:/config/shortcuts/advanced-search",
            "text": "ctrl-shift-A"
        },
        "$:/config/shortcuts/cancel-edit-tiddler": {
            "title": "$:/config/shortcuts/cancel-edit-tiddler",
            "text": "escape"
        },
        "$:/config/shortcuts/excise": {
            "title": "$:/config/shortcuts/excise",
            "text": "ctrl-E"
        },
        "$:/config/shortcuts/sidebar-search": {
            "title": "$:/config/shortcuts/sidebar-search",
            "text": "ctrl-shift-F"
        },
        "$:/config/shortcuts/heading-1": {
            "title": "$:/config/shortcuts/heading-1",
            "text": "ctrl-1"
        },
        "$:/config/shortcuts/heading-2": {
            "title": "$:/config/shortcuts/heading-2",
            "text": "ctrl-2"
        },
        "$:/config/shortcuts/heading-3": {
            "title": "$:/config/shortcuts/heading-3",
            "text": "ctrl-3"
        },
        "$:/config/shortcuts/heading-4": {
            "title": "$:/config/shortcuts/heading-4",
            "text": "ctrl-4"
        },
        "$:/config/shortcuts/heading-5": {
            "title": "$:/config/shortcuts/heading-5",
            "text": "ctrl-5"
        },
        "$:/config/shortcuts/heading-6": {
            "title": "$:/config/shortcuts/heading-6",
            "text": "ctrl-6"
        },
        "$:/config/shortcuts/link": {
            "title": "$:/config/shortcuts/link",
            "text": "ctrl-L"
        },
        "$:/config/shortcuts/linkify": {
            "title": "$:/config/shortcuts/linkify",
            "text": "alt-shift-L"
        },
        "$:/config/shortcuts/list-bullet": {
            "title": "$:/config/shortcuts/list-bullet",
            "text": "ctrl-shift-L"
        },
        "$:/config/shortcuts/list-number": {
            "title": "$:/config/shortcuts/list-number",
            "text": "ctrl-shift-N"
        },
        "$:/config/shortcuts/mono-block": {
            "title": "$:/config/shortcuts/mono-block",
            "text": "ctrl-shift-M"
        },
        "$:/config/shortcuts/mono-line": {
            "title": "$:/config/shortcuts/mono-line",
            "text": "ctrl-M"
        },
        "$:/config/shortcuts/picture": {
            "title": "$:/config/shortcuts/picture",
            "text": "ctrl-shift-I"
        },
        "$:/config/shortcuts/preview": {
            "title": "$:/config/shortcuts/preview",
            "text": "alt-P"
        },
        "$:/config/shortcuts/quote": {
            "title": "$:/config/shortcuts/quote",
            "text": "ctrl-Q"
        },
        "$:/config/shortcuts/save-tiddler": {
            "title": "$:/config/shortcuts/save-tiddler",
            "text": "ctrl+enter"
        },
        "$:/config/shortcuts/stamp": {
            "title": "$:/config/shortcuts/stamp",
            "text": "ctrl-S"
        },
        "$:/config/shortcuts/strikethrough": {
            "title": "$:/config/shortcuts/strikethrough",
            "text": "ctrl-T"
        },
        "$:/config/shortcuts/subscript": {
            "title": "$:/config/shortcuts/subscript",
            "text": "ctrl-shift-B"
        },
        "$:/config/shortcuts/superscript": {
            "title": "$:/config/shortcuts/superscript",
            "text": "ctrl-shift-P"
        },
        "$:/config/shortcuts/toggle-sidebar": {
            "title": "$:/config/shortcuts/toggle-sidebar",
            "text": "alt-shift-S"
        },
        "$:/config/shortcuts/transcludify": {
            "title": "$:/config/shortcuts/transcludify",
            "text": "alt-shift-T"
        },
        "$:/config/ui/EditTemplate": {
            "title": "$:/config/ui/EditTemplate",
            "text": "$:/core/ui/EditTemplate"
        },
        "$:/config/ui/ViewTemplate": {
            "title": "$:/config/ui/ViewTemplate",
            "text": "$:/core/ui/ViewTemplate"
        },
        "$:/config/WikiParserRules/Inline/wikilink": {
            "title": "$:/config/WikiParserRules/Inline/wikilink",
            "text": "enable"
        },
        "$:/snippets/currpalettepreview": {
            "title": "$:/snippets/currpalettepreview",
            "text": "\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch()\n<$set name=\"swatchColour\" value={{##$(colour)$}}\n><div class=\"tc-swatch\" style=<<swatchStyle>> title=<<colour>>/></$set>\n\\end\n<div class=\"tc-swatches-horiz\"><$list filter=\"\nforeground\nbackground\nmuted-foreground\nprimary\npage-background\ntab-background\ntiddler-info-background\n\" variable=\"colour\"><<swatch>></$list></div>"
        },
        "$:/snippets/download-wiki-button": {
            "title": "$:/snippets/download-wiki-button",
            "text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<<lingo Full/Caption>> {{$:/core/images/save-button}}\n</$button>"
        },
        "$:/language": {
            "title": "$:/language",
            "text": "$:/languages/en-GB"
        },
        "$:/snippets/languageswitcher": {
            "title": "$:/snippets/languageswitcher",
            "text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n\n<$linkcatcher to=\"$:/language\">\n<div class=\"tc-chooser tc-language-chooser\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/language}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link>\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value=<<currentTiddler>>>\n<$transclude subtiddler=<<flag-title>>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n</$list>\n</$transclude>\n</$set>\n</span>\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n</$view>\n</$view>\n</$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
        },
        "$:/core/macros/CSS": {
            "title": "$:/core/macros/CSS",
            "tags": "$:/tags/Macro",
            "text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"><$transclude tiddler=\"$:/config/DefaultColourMappings/$name$\"/></$transclude></$transclude>\n\\end\n\n\\define color(name)\n<<colour $name$>>\n\\end\n\n\\define box-shadow(shadow)\n``\n  -webkit-box-shadow: $shadow$;\n     -moz-box-shadow: $shadow$;\n          box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n  -webkit-filter: $filter$;\n     -moz-filter: $filter$;\n          filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n  -webkit-transition: $transition$;\n     -moz-transition: $transition$;\n          transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n  -webkit-transform-origin: $origin$;\n     -moz-transform-origin: $origin$;\n          transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define column-count(columns)\n``\n-moz-column-count: $columns$;\n-webkit-column-count: $columns$;\ncolumn-count: $columns$;\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}} _canonical_uri={{$title$!!_canonical_uri}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-background-attachment(text)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" type=\"nomatch\" text=\"\">$text$</$reveal>\n\\end\n"
        },
        "$:/core/macros/colour-picker": {
            "title": "$:/core/macros/colour-picker",
            "tags": "$:/tags/Macro",
            "text": "\\define colour-picker-update-recent()\n<$action-listops\n\t$tiddler=\"$:/config/ColourPicker/Recent\"\n\t$subfilter=\"$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]\"\n/>\n\\end\n\n\\define colour-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(colour-picker-value)$\"\"\">\n\n$(colour-picker-update-recent)$\n\n$actions$\n\n<span style=\"display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;\"/>\n\n</$button>\n\\end\n\n\\define colour-picker-recent-inner(actions)\n<$set name=\"colour-picker-value\" value=\"$(recentColour)$\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\\end\n\n\\define colour-picker-recent(actions)\n{{$:/language/ColourPicker/Recent}} <$list filter=\"[list[$:/config/ColourPicker/Recent]]\" variable=\"recentColour\">\n<$macrocall $name=\"colour-picker-recent-inner\" actions=\"\"\"$actions$\"\"\"/></$list>\n\\end\n\n\\define colour-picker(actions)\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker-recent\" actions=\"\"\"$actions$\"\"\"/>\n\n---\n\n<$list filter=\"LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\" variable=\"colour-picker-value\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\n---\n\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" tag=\"input\" default=\"\" placeholder=\"\"/>\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" type=\"color\" tag=\"input\"/>\n<$set name=\"colour-picker-value\" value={{$:/config/ColourPicker/New}}>\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\n</div>\n\n\\end\n"
        },
        "$:/core/macros/copy-to-clipboard": {
            "title": "$:/core/macros/copy-to-clipboard",
            "tags": "$:/tags/Macro",
            "text": "\\define copy-to-clipboard(src,class:\"tc-btn-invisible\",style)\n<$button class=<<__class__>> style=<<__style__>> message=\"tm-copy-to-clipboard\" param=<<__src__>> tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}>\n{{$:/core/images/copy-clipboard}} <$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>\n</$button>\n\\end\n\n\\define copy-to-clipboard-above-right(src,class:\"tc-btn-invisible\",style)\n<div style=\"position: relative;\">\n<div style=\"position: absolute; bottom: 0; right: 0;\">\n<$macrocall $name=\"copy-to-clipboard\" src=<<__src__>> class=<<__class__>> style=<<__style__>>/>\n</div>\n</div>\n\\end\n\n"
        },
        "$:/core/macros/diff": {
            "title": "$:/core/macros/diff",
            "tags": "$:/tags/Macro",
            "text": "\\define compareTiddlerText(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle)\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>>>\n<$diff-text source=<<source>> dest=<<dest>>/>\n</$set>\n</$set>\n\\end\n\n\\define compareTiddlers(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle,exclude)\n<table class=\"tc-diff-tiddlers\">\n<tbody>\n<$set name=\"sourceFields\" filter=\"[<__sourceTiddlerTitle__>fields[]sort[]]\">\n<$set name=\"destFields\" filter=\"[<__destSubTiddlerTitle__>subtiddlerfields<__destTiddlerTitle__>sort[]]\">\n<$list filter=\"[enlist<sourceFields>] [enlist<destFields>] -[enlist<__exclude__>] +[sort[]]\" variable=\"fieldName\">\n<tr>\n<th>\n<$text text=<<fieldName>>/> \n</th>\n<td>\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>> field=<<fieldName>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>> field=<<fieldName>>>\n<$diff-text source=<<source>> dest=<<dest>>>\n</$diff-text>\n</$set>\n</$set>\n</td>\n</tr>\n</$list>\n</$set>\n</$set>\n</tbody>\n</table>\n\\end\n"
        },
        "$:/core/macros/dumpvariables": {
            "title": "$:/core/macros/dumpvariables",
            "tags": "$:/tags/Macro",
            "text": "\\define dumpvariables()\n<ul>\n<$list filter=\"[variables[]]\" variable=\"varname\">\n<li>\n<strong><code><$text text=<<varname>>/></code></strong>:<br/>\n<$codeblock code={{{ [<varname>getvariable[]] }}}/>\n</li>\n</$list>\n</ul>\n\\end\n"
        },
        "$:/core/macros/export": {
            "title": "$:/core/macros/export",
            "tags": "$:/tags/Macro",
            "text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<span class=\"tc-popup-keep\"><$button popup=<<qualify \"$:/state/popup/export\">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button></span><$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=\"\"\"$exportFilter$\"\"\" filename=<<exportButtonFilename \"\"\"$baseFilename$\"\"\">>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/export\">>/>\n<$transclude field=\"description\"/>\n</$button>\n</$set>\n</$list>\n</div>\n</$reveal>\n\\end\n"
        },
        "$:/core/macros/image-picker": {
            "title": "$:/core/macros/image-picker",
            "created": "20170715180840889",
            "modified": "20170715180914005",
            "tags": "$:/tags/Macro",
            "type": "text/vnd.tiddlywiki",
            "text": "\\define image-picker-thumbnail(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(imageTitle)$\"\"\">\n$actions$\n<$transclude tiddler=<<imageTitle>>/>\n</$button>\n\\end\n\n\\define image-picker-list(filter,actions)\n<$list filter=\"\"\"$filter$\"\"\" variable=\"imageTitle\">\n<$macrocall $name=\"image-picker-thumbnail\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\\end\n\n\\define image-picker(actions,filter:\"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]\",subfilter:\"\")\n<div class=\"tc-image-chooser\">\n<$vars state-system=<<qualify \"$:/state/image-picker/system\">>>\n<$checkbox tiddler=<<state-system>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"hide\">\n{{$:/language/SystemTiddlers/Include/Prompt}}\n</$checkbox>\n<$reveal state=<<state-system>> type=\"match\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$ +[!is[system]]\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n<$reveal state=<<state-system>> type=\"nomatch\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n</$vars>\n</div>\n\\end\n\n\\define image-picker-include-tagged-images(actions)\n<$macrocall $name=\"image-picker\" filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n"
        },
        "$:/core/macros/lingo": {
            "title": "$:/core/macros/lingo",
            "tags": "$:/tags/Macro",
            "text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n"
        },
        "$:/core/macros/list": {
            "title": "$:/core/macros/list",
            "tags": "$:/tags/Macro",
            "text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\",emptyMessage)\n\\whitespace trim\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\" emptyMessage=<<__emptyMessage__>>>\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$subtype$>\n</$list>\n</$type$>\n\\end\n\n\\define list-links-draggable-drop-actions()\n<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define list-links-draggable(tiddler,field:\"list\",type:\"ul\",subtype:\"li\",class:\"\",itemTemplate)\n\\whitespace trim\n<span class=\"tc-links-draggable-list\">\n<$vars targetTiddler=\"\"\"$tiddler$\"\"\" targetField=\"\"\"$field$\"\"\">\n<$type$ class=\"$class$\">\n<$list filter=\"[list[$tiddler$!!$field$]]\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"\"\"$subtype$\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\"/>\n<div>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$transclude>\n</div>\n</$droppable>\n</$list>\n</$type$>\n<$tiddler tiddler=\"\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"div\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\">\n&nbsp;\n</div>\n<div style=\"height:0.5em;\"/>\n</$droppable>\n</$tiddler>\n</$vars>\n</span>\n\\end\n\n\\define list-tagged-draggable-drop-actions(tag)\n<!-- Save the current ordering of the tiddlers with this tag -->\n<$set name=\"order\" filter=\"[<__tag__>tagging[]]\">\n<!-- Remove any list-after or list-before fields from the tiddlers with this tag -->\n<$list filter=\"[<__tag__>tagging[]]\">\n<$action-deletefield $field=\"list-before\"/>\n<$action-deletefield $field=\"list-after\"/>\n</$list>\n<!-- Save the new order to the Tag Tiddler -->\n<$action-listops $tiddler=<<__tag__>> $field=\"list\" $filter=\"+[enlist<order>] +[insertbefore:currentTiddler<actionTiddler>]\"/>\n<!-- Make sure the newly added item has the right tag -->\n<!-- Removing this line makes dragging tags within the dropdown work as intended -->\n<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>-->\n<!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->\n<$list filter=\"[<actionTiddler>!contains:tags<__tag__>]\">\n<$fieldmangler tiddler=<<actionTiddler>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<__tag__>>/>\n</$fieldmangler>\n</$list>\n</$set>\n\\end\n\n\\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:\"div\",storyview:\"\")\n\\whitespace trim\n<span class=\"tc-tagged-draggable-list\">\n<$set name=\"tag\" value=<<__tag__>>>\n<$list filter=\"[<__tag__>tagging[]$subFilter$]\" emptyMessage=<<__emptyMessage__>> storyview=<<__storyview__>>>\n<$elementTag$ class=\"tc-menu-list-item\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</$transclude>\n</$elementTag$>\n</$droppable>\n</$elementTag$>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$ style=\"height:0.5em;\">\n</$elementTag$>\n</$droppable>\n</$tiddler>\n</$set>\n</span>\n\\end\n"
        },
        "$:/core/macros/tabs": {
            "title": "$:/core/macros/tabs",
            "tags": "$:/tags/Macro",
            "text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate,retain)\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\" storyview=\"pop\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=\"$buttonTemplate$\" mode=\"inline\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$transclude>\n</$set></$tiddler></$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\" retain=\"\"\"$retain$\"\"\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n\\end\n"
        },
        "$:/core/macros/tag-picker": {
            "title": "$:/core/macros/tag-picker",
            "tags": "$:/tags/Macro",
            "text": "\\define add-tag-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{{ [<newTagNameTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n\\end\n\n\\define tag-button()\n<$button class=\"tc-btn-invisible\" tag=\"a\" tooltip={{$:/language/EditTemplate/Tags/Add/Button/Hint}}>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<tag>>/>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$button>\n\\end\n\n\\define tag-picker-inner()\n\\whitespace trim\n<div class=\"tc-edit-add-tag\">\n<span class=\"tc-add-tag-name\">\n<$keyboard key=\"ENTER\" actions=<<add-tag-actions>>>\n<$edit-text tiddler=<<newTagNameTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex=<<tabIndex>> focus={{{ [{$:/config/AutoFocus}match[tags]then[true]] ~[[false]] }}}/>\n</$keyboard>\n</span>&nbsp;<$button popup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button>&nbsp;<span class=\"tc-add-tag-button\">\n<$set name=\"tag\" value={{{ [<newTagNameTiddler>get[text]] }}}>\n<$button set=\"$:/temp/NewTagName\" setTo=\"\" class=\"\">\n<<add-tag-actions>>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n{{$:/language/EditTemplate/Tags/Add/Button}}\n</$button>\n</$set>\n</span>\n</div>\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/tags-auto-complete\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown\">\n<$set name=\"newTagName\" value={{{ [<newTagNameTiddler>get[text]] }}}>\n<$list filter=\"[<newTagName>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=\"[tags[]!is[system]search:title<newTagName>sort[]]\" variable=\"tag\">\n<<tag-button>>\n</$list></$list>\n<hr>\n<$list filter=\"[<newTagName>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=\"[tags[]is[system]search:title<newTagName>sort[]]\" variable=\"tag\">\n<<tag-button>>\n</$list></$list>\n</$set>\n</div>\n</$reveal>\n</div>\n\\end\n\\define tag-picker()\n\\whitespace trim\n<$list filter=\"[<newTagNameTiddler>match[]]\" emptyMessage=<<tag-picker-inner>>>\n<$set name=\"newTagNameTiddler\" value=<<qualify \"$:/temp/NewTagName\">>>\n<<tag-picker-inner>>\n</$set>\n</$list>\n\\end\n"
        },
        "$:/core/macros/tag": {
            "title": "$:/core/macros/tag",
            "tags": "$:/tags/Macro",
            "text": "\\define tag-pill-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<$element-tag$ $element-attributes$ class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n$actions$<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view tiddler=<<__tag__>> field=\"title\" format=\"text\" />\n</$element-tag$>\n</$vars>\n\\end\n\n\\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)\n<$macrocall $name=\"tag-pill-inner\" tag=<<__tag__>> icon=\"\"\"$icon$\"\"\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n\n\\define tag-pill(tag,element-tag:\"span\",element-attributes:\"\",actions:\"\")\n<span class=\"tc-tag-list-item\">\n<$macrocall $name=\"tag-pill-body\" tag=<<__tag__>> icon={{{ [<__tag__>get[icon]] }}} colour={{{ [<__tag__>get[color]] }}} palette={{$:/palette}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</span>\n\\end\n\n\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
        },
        "$:/core/macros/thumbnails": {
            "title": "$:/core/macros/thumbnails",
            "tags": "$:/tags/Macro",
            "text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\"><div class=\"tc-thumbnail-wrapper\">\n<div class=\"tc-thumbnail-image\" style=\"width:$width$px;height:$height$px;\"><$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n</$reveal><$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\"></$reveal></div><div class=\"tc-thumbnail-icon\" style=\"fill:$color$;color:$color$;\">\n$icon$\n</div><div class=\"tc-thumbnail-caption\">\n$caption$\n</div>\n</div></$link>\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<div class=\"tc-thumbnail-right-wrapper\"><<thumbnail \"\"\"$link$\"\"\" \"\"\"$icon$\"\"\" \"\"\"$color$\"\"\" \"\"\"$background-color$\"\"\" \"\"\"$image$\"\"\" \"\"\"$caption$\"\"\" \"\"\"$width$\"\"\" \"\"\"$height$\"\"\">></div>\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/></$list>\n\\end\n"
        },
        "$:/core/macros/timeline": {
            "title": "$:/core/macros/timeline",
            "created": "20141212105914482",
            "modified": "20141212110330815",
            "tags": "$:/tags/Macro",
            "text": "\\define timeline-title()\n\\whitespace trim\n<!-- Override this macro with a global macro \n     of the same name if you need to change \n     how titles are displayed on the timeline \n     -->\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n<div class=\"tc-timeline\">\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><<timeline-title>></$link>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n\\end\n"
        },
        "$:/core/macros/toc": {
            "title": "$:/core/macros/toc",
            "tags": "$:/tags/Macro",
            "text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n  <$transclude field=\"caption\">\n    <$view field=\"title\"/>\n  </$transclude>\n</$set>\n\\end\n\n\\define toc-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<ol class=\"tc-toc\">\n  <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n    <$vars item=<<currentTiddler>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n      <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n        <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n          <li class=<<toc-item-class>>>\n            <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link><$view field='caption'><$view field='title'/></$view></$link>\">\n              <<toc-caption>>\n            </$list>\n            <$macrocall $name=\"toc-body\" tag=<<item>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n          </li>\n        </$set>\n      </$set>\n    </$vars>\n  </$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter:\"\")\n<$macrocall $name=\"toc-body\"  tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> />\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n  <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n    <li class=<<toc-item-class>>>\n    <$link>\n      <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n        <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n          {{$:/core/images/right-arrow}}\n        </$button>\n      </$reveal>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n          {{$:/core/images/down-arrow}}\n        </$button>\n      </$reveal>\n      <<toc-caption>>\n    </$link>\n    <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n      <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n    </$reveal>\n    </li>\n  </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n  <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n    <li class=<<toc-item-class>>>\n      <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n        <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n          {{$:/core/images/right-arrow}}\n          <<toc-caption>>\n        </$button>\n      </$reveal>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n          {{$:/core/images/down-arrow}}\n          <<toc-caption>>\n        </$button>\n      </$reveal>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n      </$reveal>\n    </li>\n  </$set>\n</$qualify>\n\\end\n\n\\define toc-expandable-empty-message()\n<$macrocall $name=\"toc-linked-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter:\"\",exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n  <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n    <ol class=\"tc-toc toc-expandable\">\n      <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n        <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=<<toc-expandable-empty-message>> >\n          <$macrocall $name=\"toc-unlinked-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"\"\"itemClassFilter\"\"\" exclude=<<excluded>> path=<<path>> />\n        </$list>\n      </$list>\n    </ol>\n  </$set>\n</$vars>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n  <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\" >\n    <li class=<<toc-item-class>>>\n      <$link>\n          <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n          <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n            <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n              {{$:/core/images/right-arrow}}\n            </$button>\n          </$reveal>\n          <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n            <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n              {{$:/core/images/down-arrow}}\n            </$button>\n          </$reveal>\n        </$list>\n        <<toc-caption>>\n      </$link>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n      </$reveal>\n    </li>\n  </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n  <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n    <li class=<<toc-item-class>>>\n      <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\">\n        <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n          <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n            {{$:/core/images/right-arrow}}\n            <<toc-caption>>\n          </$button>\n        </$reveal>\n        <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n          <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n            {{$:/core/images/down-arrow}}\n            <<toc-caption>>\n          </$button>\n        </$reveal>\n      </$list>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n      </$reveal>\n    </li>\n  </$set>\n</$qualify>\n\\end\n\n\\define toc-selective-expandable-empty-message()\n<$macrocall $name=\"toc-linked-selective-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter,exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n  <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n    <ol class=\"tc-toc toc-selective-expandable\">\n      <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n        <$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=<<toc-selective-expandable-empty-message>> >\n          <$macrocall $name=\"toc-unlinked-selective-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n        </$list>\n      </$list>\n    </ol>\n  </$set>\n</$vars>\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{{ [<__selectedTiddler__>get[text]] }}}>\n  <div class=\"tc-tabbed-table-of-contents\">\n    <$linkcatcher to=<<__selectedTiddler__>>>\n      <div class=\"tc-table-of-contents\">\n        <$macrocall $name=\"toc-selective-expandable\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"[all[current]] -[<__selectedTiddler__>get[text]]\"/>\n      </div>\n    </$linkcatcher>\n    <div class=\"tc-tabbed-table-of-contents-content\">\n      <$reveal stateTitle=<<__selectedTiddler__>> type=\"nomatch\" text=\"\">\n        <$transclude mode=\"block\" tiddler=<<__template__>>>\n          <h1><<toc-caption>></h1>\n          <$transclude mode=\"block\">$missingText$</$transclude>\n        </$transclude>\n      </$reveal>\n      <$reveal stateTitle=<<__selectedTiddler__>> type=\"match\" text=\"\">\n        $unselectedText$\n      </$reveal>\n    </div>\n  </div>\n</$tiddler>\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=<<__selectedTiddler__>>>\n  <$macrocall $name=\"toc-tabbed-external-nav\" tag=<<__tag__>> sort=<<__sort__>> selectedTiddler=<<__selectedTiddler__>> unselectedText=<<__unselectedText__>> missingText=<<__missingText__>> template=<<__template__>>/>\n</$linkcatcher>\n\\end\n\n"
        },
        "$:/core/macros/translink": {
            "title": "$:/core/macros/translink",
            "tags": "$:/tags/Macro",
            "text": "\\define translink(title,mode:\"block\")\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: black; foreground; white;\">\n<$link to=\"\"\"$title$\"\"\">\n<$text text=\"\"\"$title$\"\"\"/>\n</$link>\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: white; foreground; black;\">\n<$transclude tiddler=\"\"\"$title$\"\"\" mode=\"$mode$\">\n\"<$text text=\"\"\"$title$\"\"\"/>\" is missing\n</$transclude>\n</div>\n</div>\n\\end\n"
        },
        "$:/core/macros/tree": {
            "title": "$:/core/macros/tree",
            "tags": "$:/tags/Macro",
            "text": "\\define leaf-link(full-title,chunk,separator: \"/\")\n<$link to=<<__full-title__>>><$text text=<<__chunk__>>/></$link>\n\\end\n\n\\define leaf-node(prefix,chunk)\n<li>\n<$list filter=\"[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]\" variable=\"full-title\">\n<$list filter=\"[<full-title>removeprefix<__prefix__>]\" variable=\"chunk\">\n<span>{{$:/core/images/file}}</span> <$macrocall $name=\"leaf-link\" full-title=<<full-title>> chunk=<<chunk>>/>\n</$list>\n</$list>\n</li>\n\\end\n\n\\define branch-node(prefix,chunk,separator: \"/\")\n<li>\n<$set name=\"reveal-state\" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}>\n<$reveal type=\"nomatch\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"show\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"hide\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<span>(<$count filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]\"/>)</span>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$macrocall $name=\"tree-node\" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/>\n</$reveal>\n</$set>\n</li>\n\\end\n\n\\define tree-node(prefix,separator: \"/\")\n<ol>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"leaf-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"branch-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n</ol>\n\\end\n\n\\define tree(prefix: \"$:/\",separator: \"/\")\n<div class=\"tc-tree\">\n<span><$text text=<<__prefix__>>/></span>\n<div>\n<$macrocall $name=\"tree-node\" prefix=<<__prefix__>> separator=<<__separator__>>/>\n</div>\n</div>\n\\end\n"
        },
        "$:/core/macros/utils": {
            "title": "$:/core/macros/utils",
            "text": "\\define colour(colour)\n$colour$\n\\end\n"
        },
        "$:/snippets/minifocusswitcher": {
            "title": "$:/snippets/minifocusswitcher",
            "text": "<$select tiddler=\"$:/config/AutoFocus\">\n<$list filter=\"title tags text type fields\">\n<option value=<<currentTiddler>>><<currentTiddler>></option>\n</$list>\n</$select>\n"
        },
        "$:/snippets/minilanguageswitcher": {
            "title": "$:/snippets/minilanguageswitcher",
            "text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
        },
        "$:/snippets/minithemeswitcher": {
            "title": "$:/snippets/minithemeswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"name\"><$view field=\"title\"/></$view></option>\n</$list>\n</$select>"
        },
        "$:/snippets/modules": {
            "title": "$:/snippets/modules",
            "text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[all[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
        },
        "$:/palette": {
            "title": "$:/palette",
            "text": "$:/palettes/Vanilla"
        },
        "$:/snippets/paletteeditor": {
            "title": "$:/snippets/paletteeditor",
            "text": "<$transclude tiddler=\"$:/PaletteManager\"/>\n"
        },
        "$:/snippets/palettepreview": {
            "title": "$:/snippets/palettepreview",
            "text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n{{||$:/snippets/currpalettepreview}}\n</$set>\n"
        },
        "$:/snippets/paletteswitcher": {
            "title": "$:/snippets/paletteswitcher",
            "text": "<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[name]]\"><$set name=\"cls\" filter=\"[all[current]prefix{$:/palette}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/>{{||$:/snippets/currpalettepreview}}</$link>\n</div></$set>\n</$list>\n</div>\n</$linkcatcher>\n"
        },
        "$:/snippets/peek-stylesheets": {
            "title": "$:/snippets/peek-stylesheets",
            "text": "\\define expandable-stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$vars state=<<qualify \"$:/state/peek-stylesheets/open/\">>>\n<$set name=\"state\" value={{{ [<state>addsuffix<currentTiddler>] }}}>\n<li>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"no\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"yes\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"div\">\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</$reveal>\n</li>\n</$set>\n</$vars>\n</$list>\n</ol>\n\\end\n\n\\define stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<li>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</li>\n</$list>\n</ol>\n\\end\n\n<$vars modeState=<<qualify \"$:/state/peek-stylesheets/mode/\">>>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"expanded\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Stylesheets/Expand/Caption}}</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"restored\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-down}} {{$:/language/ControlPanel/Stylesheets/Restore/Caption}}</$button>\n</$reveal>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<expandable-stylesheets-list>>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<stylesheets-list>>\n</$reveal>\n\n</$vars>\n"
        },
        "$:/temp/search": {
            "title": "$:/temp/search",
            "text": ""
        },
        "$:/tags/AdvancedSearch": {
            "title": "$:/tags/AdvancedSearch",
            "list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]"
        },
        "$:/tags/AdvancedSearch/FilterButton": {
            "title": "$:/tags/AdvancedSearch/FilterButton",
            "list": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete"
        },
        "$:/tags/ControlPanel": {
            "title": "$:/tags/ControlPanel",
            "list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
        },
        "$:/tags/ControlPanel/Info": {
            "title": "$:/tags/ControlPanel/Info",
            "list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
        },
        "$:/tags/ControlPanel/Plugins": {
            "title": "$:/tags/ControlPanel/Plugins",
            "list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]"
        },
        "$:/tags/EditTemplate": {
            "title": "$:/tags/EditTemplate",
            "list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
        },
        "$:/tags/EditToolbar": {
            "title": "$:/tags/EditToolbar",
            "list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
        },
        "$:/tags/EditorToolbar": {
            "title": "$:/tags/EditorToolbar",
            "list": "$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/rotate-left $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type"
        },
        "$:/tags/Manager/ItemMain": {
            "title": "$:/tags/Manager/ItemMain",
            "list": "$:/Manager/ItemMain/WikifiedText $:/Manager/ItemMain/RawText $:/Manager/ItemMain/Fields"
        },
        "$:/tags/Manager/ItemSidebar": {
            "title": "$:/tags/Manager/ItemSidebar",
            "list": "$:/Manager/ItemSidebar/Tags $:/Manager/ItemSidebar/Colour $:/Manager/ItemSidebar/Icon $:/Manager/ItemSidebar/Tools"
        },
        "$:/tags/MoreSideBar": {
            "title": "$:/tags/MoreSideBar",
            "list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]] [[$:/core/ui/MoreSideBar/Explorer]] [[$:/core/ui/MoreSideBar/Plugins]]",
            "text": ""
        },
        "$:/tags/PageControls": {
            "title": "$:/tags/PageControls",
            "list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/manager]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/timestamp]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/print]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]"
        },
        "$:/tags/PageTemplate": {
            "title": "$:/tags/PageTemplate",
            "list": "[[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]]",
            "text": ""
        },
        "$:/tags/PluginLibrary": {
            "title": "$:/tags/PluginLibrary",
            "list": "$:/config/OfficialPluginLibrary"
        },
        "$:/tags/SideBar": {
            "title": "$:/tags/SideBar",
            "list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
            "text": ""
        },
        "$:/tags/SideBarSegment": {
            "title": "$:/tags/SideBarSegment",
            "list": "[[$:/core/ui/SideBarSegments/site-title]] [[$:/core/ui/SideBarSegments/site-subtitle]] [[$:/core/ui/SideBarSegments/page-controls]] [[$:/core/ui/SideBarSegments/search]] [[$:/core/ui/SideBarSegments/tabs]]"
        },
        "$:/tags/TiddlerInfo": {
            "title": "$:/tags/TiddlerInfo",
            "list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
            "text": ""
        },
        "$:/tags/TiddlerInfo/Advanced": {
            "title": "$:/tags/TiddlerInfo/Advanced",
            "list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]"
        },
        "$:/tags/ViewTemplate": {
            "title": "$:/tags/ViewTemplate",
            "list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
        },
        "$:/tags/ViewToolbar": {
            "title": "$:/tags/ViewToolbar",
            "list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]"
        },
        "$:/snippets/themeswitcher": {
            "title": "$:/snippets/themeswitcher",
            "text": "<$linkcatcher to=\"$:/theme\">\n<div class=\"tc-chooser\"><$list filter=\"[plugin-type[theme]sort[title]]\"><$set name=\"cls\" filter=\"[all[current]field:title{$:/theme}] [[$:/theme]!has[text]addsuffix[s/tiddlywiki/vanilla]field:title<currentTiddler>] +[limit[1]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
        },
        "$:/core/wiki/title": {
            "title": "$:/core/wiki/title",
            "text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
        },
        "$:/view": {
            "title": "$:/view",
            "text": "classic"
        },
        "$:/snippets/viewswitcher": {
            "title": "$:/snippets/viewswitcher",
            "text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<$linkcatcher to=\"$:/view\">\n<div class=\"tc-chooser tc-viewswitcher\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$set name=\"cls\" filter=\"[<storyview>prefix{$:/view}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link to=<<storyview>>><$transclude tiddler=<<icon>>/><$text text=<<storyview>>/></$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
        }
    }
}
\rules only filteredtranscludeinline transcludeinline
<!doctype html>
{{$:/core/templates/MOTW.html}}<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />		<!-- Force IE standards mode for Intranet and HTA - should be the first meta -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="application-name" content="TiddlyWiki" />
<meta name="generator" content="TiddlyWiki" />
<meta name="tiddlywiki-version" content="{{$:/core/templates/version}}" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="mobile-web-app-capable" content="yes"/>
<meta name="format-detection" content="telephone=no" />
<meta name="copyright" content="{{$:/core/copyright.txt}}" />
<link id="faviconLink" rel="shortcut icon" href="favicon.ico">
<title>{{$:/core/wiki/title}}</title>
<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->

<!--~~ Raw markup ~~-->
{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}
</head>
<body class="tc-body">
<!--~~ Static styles ~~-->
<div id="styleArea">
{{$:/boot/boot.css||$:/core/templates/css-tiddler}}
</div>
<!--~~ Static content for Google and browsers without JavaScript ~~-->
<noscript>
<div id="splashArea">
{{$:/core/templates/static.area}}
</div>
</noscript>
<!--~~ Ordinary tiddlers ~~-->
{{$:/core/templates/store.area.template.html}}
<!--~~ Library modules ~~-->
<div id="libraryModules" style="display:none;">
{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}
</div>
<!--~~ Boot kernel prologue ~~-->
<div id="bootKernelPrefix" style="display:none;">
{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}
</div>
<!--~~ Boot kernel ~~-->
<div id="bootKernel" style="display:none;">
{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}
</div>
</body>
</html>
<div class="tc-more-sidebar">
<$macrocall $name="tabs" tabsList="[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]" default={{$:/config/DefaultMoreSidebarTab}} state="$:/state/tab/moresidebar" class="tc-vertical tc-sidebar-tabs-more" />
</div>
<$macrocall $name="timeline" format={{$:/language/RecentChanges/DateFormat}}/>
\define lingo-base() $:/language/ControlPanel/
\define config-title()
$:/config/PageControlButtons/Visibility/$(listItem)$
\end

<<lingo Basics/Version/Prompt>> <<version>>

<$set name="tv-config-toolbar-icons" value="yes">

<$set name="tv-config-toolbar-text" value="yes">

<$set name="tv-config-toolbar-class" value="">

<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">

<div style="position:relative;" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>

<$checkbox tiddler=<<config-title>> field="text" checked="show" unchecked="hide" default="show"/> <$transclude tiddler=<<listItem>>/> <i class="tc-muted"><$transclude tiddler=<<listItem>> field="description"/></i>

</div>

</$list>

</$set>

</$set>

</$set>
Содержание [[Список изменений]]
main
index.html
/
qMorick/dndno
qMorick
index.html
qMorick/dndno
qMorick
<svg class="tc-image-500px tc-image-button" width="22pt" height="22pt" viewBox="0 0 448 512"><path d="M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z"/></svg>
<svg class="tc-image-accessible-icon tc-image-button" width="22pt" height="22pt" viewBox="0 0 448 512"><path d="M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z"/></svg>
<svg class="tc-image-angle-right tc-image-button" width="22pt" height="22pt" viewBox="0 0 256 512"><path d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"/></svg>
{
    "tiddlers": {
        "Untitled 4": {
            "title": "Untitled 4",
            "text": "https://i.imgur.com/LPSQUVl.png"
        }
    }
}
no
alert-background: #ffca13
alert-border: #ffca13
alert-highlight: <<colour primary>>
alert-muted-foreground: <<colour muted-foreground>>
background: #eae6e1
blockquote-bar: <<colour muted-foreground>>
button-background: <<colour page-background>>
button-foreground: <<colour primary>>
button-border: <<colour primary>>
code-background: <<colour page-background>>
code-border: <<colour page-background>>
code-foreground: <<colour muted-foreground>>
dirty-indicator: <<colour primary>>
download-background: #ffca13
download-foreground: <<colour background>>
dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>>
dropdown-background: <<colour background>>
dropdown-border: <<colour background>>
dropdown-tab-background-selected: <<colour background>>
dropdown-tab-background: <<colour background>>
dropzone-background: <<colour primary>>
external-link-background-hover: inherit
external-link-background-visited: inherit
external-link-background: inherit
external-link-foreground-hover: inherit
external-link-foreground-visited: #9e6129
external-link-foreground: <<colour primary>>
foreground: #433f36
message-background: #9e6129
message-border: #9e6129
message-foreground: <<colour foreground>>
modal-backdrop: <<colour foreground>>
modal-background: <<colour background>>
modal-border: <<colour background>>
modal-footer-background: <<colour background>>
modal-footer-border: <<colour foreground>>
modal-header-border: <<colour muted-foreground>>
muted-foreground: #737373
notification-background: #ffca13
notification-border: #ffca13
page-background: #cfcdcd
pre-background: <<colour page-background>>
pre-border: <<colour page-background>>
primary: #2d539b
sidebar-button-foreground: <<colour primary>>
sidebar-controls-foreground-hover: inherit
sidebar-controls-foreground: <<colour muted-foreground>>
sidebar-foreground-shadow: #d8d8d8
sidebar-foreground: <<colour primary>>
sidebar-muted-foreground-hover: inherit
sidebar-muted-foreground: <<colour muted-foreground>>
sidebar-tab-background-selected: <<colour page-background>>
sidebar-tab-background: transparent
sidebar-tab-border-selected: rgba(0,0,0,0.15)
sidebar-tab-border: transparent
sidebar-tab-divider:
sidebar-tab-foreground-selected: <<colour foreground>>
sidebar-tab-foreground: <<colour muted-foreground>>
sidebar-tiddler-link-foreground-hover: inherit
sidebar-tiddler-link-foreground: <<colour muted-foreground>>
site-title-foreground: <<colour foreground>>
static-alert-foreground: <<colour foreground>>
tab-background-selected: <<colour background>>
tab-background: transparent
tab-border-selected: <<colour page-background>>
tab-border: transparent
tab-divider: <<colour page-background>>
tab-foreground-selected: <<colour foreground>>
tab-foreground: <<colour muted-foreground>>
table-border: <<colour page-background>>
table-footer-background: <<colour page-background>>
table-header-background: <<colour page-background>>
tag-background: #ffca13
tag-foreground: <<colour primary>>
tiddler-background: <<colour background>>
tiddler-border: <<colour background>>
tiddler-controls-foreground-hover: inherit
tiddler-controls-foreground-selected: inherit
tiddler-controls-foreground: #a28f86
tiddler-editor-background: <<colour background>>
tiddler-editor-border-image: <<colour background>>
tiddler-editor-border: rgba(0,0,0,0.12)
tiddler-editor-fields-even: rgba(0,0,0,0.04)
tiddler-editor-fields-odd: rgba(0,0,0,0.08)
tiddler-info-background: <<colour background>>
tiddler-info-border: <<colour page-background>>
tiddler-info-tab-background: <<colour background>>
tiddler-link-background: <<colour background>>
tiddler-link-foreground: <<colour primary>>
tiddler-subtitle-foreground: <<colour muted-foreground>>
tiddler-title-foreground: <<colour primary>>
toolbar-new-button: 
toolbar-options-button: 
toolbar-save-button: 
toolbar-info-button: 
toolbar-edit-button: 
toolbar-close-button: 
toolbar-delete-button: 
toolbar-cancel-button: 
toolbar-done-button: 
untagged-background: #c0bbb6
very-muted-foreground: #898989
alert-background: #644a7d
alert-border: #644a7d
alert-highlight: <<colour primary>>
alert-muted-foreground: <<colour muted-foreground>>
background: #2A2B30
blockquote-bar: <<colour muted-foreground>>
button-background: <<colour page-background>>
button-foreground: <<colour foreground>>
button-border: <<colour tag-background>>
code-background: <<colour page-background>>
code-border: <<colour page-background>>
code-foreground: <<colour muted-foreground>>
dirty-indicator: <<colour primary>>
download-background: #644a7d
download-foreground: <<colour background>>
dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>>
dropdown-background: <<colour background>>
dropdown-border: <<colour background>>
dropdown-tab-background-selected: <<colour background>>
dropdown-tab-background: <<colour background>>
dropzone-background: <<colour primary>>
external-link-background-hover: inherit
external-link-background-visited: inherit
external-link-background: inherit
external-link-foreground-hover: inherit
external-link-foreground-visited: <<colour tag-background>>
external-link-foreground: #f0b000
foreground: #fff1d9
message-background: #644a7d
message-border: #644a7d
message-foreground: <<colour foreground>>
modal-backdrop: <<colour page-background>>
modal-background: <<colour background>>
modal-border: <<colour background>>
modal-footer-background: <<colour background>>
modal-footer-border: <<colour background>>
modal-header-border: <<colour muted-foreground>>
muted-foreground: rgba(255,255,255,0.5)
notification-background: #644a7d
notification-border: #644a7d
page-background: #1c1d22
pre-background: <<colour page-background>>
pre-border: <<colour page-background>>
primary: #00a9c7
sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: inherit
sidebar-controls-foreground: <<colour muted-foreground>>
sidebar-foreground-shadow: transparent
sidebar-foreground: <<colour foreground>>
sidebar-muted-foreground-hover: inherit
sidebar-muted-foreground: <<colour foreground>>
sidebar-tab-background-selected: <<colour page-background>>
sidebar-tab-background: transparent
sidebar-tab-border-selected: <<colour primary>>
sidebar-tab-border: transparent
sidebar-tab-divider: <<colour primary>>
sidebar-tab-foreground-selected: <<colour primary>>
sidebar-tab-foreground: <<colour muted-foreground>>
sidebar-tiddler-link-foreground-hover: inherit
sidebar-tiddler-link-foreground: <<colour muted-foreground>>
site-title-foreground: white
static-alert-foreground: <<colour foreground>>
tab-background-selected: <<colour background>>
tab-background: transparent
tab-border-selected: <<colour primary>>
tab-border: transparent
tab-divider: <<colour primary>>
tab-foreground-selected: <<colour primary>>
tab-foreground: <<colour muted-foreground>>
table-border: <<colour page-background>>
table-footer-background: rgba(0, 0, 0, 0.1)
table-header-background: rgba(0, 0, 0, 0.2)
tag-background: #8a6ca8
tag-foreground: <<colour foreground>>
tiddler-background: <<colour background>>
tiddler-border: <<colour background>>
tiddler-controls-foreground-hover: inherit
tiddler-controls-foreground-selected: <<colour foreground>>
tiddler-controls-foreground: #6b6b6b
tiddler-editor-background: <<colour background>>
tiddler-editor-border-image: <<colour background>>
tiddler-editor-border: rgba(255,255,255,0.1)
tiddler-editor-fields-even: #3a3a3a
tiddler-editor-fields-odd: <<colour page-background>>
tiddler-info-background: <<colour background>>
tiddler-info-border: <<colour page-background>>
tiddler-info-tab-background: <<colour background>>
tiddler-link-background: <<colour background>>
tiddler-link-foreground: <<colour primary>>
tiddler-subtitle-foreground: <<colour muted-foreground>>
tiddler-title-foreground: <<colour primary>>
toolbar-new-button: 
toolbar-options-button: 
toolbar-save-button: 
toolbar-info-button: 
toolbar-edit-button: 
toolbar-close-button: 
toolbar-delete-button: 
toolbar-cancel-button: 
toolbar-done-button: 
untagged-background: #3a3a3a
very-muted-foreground: rgba(255,255,255,0.2)
alert-background: <<colour background>>
alert-border: <<colour very-muted-foreground>>
alert-highlight: <<colour very-muted-foreground>>
alert-muted-foreground: <<colour muted-foreground>>
background: #303030
blockquote-bar: <<colour page-background>>
button-background: transparent
button-foreground: inherent
button-border: <<colour tag-background>>
code-background: <<colour pre-background>>
code-border: <<colour pre-border>>
code-foreground: rgba(255, 255, 255, 0.54)
dirty-indicator: #c80000
download-background: <<colour primary>>
download-foreground: <<colour foreground>>
dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>>
dropdown-background: #424242
dropdown-border: <<colour dropdown-background>>
dropdown-tab-background-selected: <<colour dropdown-background>>
dropdown-tab-background: #050505
dropzone-background: <<colour tag-background>>
external-link-background-hover: transparent
external-link-background-visited: transparent
external-link-background: transparent
external-link-foreground-hover: 
external-link-foreground-visited: #7c318c
external-link-foreground: #9e3eb3
foreground: rgba(255, 255, 255, 0.7)
message-background: <<colour background>>
message-border: <<colour very-muted-foreground>>
message-foreground: rgba(255, 255, 255, 0.54)
modal-backdrop: <<colour page-background>>
modal-background: <<colour background>>
modal-border: <<colour very-muted-foreground>>
modal-footer-background: <<colour background>>
modal-footer-border: <<colour background>>
modal-header-border: <<colour very-muted-foreground>>
muted-foreground: rgba(255, 255, 255, 0.54)
notification-background: <<colour dropdown-background>>
notification-border: <<colour dropdown-background>>
page-background: #212121
pre-background: #2a2a2a
pre-border: transparent
primary: #3949ab
sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #494949
sidebar-controls-foreground: #5d5d5d
sidebar-foreground-shadow: transparent
sidebar-foreground: rgba(255, 255, 255, 0.54)
sidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)
sidebar-muted-foreground: rgba(255, 255, 255, 0.38)
sidebar-tab-background-selected: <<colour page-background>>
sidebar-tab-background: transparent
sidebar-tab-border-selected: <<colour table-border>>
sidebar-tab-border: transparent
sidebar-tab-divider: <<colour table-border>>
sidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)
sidebar-tab-foreground: rgba(255, 255, 255, 0.54)
sidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)
sidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)
site-title-foreground: rgba(255, 255, 255, 0.7)
static-alert-foreground: #aaaaaa
tab-background-selected: <<colour background>>
tab-background: transparent
tab-border-selected: <<colour table-border>>
tab-border: transparent
tab-divider: <<colour table-border>>
tab-foreground-selected: rgba(255, 255, 255, 0.87)
tab-foreground: rgba(255, 255, 255, 0.54)
table-border: #3a3a3a
table-footer-background: <<colour tiddler-editor-fields-odd>>
table-header-background: <<colour tiddler-editor-fields-even>>
tag-background: #ec6
tag-foreground: <<colour button-foreground>>
tiddler-background: <<colour background>>
tiddler-border: rgb(55,55,55)
tiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>
tiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>
tiddler-controls-foreground: <<colour sidebar-controls-foreground>>
tiddler-editor-background: transparent
tiddler-editor-border-image: 
tiddler-editor-border: rgba(255, 255, 255, 0.08)
tiddler-editor-fields-even: rgba(255, 255, 255, 0.1)
tiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)
tiddler-info-background: #454545
tiddler-info-border: #454545
tiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>
tiddler-link-background: <<colour background>>
tiddler-link-foreground: <<colour primary>>
tiddler-subtitle-foreground: <<colour muted-foreground>>
tiddler-title-foreground: #FFFFFF
toolbar-new-button: 
toolbar-options-button: 
toolbar-save-button: 
toolbar-info-button: 
toolbar-edit-button: 
toolbar-close-button: 
toolbar-delete-button: 
toolbar-cancel-button: 
toolbar-done-button: 
untagged-background: <<colour very-muted-foreground>>
very-muted-foreground: rgba(255, 255, 255, 0.12)
$:/languages/ru-RU
{
    "tiddlers": {
        "$:/language/Buttons/+ExportPage/Hint": {
            "title": "$:/language/Buttons/+ExportPage/Hint",
            "text": "Экспортировать все заметки"
        },
        "$:/language/Buttons/+ExportTiddler/Caption": {
            "title": "$:/language/Buttons/+ExportTiddler/Caption",
            "text": "экспортировать заметку"
        },
        "$:/language/Buttons/+ExportTiddler/Hint": {
            "title": "$:/language/Buttons/+ExportTiddler/Hint",
            "text": "Экспортировать заметку"
        },
        "$:/language/Buttons/+ExportTiddlers/Caption": {
            "title": "$:/language/Buttons/+ExportTiddlers/Caption",
            "text": "экспортировать заметки"
        },
        "$:/language/Buttons/+ExportTiddlers/Hint": {
            "title": "$:/language/Buttons/+ExportTiddlers/Hint",
            "text": "Экспортировать заметки"
        },
        "$:/language/Buttons/AdvancedSearch/Caption": {
            "title": "$:/language/Buttons/AdvancedSearch/Caption",
            "text": "расширенный поиск"
        },
        "$:/language/Buttons/AdvancedSearch/Hint": {
            "title": "$:/language/Buttons/AdvancedSearch/Hint",
            "text": "Расширенный поиск"
        },
        "$:/language/Buttons/Cancel/Caption": {
            "title": "$:/language/Buttons/Cancel/Caption",
            "text": "отмена"
        },
        "$:/language/Buttons/Cancel/Hint": {
            "title": "$:/language/Buttons/Cancel/Hint",
            "text": "Отменить редактирование заметки"
        },
        "$:/language/Buttons/Clone/Caption": {
            "title": "$:/language/Buttons/Clone/Caption",
            "text": "клонировать"
        },
        "$:/language/Buttons/Clone/Hint": {
            "title": "$:/language/Buttons/Clone/Hint",
            "text": "Создать копию заметки"
        },
        "$:/language/Buttons/Close/Caption": {
            "title": "$:/language/Buttons/Close/Caption",
            "text": "закрыть"
        },
        "$:/language/Buttons/Close/Hint": {
            "title": "$:/language/Buttons/Close/Hint",
            "text": "Закрыть заметку"
        },
        "$:/language/Buttons/CloseAll/Caption": {
            "title": "$:/language/Buttons/CloseAll/Caption",
            "text": "закрыть все"
        },
        "$:/language/Buttons/CloseAll/Hint": {
            "title": "$:/language/Buttons/CloseAll/Hint",
            "text": "Закрыть все заметки"
        },
        "$:/language/Buttons/CloseOthers/Caption": {
            "title": "$:/language/Buttons/CloseOthers/Caption",
            "text": "закрыть остальные"
        },
        "$:/language/Buttons/CloseOthers/Hint": {
            "title": "$:/language/Buttons/CloseOthers/Hint",
            "text": "Закрыть остальные заметки"
        },
        "$:/language/Buttons/ControlPanel/Caption": {
            "title": "$:/language/Buttons/ControlPanel/Caption",
            "text": "панель управления"
        },
        "$:/language/Buttons/ControlPanel/Hint": {
            "title": "$:/language/Buttons/ControlPanel/Hint",
            "text": "Открыть панель управления"
        },
        "$:/language/Buttons/Delete/Caption": {
            "title": "$:/language/Buttons/Delete/Caption",
            "text": "удалить"
        },
        "$:/language/Buttons/Delete/Hint": {
            "title": "$:/language/Buttons/Delete/Hint",
            "text": "Удалить заметку"
        },
        "$:/language/Buttons/Edit/Caption": {
            "title": "$:/language/Buttons/Edit/Caption",
            "text": "редактировать"
        },
        "$:/language/Buttons/Edit/Hint": {
            "title": "$:/language/Buttons/Edit/Hint",
            "text": "Редактировать заметку"
        },
        "$:/language/Buttons/Encryption/Caption": {
            "title": "$:/language/Buttons/Encryption/Caption",
            "text": "шифрование"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
            "text": "сбросить пароль"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
            "text": "Сбросить пароль и сохранить без использования шифрования"
        },
        "$:/language/Buttons/Encryption/Hint": {
            "title": "$:/language/Buttons/Encryption/Hint",
            "text": "Установить или сбросить пароль"
        },
        "$:/language/Buttons/Encryption/SetPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Caption",
            "text": "установить пароль"
        },
        "$:/language/Buttons/Encryption/SetPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Hint",
            "text": "Установить пароль и включить шифрование"
        },
        "$:/language/Buttons/ExportPage/Caption": {
            "title": "$:/language/Buttons/ExportPage/Caption",
            "text": "экспортировать всё"
        },
        "$:/language/Buttons/ExportPage/Hint": {
            "title": "$:/language/Buttons/ExportPage/Hint",
            "text": "Экспортировать все тиддлеры"
        },
        "$:/language/Buttons/ExportTiddler/Caption": {
            "title": "$:/language/Buttons/ExportTiddler/Caption",
            "text": "экспорт тиддлера"
        },
        "$:/language/Buttons/ExportTiddler/Hint": {
            "title": "$:/language/Buttons/ExportTiddler/Hint",
            "text": "Экспорт тиддлера"
        },
        "$:/language/Buttons/ExportTiddlers/Caption": {
            "title": "$:/language/Buttons/ExportTiddlers/Caption",
            "text": "экспорт тиддлеров"
        },
        "$:/language/Buttons/ExportTiddlers/Hint": {
            "title": "$:/language/Buttons/ExportTiddlers/Hint",
            "text": "Экспорт тиддлеров"
        },
        "$:/language/Buttons/FullScreen/Caption": {
            "title": "$:/language/Buttons/FullScreen/Caption",
            "text": "полный экран"
        },
        "$:/language/Buttons/FullScreen/Hint": {
            "title": "$:/language/Buttons/FullScreen/Hint",
            "text": "Включить или выключить полноэкранный режим"
        },
        "$:/language/Buttons/Help/Caption": {
            "title": "$:/language/Buttons/Help/Caption",
            "text": "помощь"
        },
        "$:/language/Buttons/Help/Hint": {
            "title": "$:/language/Buttons/Help/Hint",
            "text": "Показать панель помощи"
        },
        "$:/language/Buttons/HideSideBar/Caption": {
            "title": "$:/language/Buttons/HideSideBar/Caption",
            "text": "скрыть боковую панель"
        },
        "$:/language/Buttons/HideSideBar/Hint": {
            "title": "$:/language/Buttons/HideSideBar/Hint",
            "text": "Скрыть боковую панель"
        },
        "$:/language/Buttons/Home/Caption": {
            "title": "$:/language/Buttons/Home/Caption",
            "text": "главная"
        },
        "$:/language/Buttons/Home/Hint": {
            "title": "$:/language/Buttons/Home/Hint",
            "text": "Открыть заметки по умолчанию"
        },
        "$:/language/Buttons/Import/Caption": {
            "title": "$:/language/Buttons/Import/Caption",
            "text": "импортировать"
        },
        "$:/language/Buttons/Import/Hint": {
            "title": "$:/language/Buttons/Import/Hint",
            "text": "Импорт файлов"
        },
        "$:/language/Buttons/Info/Caption": {
            "title": "$:/language/Buttons/Info/Caption",
            "text": "информация"
        },
        "$:/language/Buttons/Info/Hint": {
            "title": "$:/language/Buttons/Info/Hint",
            "text": "Показать информацию об этой заметке"
        },
        "$:/language/Buttons/Language/Caption": {
            "title": "$:/language/Buttons/Language/Caption",
            "text": "язык"
        },
        "$:/language/Buttons/Language/Hint": {
            "title": "$:/language/Buttons/Language/Hint",
            "text": "Выбрать язык пользовательского интерфейса"
        },
        "$:/language/Buttons/More/Caption": {
            "title": "$:/language/Buttons/More/Caption",
            "text": "ещё"
        },
        "$:/language/Buttons/More/Hint": {
            "title": "$:/language/Buttons/More/Hint",
            "text": "Другие действия"
        },
        "$:/language/Buttons/NewHere/Caption": {
            "title": "$:/language/Buttons/NewHere/Caption",
            "text": "новая заметка здесь"
        },
        "$:/language/Buttons/NewHere/Hint": {
            "title": "$:/language/Buttons/NewHere/Hint",
            "text": "Создать новую заметку, помеченную этой заметкой"
        },
        "$:/language/Buttons/NewJournal/Caption": {
            "title": "$:/language/Buttons/NewJournal/Caption",
            "text": "дневник"
        },
        "$:/language/Buttons/NewJournal/Hint": {
            "title": "$:/language/Buttons/NewJournal/Hint",
            "text": "Создать новую заметку в дневник"
        },
        "$:/language/Buttons/NewJournalHere/Caption": {
            "title": "$:/language/Buttons/NewJournalHere/Caption",
            "text": "дневник здесь"
        },
        "$:/language/Buttons/NewJournalHere/Hint": {
            "title": "$:/language/Buttons/NewJournalHere/Hint",
            "text": "Создать новую заметку в дневник, помеченную этой заметкой"
        },
        "$:/language/Buttons/NewTiddler/Caption": {
            "title": "$:/language/Buttons/NewTiddler/Caption",
            "text": "новая заметка"
        },
        "$:/language/Buttons/NewTiddler/Hint": {
            "title": "$:/language/Buttons/NewTiddler/Hint",
            "text": "Создать новую заметку"
        },
        "$:/language/Buttons/OpenWindow/Caption": {
            "title": "$:/language/Buttons/OpenWindow/Caption",
            "text": "открыть в новом окне"
        },
        "$:/language/Buttons/OpenWindow/Hint": {
            "title": "$:/language/Buttons/OpenWindow/Hint",
            "text": "Открыть тиддлер в новом окне"
        },
        "$:/language/Buttons/Palette/Caption": {
            "title": "$:/language/Buttons/Palette/Caption",
            "text": "цветовая схема"
        },
        "$:/language/Buttons/Palette/Hint": {
            "title": "$:/language/Buttons/Palette/Hint",
            "text": "Выбрать цветовую схему"
        },
        "$:/language/Buttons/Permalink/Caption": {
            "title": "$:/language/Buttons/Permalink/Caption",
            "text": "прямая ссылка"
        },
        "$:/language/Buttons/Permalink/Hint": {
            "title": "$:/language/Buttons/Permalink/Hint",
            "text": "Показать прямую ссылку на заметку в адресной строке браузера"
        },
        "$:/language/Buttons/Permaview/Caption": {
            "title": "$:/language/Buttons/Permaview/Caption",
            "text": "прямая ссылка"
        },
        "$:/language/Buttons/Permaview/Hint": {
            "title": "$:/language/Buttons/Permaview/Hint",
            "text": "Показать прямую ссылку на открытые заметки в адресной строке браузера"
        },
        "$:/language/Buttons/Refresh/Caption": {
            "title": "$:/language/Buttons/Refresh/Caption",
            "text": "oбновить"
        },
        "$:/language/Buttons/Refresh/Hint": {
            "title": "$:/language/Buttons/Refresh/Hint",
            "text": "Выполнить обновление страницы"
        },
        "$:/language/Buttons/Save/Caption": {
            "title": "$:/language/Buttons/Save/Caption",
            "text": "сохранить"
        },
        "$:/language/Buttons/Save/Hint": {
            "title": "$:/language/Buttons/Save/Hint",
            "text": "Сохранить заметку"
        },
        "$:/language/Buttons/SaveWiki/Caption": {
            "title": "$:/language/Buttons/SaveWiki/Caption",
            "text": "сохранить изменения"
        },
        "$:/language/Buttons/SaveWiki/Hint": {
            "title": "$:/language/Buttons/SaveWiki/Hint",
            "text": "Сохранить изменения"
        },
        "$:/language/Buttons/ShowSideBar/Caption": {
            "title": "$:/language/Buttons/ShowSideBar/Caption",
            "text": "показать боковую панель"
        },
        "$:/language/Buttons/ShowSideBar/Hint": {
            "title": "$:/language/Buttons/ShowSideBar/Hint",
            "text": "Показать боковую панель"
        },
        "$:/language/Buttons/StoryView/Caption": {
            "title": "$:/language/Buttons/StoryView/Caption",
            "text": "отображение заметок"
        },
        "$:/language/Buttons/StoryView/Hint": {
            "title": "$:/language/Buttons/StoryView/Hint",
            "text": "Выбрать способ отображения заметок"
        },
        "$:/language/Buttons/TagManager/Caption": {
            "title": "$:/language/Buttons/TagManager/Caption",
            "text": "управление метками"
        },
        "$:/language/Buttons/TagManager/Hint": {
            "title": "$:/language/Buttons/TagManager/Hint",
            "text": "Открыть панель управления метками"
        },
        "$:/language/Buttons/Theme/Caption": {
            "title": "$:/language/Buttons/Theme/Caption",
            "text": "тема"
        },
        "$:/language/Buttons/Theme/Hint": {
            "title": "$:/language/Buttons/Theme/Hint",
            "text": "Выбрать тему"
        },
        "$:/language/ControlPanel/Advanced/Caption": {
            "title": "$:/language/ControlPanel/Advanced/Caption",
            "text": "Расширенные"
        },
        "$:/language/ControlPanel/Advanced/Hint": {
            "title": "$:/language/ControlPanel/Advanced/Hint",
            "text": "Системные сведения об этой TiddlyWiki"
        },
        "$:/language/ControlPanel/Appearance/Caption": {
            "title": "$:/language/ControlPanel/Appearance/Caption",
            "text": "Внешний вид"
        },
        "$:/language/ControlPanel/Appearance/Hint": {
            "title": "$:/language/ControlPanel/Appearance/Hint",
            "text": "Способы настройки внешнего вида TiddlyWiki."
        },
        "$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
            "title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
            "text": "Продолжительность анимации:"
        },
        "$:/language/ControlPanel/Basics/Caption": {
            "title": "$:/language/ControlPanel/Basics/Caption",
            "text": "Основные"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
            "text": "Заметки, содержащие пробелы нужно взять в &#91;&#91;двойные квадратные скобки&#93;&#93;. А также можно возвращать <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">открытые ранее заметки</$button>"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
            "text": "Открывать при старте:"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
            "text": "Выберите заметки открытые при запуске:"
        },
        "$:/language/ControlPanel/Basics/Language/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Language/Prompt",
            "text": "Привет! Текущий язык:"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
            "text": "Метки новых заметок дневника"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
            "text": "Заголовок новых заметок дневника"
        },
        "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
            "text": "Количество переопределённых встроенных заметок:"
        },
        "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
            "text": "Количество встроенных заметок:"
        },
        "$:/language/ControlPanel/Basics/Subtitle/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
            "text": "Подзаголовок:"
        },
        "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
            "text": "Количество системных заметок:"
        },
        "$:/language/ControlPanel/Basics/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tags/Prompt",
            "text": "Количество меток:"
        },
        "$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
            "text": "Количество заметок:"
        },
        "$:/language/ControlPanel/Basics/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Title/Prompt",
            "text": "Заголовок этой ~TiddlyWiki:"
        },
        "$:/language/ControlPanel/Basics/Username/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Username/Prompt",
            "text": "Имя пользователя для подписи под изменениями:"
        },
        "$:/language/ControlPanel/Basics/Version/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Version/Prompt",
            "text": "Версия ~TiddlyWiki:"
        },
        "$:/language/ControlPanel/EditorTypes/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Caption",
            "text": "Редакторы"
        },
        "$:/language/ControlPanel/EditorTypes/Editor/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
            "text": "Редактор"
        },
        "$:/language/ControlPanel/EditorTypes/Hint": {
            "title": "$:/language/ControlPanel/EditorTypes/Hint",
            "text": "Эти заметки определяют, какой редактор используется для конкретного типа заметки."
        },
        "$:/language/ControlPanel/EditorTypes/Type/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
            "text": "Тип содержимого"
        },
        "$:/language/ControlPanel/Info/Caption": {
            "title": "$:/language/ControlPanel/Info/Caption",
            "text": "Сведения"
        },
        "$:/language/ControlPanel/Info/Hint": {
            "title": "$:/language/ControlPanel/Info/Hint",
            "text": "Сведения об этой TiddlyWiki"
        },
        "$:/language/ControlPanel/LoadedModules/Caption": {
            "title": "$:/language/ControlPanel/LoadedModules/Caption",
            "text": "Загруженные модули"
        },
        "$:/language/ControlPanel/LoadedModules/Hint": {
            "title": "$:/language/ControlPanel/LoadedModules/Hint",
            "text": "Это загруженные в настоящий момент модули, ссылающиеся на их исходные заметки. Модули, обозначенные курсивом, не имеют исходных заметок (обычно, потому что они были установлены во время процесса загрузки)."
        },
        "$:/language/ControlPanel/Palette/Caption": {
            "title": "$:/language/ControlPanel/Palette/Caption",
            "text": "Цветовая схема"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
            "text": "скопировать"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
            "text": "Перед редактированием рекомендуется скопировать встроенную цветовую схему"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt",
            "text": "Редактирование"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
            "text": "Эта встроенная цветовая схема изменена"
        },
        "$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
            "text": "сброс"
        },
        "$:/language/ControlPanel/Palette/HideEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
            "text": "скрыть редактор"
        },
        "$:/language/ControlPanel/Palette/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Prompt",
            "text": "Текущая цветовая схема:"
        },
        "$:/language/ControlPanel/Palette/ShowEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
            "text": "показать редактор"
        },
        "$:/language/ControlPanel/Plugins/Add/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Add/Caption",
            "text": "Другие плагины"
        },
        "$:/language/ControlPanel/Plugins/Add/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Add/Hint",
            "text": "Установить официальные плагины"
        },
        "$:/language/ControlPanel/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Caption",
            "text": "Плагины"
        },
        "$:/language/ControlPanel/Plugins/Disable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Caption",
            "text": "выключить"
        },
        "$:/language/ControlPanel/Plugins/Disable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Hint",
            "text": "Выключить этот плагин"
        },
        "$:/language/ControlPanel/Plugins/Disabled/Status": {
            "title": "$:/language/ControlPanel/Plugins/Disabled/Status",
            "text": "(выключен)"
        },
        "$:/language/ControlPanel/Plugins/Empty/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Empty/Hint",
            "text": "Нет"
        },
        "$:/language/ControlPanel/Plugins/Enable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Caption",
            "text": "включить"
        },
        "$:/language/ControlPanel/Plugins/Enable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Hint",
            "text": "Выключить этот плагин"
        },
        "$:/language/ControlPanel/Plugins/Installed/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Installed/Hint",
            "text": "Список установленных плагинов:"
        },
        "$:/language/ControlPanel/Plugins/Language/Prompt": {
            "title": "$:/language/ControlPanel/Plugins/Language/Prompt",
            "text": "Языки"
        },
        "$:/language/ControlPanel/Plugins/Languages/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Caption",
            "text": "Языки"
        },
        "$:/language/ControlPanel/Plugins/Languages/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Hint",
            "text": "Плагины языковых пакетов"
        },
        "$:/language/ControlPanel/Plugins/Plugin/Prompt": {
            "title": "$:/language/ControlPanel/Plugins/Plugin/Prompt",
            "text": "Плагины"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
            "text": "Плагины"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
            "text": "Плагины"
        },
        "$:/language/ControlPanel/Plugins/Theme/Prompt": {
            "title": "$:/language/ControlPanel/Plugins/Theme/Prompt",
            "text": "Темы"
        },
        "$:/language/ControlPanel/Plugins/Themes/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Caption",
            "text": "Темы"
        },
        "$:/language/ControlPanel/Plugins/Themes/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Hint",
            "text": "Плагины тем"
        },
        "$:/language/ControlPanel/Saving/Caption": {
            "title": "$:/language/ControlPanel/Saving/Caption",
            "text": "Сохранение"
        },
        "$:/language/ControlPanel/Saving/Heading": {
            "title": "$:/language/ControlPanel/Saving/Heading",
            "text": "Сохранение"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
            "text": "Расширенные настройки"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
            "text": "Каталог для резервной копии"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
            "text": "Резервная копия"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Description": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
            "text": "Эти настройки нужны для сохранения на http://tiddlyspot.com или совместимый с ним удаленный сервер"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
            "text": "Имя файла для загрузки"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
            "text": "~TiddlySpot"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
            "text": "//URL сервера по умолчанию - `http://<wikiname>.tiddlyspot.com/store.cgi`. Его можно указать если используется другой сервер//"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Password": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
            "text": "Пароль"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
            "text": "URL сервера"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
            "text": "Каталог загрузки"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
            "text": "Название Wiki"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Caption": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
            "text": "Автосохранение"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
            "text": "Не сохранять изменения автоматически"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
            "text": "Сохранять изменения автоматически"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Hint": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
            "text": "Сохранять изменения автоматически в процессе редактирования"
        },
        "$:/language/ControlPanel/Settings/Caption": {
            "title": "$:/language/ControlPanel/Settings/Caption",
            "text": "Настройки"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
            "text": "Стандартная боковая панель"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
            "text": "Определяет какую боковую панель показывать по умолчанию"
        },
        "$:/language/ControlPanel/Settings/Hint": {
            "title": "$:/language/ControlPanel/Settings/Hint",
            "text": "Эти настройки позволяют изменить поведение TiddlyWiki."
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
            "text": "Открытие Тиддлера"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
            "text": "По ссылке //из// открытых тиддлеров"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
            "text": "Открывать выше открытого тиддлера"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
            "text": "Открывать ниже всех открытых тиддлеров"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
            "text": "Открывать выше всех открытых тиддлеров"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
            "text": "Открывать ниже открытого тиддлера"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
            "text": "По ссылке //вне// открытых тиддлеров"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
            "text": "Адресная строка браузера"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
            "text": "Поведение адресной строки браузера при открытии заметки:"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
            "text": "Не изменять адресную строку"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
            "text": "Включить целевую заметку"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
            "text": "Включить целевую заметку и все открытые заметки"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
            "text": "История браузера"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
            "text": "Обновлять историю браузера при открытии заметки:"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
            "text": "Не обновлять историю"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
            "text": "Обновлять историю"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Caption": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
            "text": "Заголовки Тиддлеров"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Hint": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
            "text": "Выборочно показывает заголовки тиддеров как ссылки"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
            "text": "Не показывать заголовки тиддлеров как ссылки"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
            "text": "Показывать заголовки тиддлеров как ссылки"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
            "text": "Кнопки"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
            "text": "Внешний вид кнопок:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
            "text": "Показывать значок"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
            "text": "Показывать текст"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
            "text": "Стиль кнопок панелей"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
            "text": "Выберите стиль кнопок панелей:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
            "text": "Без границ"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
            "text": "Внутри квадрата"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
            "text": "Внутри круга"
        },
        "$:/language/ControlPanel/StoryView/Caption": {
            "title": "$:/language/ControlPanel/StoryView/Caption",
            "text": "Поведение открытых заметок"
        },
        "$:/language/ControlPanel/StoryView/Prompt": {
            "title": "$:/language/ControlPanel/StoryView/Prompt",
            "text": "Текущий вид:"
        },
        "$:/language/ControlPanel/Theme/Caption": {
            "title": "$:/language/ControlPanel/Theme/Caption",
            "text": "Тема"
        },
        "$:/language/ControlPanel/Theme/Prompt": {
            "title": "$:/language/ControlPanel/Theme/Prompt",
            "text": "Текущая тема:"
        },
        "$:/language/ControlPanel/TiddlerFields/Caption": {
            "title": "$:/language/ControlPanel/TiddlerFields/Caption",
            "text": "Поля заметок"
        },
        "$:/language/ControlPanel/TiddlerFields/Hint": {
            "title": "$:/language/ControlPanel/TiddlerFields/Hint",
            "text": "Это полный набор полей заметок (включая системные заметки, но без встроенных)."
        },
        "$:/language/ControlPanel/Toolbars/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/Caption",
            "text": "Панели инструментов"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
            "text": "При редактировании"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
            "text": "Выберите кнопки, отображаемые во время редактирования заметок"
        },
        "$:/language/ControlPanel/Toolbars/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/Hint",
            "text": "Выберите отображаемые кнопки"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
            "text": "Боковой панели"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
            "text": "Выберите кнопки, отображаемые на боковой панели"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
            "text": "При просмотре"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
            "text": "Выберите кнопки, отображаемые во время просмотра заметок"
        },
        "$:/language/ControlPanel/Tools/Download/Full/Caption": {
            "title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
            "text": "Скачать wiki целиком"
        },
        "$:/core/readme": {
            "title": "$:/core/readme",
            "text": "Этот плагин содержит компоненты ядра TiddlyWiki, содержащие:\n\n* коды модуля JavaScript\n* Изображения\n* Шаблоны, необходимые для создания пользовательского интерфейса TiddlyWiki\n* British English (en-GB) переводы локализуемых строк используемых в ядре"
        },
        "$:/language/Date/Long/Day/0": {
            "title": "$:/language/Date/Long/Day/0",
            "text": "Воскресенье"
        },
        "$:/language/Date/Long/Day/1": {
            "title": "$:/language/Date/Long/Day/1",
            "text": "Понедельник"
        },
        "$:/language/Date/Long/Day/2": {
            "title": "$:/language/Date/Long/Day/2",
            "text": "Вторник"
        },
        "$:/language/Date/Long/Day/3": {
            "title": "$:/language/Date/Long/Day/3",
            "text": "Среда"
        },
        "$:/language/Date/Long/Day/4": {
            "title": "$:/language/Date/Long/Day/4",
            "text": "Четверг"
        },
        "$:/language/Date/Long/Day/5": {
            "title": "$:/language/Date/Long/Day/5",
            "text": "Пятница"
        },
        "$:/language/Date/Long/Day/6": {
            "title": "$:/language/Date/Long/Day/6",
            "text": "Суббота"
        },
        "$:/language/Date/Long/Month/1": {
            "title": "$:/language/Date/Long/Month/1",
            "text": "января"
        },
        "$:/language/Date/Long/Month/2": {
            "title": "$:/language/Date/Long/Month/2",
            "text": "февраля"
        },
        "$:/language/Date/Long/Month/3": {
            "title": "$:/language/Date/Long/Month/3",
            "text": "марта"
        },
        "$:/language/Date/Long/Month/4": {
            "title": "$:/language/Date/Long/Month/4",
            "text": "апреля"
        },
        "$:/language/Date/Long/Month/5": {
            "title": "$:/language/Date/Long/Month/5",
            "text": "мая"
        },
        "$:/language/Date/Long/Month/6": {
            "title": "$:/language/Date/Long/Month/6",
            "text": "июня"
        },
        "$:/language/Date/Long/Month/7": {
            "title": "$:/language/Date/Long/Month/7",
            "text": "июля"
        },
        "$:/language/Date/Long/Month/8": {
            "title": "$:/language/Date/Long/Month/8",
            "text": "августа"
        },
        "$:/language/Date/Long/Month/9": {
            "title": "$:/language/Date/Long/Month/9",
            "text": "сентября"
        },
        "$:/language/Date/Long/Month/10": {
            "title": "$:/language/Date/Long/Month/10",
            "text": "октября"
        },
        "$:/language/Date/Long/Month/11": {
            "title": "$:/language/Date/Long/Month/11",
            "text": "ноября"
        },
        "$:/language/Date/Long/Month/12": {
            "title": "$:/language/Date/Long/Month/12",
            "text": "декабря"
        },
        "$:/language/Date/Period/am": {
            "title": "$:/language/Date/Period/am",
            "text": "до полудня"
        },
        "$:/language/Date/Period/pm": {
            "title": "$:/language/Date/Period/pm",
            "text": "после полудня"
        },
        "$:/language/Date/Short/Day/0": {
            "title": "$:/language/Date/Short/Day/0",
            "text": "Вс"
        },
        "$:/language/Date/Short/Day/1": {
            "title": "$:/language/Date/Short/Day/1",
            "text": "Пн"
        },
        "$:/language/Date/Short/Day/2": {
            "title": "$:/language/Date/Short/Day/2",
            "text": "Вт"
        },
        "$:/language/Date/Short/Day/3": {
            "title": "$:/language/Date/Short/Day/3",
            "text": "Ср"
        },
        "$:/language/Date/Short/Day/4": {
            "title": "$:/language/Date/Short/Day/4",
            "text": "Чт"
        },
        "$:/language/Date/Short/Day/5": {
            "title": "$:/language/Date/Short/Day/5",
            "text": "Пт"
        },
        "$:/language/Date/Short/Day/6": {
            "title": "$:/language/Date/Short/Day/6",
            "text": "Сб"
        },
        "$:/language/Date/Short/Month/1": {
            "title": "$:/language/Date/Short/Month/1",
            "text": "янв"
        },
        "$:/language/Date/Short/Month/2": {
            "title": "$:/language/Date/Short/Month/2",
            "text": "фев"
        },
        "$:/language/Date/Short/Month/3": {
            "title": "$:/language/Date/Short/Month/3",
            "text": "мрт"
        },
        "$:/language/Date/Short/Month/4": {
            "title": "$:/language/Date/Short/Month/4",
            "text": "апр"
        },
        "$:/language/Date/Short/Month/5": {
            "title": "$:/language/Date/Short/Month/5",
            "text": "май"
        },
        "$:/language/Date/Short/Month/6": {
            "title": "$:/language/Date/Short/Month/6",
            "text": "июн"
        },
        "$:/language/Date/Short/Month/7": {
            "title": "$:/language/Date/Short/Month/7",
            "text": "июл"
        },
        "$:/language/Date/Short/Month/8": {
            "title": "$:/language/Date/Short/Month/8",
            "text": "авг"
        },
        "$:/language/Date/Short/Month/9": {
            "title": "$:/language/Date/Short/Month/9",
            "text": "сен"
        },
        "$:/language/Date/Short/Month/10": {
            "title": "$:/language/Date/Short/Month/10",
            "text": "окт"
        },
        "$:/language/Date/Short/Month/11": {
            "title": "$:/language/Date/Short/Month/11",
            "text": "нбр"
        },
        "$:/language/Date/Short/Month/12": {
            "title": "$:/language/Date/Short/Month/12",
            "text": "дек"
        },
        "$:/language/Date/DaySuffix/1": {
            "title": "$:/language/Date/DaySuffix/1",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/10": {
            "title": "$:/language/Date/DaySuffix/10",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/11": {
            "title": "$:/language/Date/DaySuffix/11",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/12": {
            "title": "$:/language/Date/DaySuffix/12",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/13": {
            "title": "$:/language/Date/DaySuffix/13",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/14": {
            "title": "$:/language/Date/DaySuffix/14",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/15": {
            "title": "$:/language/Date/DaySuffix/15",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/16": {
            "title": "$:/language/Date/DaySuffix/16",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/17": {
            "title": "$:/language/Date/DaySuffix/17",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/18": {
            "title": "$:/language/Date/DaySuffix/18",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/19": {
            "title": "$:/language/Date/DaySuffix/19",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/2": {
            "title": "$:/language/Date/DaySuffix/2",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/20": {
            "title": "$:/language/Date/DaySuffix/20",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/21": {
            "title": "$:/language/Date/DaySuffix/21",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/22": {
            "title": "$:/language/Date/DaySuffix/22",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/23": {
            "title": "$:/language/Date/DaySuffix/23",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/24": {
            "title": "$:/language/Date/DaySuffix/24",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/25": {
            "title": "$:/language/Date/DaySuffix/25",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/26": {
            "title": "$:/language/Date/DaySuffix/26",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/27": {
            "title": "$:/language/Date/DaySuffix/27",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/28": {
            "title": "$:/language/Date/DaySuffix/28",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/29": {
            "title": "$:/language/Date/DaySuffix/29",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/3": {
            "title": "$:/language/Date/DaySuffix/3",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/30": {
            "title": "$:/language/Date/DaySuffix/30",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/31": {
            "title": "$:/language/Date/DaySuffix/31",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/4": {
            "title": "$:/language/Date/DaySuffix/4",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/5": {
            "title": "$:/language/Date/DaySuffix/5",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/6": {
            "title": "$:/language/Date/DaySuffix/6",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/7": {
            "title": "$:/language/Date/DaySuffix/7",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/8": {
            "title": "$:/language/Date/DaySuffix/8",
            "text": "-й"
        },
        "$:/language/Date/DaySuffix/9": {
            "title": "$:/language/Date/DaySuffix/9",
            "text": "-й"
        },
        "$:/language/RelativeDate/Future/Days": {
            "title": "$:/language/RelativeDate/Future/Days",
            "text": "через <<period>> дней"
        },
        "$:/language/RelativeDate/Future/Hours": {
            "title": "$:/language/RelativeDate/Future/Hours",
            "text": "через <<period>> часов"
        },
        "$:/language/RelativeDate/Future/Minutes": {
            "title": "$:/language/RelativeDate/Future/Minutes",
            "text": "через <<period>> минут"
        },
        "$:/language/RelativeDate/Future/Months": {
            "title": "$:/language/RelativeDate/Future/Months",
            "text": "через <<period>> месяцев"
        },
        "$:/language/RelativeDate/Future/Second": {
            "title": "$:/language/RelativeDate/Future/Second",
            "text": "через 1 секунду"
        },
        "$:/language/RelativeDate/Future/Seconds": {
            "title": "$:/language/RelativeDate/Future/Seconds",
            "text": "через <<period>> секунд"
        },
        "$:/language/RelativeDate/Future/Years": {
            "title": "$:/language/RelativeDate/Future/Years",
            "text": "через <<period>> лет"
        },
        "$:/language/RelativeDate/Past/Days": {
            "title": "$:/language/RelativeDate/Past/Days",
            "text": "<<period>> дней назад"
        },
        "$:/language/RelativeDate/Past/Hours": {
            "title": "$:/language/RelativeDate/Past/Hours",
            "text": "<<period>> часов назад"
        },
        "$:/language/RelativeDate/Past/Minutes": {
            "title": "$:/language/RelativeDate/Past/Minutes",
            "text": "<<period>> минут назад"
        },
        "$:/language/RelativeDate/Past/Months": {
            "title": "$:/language/RelativeDate/Past/Months",
            "text": "<<period>> месяцев назад"
        },
        "$:/language/RelativeDate/Past/Second": {
            "title": "$:/language/RelativeDate/Past/Second",
            "text": "1 секунду назад"
        },
        "$:/language/RelativeDate/Past/Seconds": {
            "title": "$:/language/RelativeDate/Past/Seconds",
            "text": "<<period>> секунд назад"
        },
        "$:/language/RelativeDate/Past/Years": {
            "title": "$:/language/RelativeDate/Past/Years",
            "text": "<<period>> лет назад"
        },
        "$:/language/Docs/Fields/_canonical_uri": {
            "title": "$:/language/Docs/Fields/_canonical_uri",
            "text": "Полный URI заметки, содержащей внешнюю картинку"
        },
        "$:/language/Docs/Fields/bag": {
            "title": "$:/language/Docs/Fields/bag",
            "text": "Название \"мешка\" заметки из TiddlyWeb"
        },
        "$:/language/Docs/Fields/caption": {
            "title": "$:/language/Docs/Fields/caption",
            "text": "Текст на вкладке или кнопке"
        },
        "$:/language/Docs/Fields/color": {
            "title": "$:/language/Docs/Fields/color",
            "text": "CSS значение цвета заметки"
        },
        "$:/language/Docs/Fields/component": {
            "title": "$:/language/Docs/Fields/component",
            "text": "Название компонента, ответственного за [[заметку-тревогу|AlertMechanism]]"
        },
        "$:/language/Docs/Fields/created": {
            "title": "$:/language/Docs/Fields/created",
            "text": "Дата создания заметки"
        },
        "$:/language/Docs/Fields/creator": {
            "title": "$:/language/Docs/Fields/creator",
            "text": "Имя создателя заметки"
        },
        "$:/language/Docs/Fields/current-tiddler": {
            "title": "$:/language/Docs/Fields/current-tiddler",
            "text": "Использовалось для хранения верхней заметки в [[списке истории|HistoryMechanism]]"
        },
        "$:/language/Docs/Fields/dependents": {
            "title": "$:/language/Docs/Fields/dependents",
            "text": "Для плагина, перечисляет названия зависимых плагинов"
        },
        "$:/language/Docs/Fields/description": {
            "title": "$:/language/Docs/Fields/description",
            "text": "Описание плагина или модального окна"
        },
        "$:/language/Docs/Fields/draft.of": {
            "title": "$:/language/Docs/Fields/draft.of",
            "text": "Для черновиков, содержит название редактируемой заметки"
        },
        "$:/language/Docs/Fields/draft.title": {
            "title": "$:/language/Docs/Fields/draft.title",
            "text": "Для черновиков, содержит новое название заметки"
        },
        "$:/language/Docs/Fields/footer": {
            "title": "$:/language/Docs/Fields/footer",
            "text": "Текст \"подвала\" мастера"
        },
        "$:/language/Docs/Fields/icon": {
            "title": "$:/language/Docs/Fields/icon",
            "text": "Название заметки, содержащей значок заметки"
        },
        "$:/language/Docs/Fields/library": {
            "title": "$:/language/Docs/Fields/library",
            "text": "Если \"yes\", то заметка сохраняется как библиотека JavaScript"
        },
        "$:/language/Docs/Fields/list": {
            "title": "$:/language/Docs/Fields/list",
            "text": "Упорядоченный список названий связанных заметок"
        },
        "$:/language/Docs/Fields/list-after": {
            "title": "$:/language/Docs/Fields/list-after",
            "text": "Название заметки, после которой эта заметка добавляется в упорядоченный список"
        },
        "$:/language/Docs/Fields/list-before": {
            "title": "$:/language/Docs/Fields/list-before",
            "text": "Название заметки, перед которой эта заметка добавляется в упорядоченный список; если это поле создано и имеет пустое значение, то заметка добавляется в начало списка"
        },
        "$:/language/Docs/Fields/modified": {
            "title": "$:/language/Docs/Fields/modified",
            "text": "Дата последнего изменения заметки"
        },
        "$:/language/Docs/Fields/modifier": {
            "title": "$:/language/Docs/Fields/modifier",
            "text": "Имя редактора заметки"
        },
        "$:/language/Docs/Fields/name": {
            "title": "$:/language/Docs/Fields/name",
            "text": "Название плагина"
        },
        "$:/language/Docs/Fields/plugin-priority": {
            "title": "$:/language/Docs/Fields/plugin-priority",
            "text": "Число - приоритет плагина"
        },
        "$:/language/Docs/Fields/plugin-type": {
            "title": "$:/language/Docs/Fields/plugin-type",
            "text": "Тип плагина"
        },
        "$:/language/Docs/Fields/released": {
            "title": "$:/language/Docs/Fields/released",
            "text": "Дата выпуска TiddlyWiki"
        },
        "$:/language/Docs/Fields/revision": {
            "title": "$:/language/Docs/Fields/revision",
            "text": "Версия заметки на сервере"
        },
        "$:/language/Docs/Fields/source": {
            "title": "$:/language/Docs/Fields/source",
            "text": "Исходный URL связанный с заметкой"
        },
        "$:/language/Docs/Fields/subtitle": {
            "title": "$:/language/Docs/Fields/subtitle",
            "text": "Подзаголовок мастера"
        },
        "$:/language/Docs/Fields/tags": {
            "title": "$:/language/Docs/Fields/tags",
            "text": "Список меток связанный с заметкой"
        },
        "$:/language/Docs/Fields/text": {
            "title": "$:/language/Docs/Fields/text",
            "text": "Содержимое заметки"
        },
        "$:/language/Docs/Fields/title": {
            "title": "$:/language/Docs/Fields/title",
            "text": "Уникальное название заметки"
        },
        "$:/language/Docs/Fields/type": {
            "title": "$:/language/Docs/Fields/type",
            "text": "Тип содержимого заметки"
        },
        "$:/language/Docs/Fields/version": {
            "title": "$:/language/Docs/Fields/version",
            "text": "Версия плагина"
        },
        "$:/language/Docs/ModuleTypes/animation": {
            "title": "$:/language/Docs/ModuleTypes/animation",
            "text": "Анимации для виджета Reveal."
        },
        "$:/language/Docs/ModuleTypes/command": {
            "title": "$:/language/Docs/ModuleTypes/command",
            "text": "Команды, исполняемые Node.js."
        },
        "$:/language/Docs/ModuleTypes/config": {
            "title": "$:/language/Docs/ModuleTypes/config",
            "text": "Данные для вставки в `$tw.config`."
        },
        "$:/language/Docs/ModuleTypes/filteroperator": {
            "title": "$:/language/Docs/ModuleTypes/filteroperator",
            "text": "Отдельные методы операторов фильтра."
        },
        "$:/language/Docs/ModuleTypes/global": {
            "title": "$:/language/Docs/ModuleTypes/global",
            "text": "Глобальные данные для вставки в `$tw`."
        },
        "$:/language/Docs/ModuleTypes/isfilteroperator": {
            "title": "$:/language/Docs/ModuleTypes/isfilteroperator",
            "text": "Операнды для оператора фильтра ''is''."
        },
        "$:/language/Docs/ModuleTypes/macro": {
            "title": "$:/language/Docs/ModuleTypes/macro",
            "text": "Макросы JavaScript."
        },
        "$:/language/Docs/ModuleTypes/parser": {
            "title": "$:/language/Docs/ModuleTypes/parser",
            "text": "Парсеры для разных типов содержимого."
        },
        "$:/language/Docs/ModuleTypes/saver": {
            "title": "$:/language/Docs/ModuleTypes/saver",
            "text": "Методы сохранения."
        },
        "$:/language/Docs/ModuleTypes/startup": {
            "title": "$:/language/Docs/ModuleTypes/startup",
            "text": "Функции, выполняемые при загрузке."
        },
        "$:/language/Docs/ModuleTypes/storyview": {
            "title": "$:/language/Docs/ModuleTypes/storyview",
            "text": "Настройка анимации и поведения виджета List."
        },
        "$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
            "text": "Превращают разные типы содержимого в заметки."
        },
        "$:/language/Docs/ModuleTypes/tiddlerfield": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerfield",
            "text": "Определяет поведение отдельных полей заметок."
        },
        "$:/language/Docs/ModuleTypes/tiddlermethod": {
            "title": "$:/language/Docs/ModuleTypes/tiddlermethod",
            "text": "Добавляет методы к прототипу заметки `$tw.Tiddler`."
        },
        "$:/language/Docs/ModuleTypes/upgrader": {
            "title": "$:/language/Docs/ModuleTypes/upgrader",
            "text": "Обработка заметок во время обновления/импорта."
        },
        "$:/language/Docs/ModuleTypes/utils": {
            "title": "$:/language/Docs/ModuleTypes/utils",
            "text": "Добавляет методы в `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/utils-node": {
            "title": "$:/language/Docs/ModuleTypes/utils-node",
            "text": "Добавляет специфичные для Node.js методы в `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/widget": {
            "title": "$:/language/Docs/ModuleTypes/widget",
            "text": "Виджеты отвечают за отображение и обновление DOM."
        },
        "$:/language/Docs/ModuleTypes/wikimethod": {
            "title": "$:/language/Docs/ModuleTypes/wikimethod",
            "text": "Добавляет методы в `$tw.Wiki`."
        },
        "$:/language/Docs/ModuleTypes/wikirule": {
            "title": "$:/language/Docs/ModuleTypes/wikirule",
            "text": "Отдельные правила для главного парсера WikiText."
        },
        "$:/language/Docs/PaletteColours/alert-background": {
            "title": "$:/language/Docs/PaletteColours/alert-background",
            "text": "Фон сообщения об ошибке"
        },
        "$:/language/Docs/PaletteColours/alert-border": {
            "title": "$:/language/Docs/PaletteColours/alert-border",
            "text": "Граница сообщения об ошибке"
        },
        "$:/language/Docs/PaletteColours/alert-highlight": {
            "title": "$:/language/Docs/PaletteColours/alert-highlight",
            "text": "Подсветка сообщения об ошибке"
        },
        "$:/language/Docs/PaletteColours/alert-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
            "text": "Приглушенный цвет текста сообщения об ошибке"
        },
        "$:/language/Docs/PaletteColours/background": {
            "title": "$:/language/Docs/PaletteColours/background",
            "text": "Общий фон"
        },
        "$:/language/Docs/PaletteColours/blockquote-bar": {
            "title": "$:/language/Docs/PaletteColours/blockquote-bar",
            "text": "Оформление цитаты"
        },
        "$:/language/Docs/PaletteColours/button-background": {
            "title": "$:/language/Docs/PaletteColours/button-background",
            "text": "Фон кнопки по умолчанию"
        },
        "$:/language/Docs/PaletteColours/button-border": {
            "title": "$:/language/Docs/PaletteColours/button-border",
            "text": "Граница кнопки по умолчанию"
        },
        "$:/language/Docs/PaletteColours/button-foreground": {
            "title": "$:/language/Docs/PaletteColours/button-foreground",
            "text": "Цвет кнопки по умолчанию"
        },
        "$:/language/Docs/PaletteColours/code-background": {
            "title": "$:/language/Docs/PaletteColours/code-background",
            "text": "Фон блоков кода"
        },
        "$:/language/Docs/PaletteColours/code-border": {
            "title": "$:/language/Docs/PaletteColours/code-border",
            "text": "Граница блоков кода"
        },
        "$:/language/Docs/PaletteColours/code-foreground": {
            "title": "$:/language/Docs/PaletteColours/code-foreground",
            "text": "Цвет текста блоков кода"
        },
        "$:/language/Docs/PaletteColours/dirty-indicator": {
            "title": "$:/language/Docs/PaletteColours/dirty-indicator",
            "text": "Индикатор несохранённых изменений"
        },
        "$:/language/Docs/PaletteColours/download-background": {
            "title": "$:/language/Docs/PaletteColours/download-background",
            "text": "Фон кнопки Скачать"
        },
        "$:/language/Docs/PaletteColours/download-foreground": {
            "title": "$:/language/Docs/PaletteColours/download-foreground",
            "text": "Цвет текста кнопки Скачать"
        },
        "$:/language/Docs/PaletteColours/dragger-background": {
            "title": "$:/language/Docs/PaletteColours/dragger-background",
            "text": "Фон перетаскиваемой ссылки"
        },
        "$:/language/Docs/PaletteColours/dragger-foreground": {
            "title": "$:/language/Docs/PaletteColours/dragger-foreground",
            "text": "Цвет текста перетаскиваемой ссылки"
        },
        "$:/language/Docs/PaletteColours/dropdown-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-background",
            "text": "Фон выпадающего меню"
        },
        "$:/language/Docs/PaletteColours/dropdown-border": {
            "title": "$:/language/Docs/PaletteColours/dropdown-border",
            "text": "Граница выпадающего меню"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
            "text": "Фон вкладок выпадающего меню"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
            "text": "Фон выбранных вкладок выпадающего меню"
        },
        "$:/language/Docs/PaletteColours/dropzone-background": {
            "title": "$:/language/Docs/PaletteColours/dropzone-background",
            "text": "Фон области перетаскивания"
        },
        "$:/language/Docs/PaletteColours/external-link-background": {
            "title": "$:/language/Docs/PaletteColours/external-link-background",
            "text": "фон внешней ссылки"
        },
        "$:/language/Docs/PaletteColours/external-link-background-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-hover",
            "text": "Фон внешней ссылки при наведении"
        },
        "$:/language/Docs/PaletteColours/external-link-background-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-visited",
            "text": "Фон посещённой внешней ссылки"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground",
            "text": "Цвет текста внешней ссылки"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
            "text": "Цвет текста внешней ссылки при наведении"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
            "text": "Цвет текста посещённой внешней ссылки"
        },
        "$:/language/Docs/PaletteColours/foreground": {
            "title": "$:/language/Docs/PaletteColours/foreground",
            "text": "Общий цвет текста"
        },
        "$:/language/Docs/PaletteColours/message-background": {
            "title": "$:/language/Docs/PaletteColours/message-background",
            "text": "Фон сообщений"
        },
        "$:/language/Docs/PaletteColours/message-border": {
            "title": "$:/language/Docs/PaletteColours/message-border",
            "text": "Граница сообщений"
        },
        "$:/language/Docs/PaletteColours/message-foreground": {
            "title": "$:/language/Docs/PaletteColours/message-foreground",
            "text": "Цвет текста сообщений"
        },
        "$:/language/Docs/PaletteColours/modal-backdrop": {
            "title": "$:/language/Docs/PaletteColours/modal-backdrop",
            "text": "Цвет фона за модальным окном"
        },
        "$:/language/Docs/PaletteColours/modal-background": {
            "title": "$:/language/Docs/PaletteColours/modal-background",
            "text": "Фон модального окна"
        },
        "$:/language/Docs/PaletteColours/modal-border": {
            "title": "$:/language/Docs/PaletteColours/modal-border",
            "text": "Граница модального окна"
        },
        "$:/language/Docs/PaletteColours/modal-footer-background": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-background",
            "text": "Фон подвала модального окна"
        },
        "$:/language/Docs/PaletteColours/modal-footer-border": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-border",
            "text": "Граница подвала модального окна"
        },
        "$:/language/Docs/PaletteColours/modal-header-border": {
            "title": "$:/language/Docs/PaletteColours/modal-header-border",
            "text": "Граница шапки модального окна"
        },
        "$:/language/Docs/PaletteColours/muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/muted-foreground",
            "text": "Приглушенный цвет текста"
        },
        "$:/language/Docs/PaletteColours/notification-background": {
            "title": "$:/language/Docs/PaletteColours/notification-background",
            "text": "Фон уведомлений"
        },
        "$:/language/Docs/PaletteColours/notification-border": {
            "title": "$:/language/Docs/PaletteColours/notification-border",
            "text": "Граница уведомлений"
        },
        "$:/language/Docs/PaletteColours/page-background": {
            "title": "$:/language/Docs/PaletteColours/page-background",
            "text": "Фон страницы"
        },
        "$:/language/Docs/PaletteColours/pre-background": {
            "title": "$:/language/Docs/PaletteColours/pre-background",
            "text": "Фон неформатированного текста"
        },
        "$:/language/Docs/PaletteColours/pre-border": {
            "title": "$:/language/Docs/PaletteColours/pre-border",
            "text": "Граница неформатированного текста"
        },
        "$:/language/Docs/PaletteColours/primary": {
            "title": "$:/language/Docs/PaletteColours/primary",
            "text": "Первичный цвет"
        },
        "$:/language/Docs/PaletteColours/sidebar-button-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
            "text": "Цвет текста кнопок боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
            "text": "Цвет элементов управления боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
            "text": "Цвет элементов управления боковой панели при наведении"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground",
            "text": "Цвет текста на боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
            "text": "Цвет тени текста на боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
            "text": "Приглушенный цвет текста на боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
            "text": "Приглушенный цвет текста на боковой панели при наведении"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
            "text": "Фон вкладок на боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
            "text": "Фон выбранных вкладок на боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
            "text": "Граница вкладок на боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
            "text": "Граница выбранных вкладок на боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-divider": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
            "text": "Разделитель вкладок на боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
            "text": "Цвет текста вкладок на боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
            "text": "Цвет текста выбранных вкладок на боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
            "text": "Цвет ссылок на заметки на боковой панели"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
            "text": "Цвет ссылок на заметки на боковой панели при наведении"
        },
        "$:/language/Docs/PaletteColours/site-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/site-title-foreground",
            "text": "Цвет заголовка сайта"
        },
        "$:/language/Docs/PaletteColours/static-alert-foreground": {
            "title": "$:/language/Docs/PaletteColours/static-alert-foreground",
            "text": "Цвет текста статической версии сообщения об ошибке"
        },
        "$:/language/Docs/PaletteColours/tab-background": {
            "title": "$:/language/Docs/PaletteColours/tab-background",
            "text": "Фон вкладок"
        },
        "$:/language/Docs/PaletteColours/tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-background-selected",
            "text": "Фон выбранных вкладок"
        },
        "$:/language/Docs/PaletteColours/tab-border": {
            "title": "$:/language/Docs/PaletteColours/tab-border",
            "text": "Граница вкладок"
        },
        "$:/language/Docs/PaletteColours/tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-border-selected",
            "text": "Граница выбранных вкладок"
        },
        "$:/language/Docs/PaletteColours/tab-divider": {
            "title": "$:/language/Docs/PaletteColours/tab-divider",
            "text": "Разделитель вкладок"
        },
        "$:/language/Docs/PaletteColours/tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground",
            "text": "Цвет текста вкладок"
        },
        "$:/language/Docs/PaletteColours/tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
            "text": "Цвет текста выбранных вкладок"
        },
        "$:/language/Docs/PaletteColours/table-border": {
            "title": "$:/language/Docs/PaletteColours/table-border",
            "text": "Граница таблиц"
        },
        "$:/language/Docs/PaletteColours/table-footer-background": {
            "title": "$:/language/Docs/PaletteColours/table-footer-background",
            "text": "Фон подвала таблиц"
        },
        "$:/language/Docs/PaletteColours/table-header-background": {
            "title": "$:/language/Docs/PaletteColours/table-header-background",
            "text": "Фон шапки таблиц"
        },
        "$:/language/Docs/PaletteColours/tag-background": {
            "title": "$:/language/Docs/PaletteColours/tag-background",
            "text": "Фон меток"
        },
        "$:/language/Docs/PaletteColours/tag-foreground": {
            "title": "$:/language/Docs/PaletteColours/tag-foreground",
            "text": "Цвет текста меток"
        },
        "$:/language/Docs/PaletteColours/tiddler-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-background",
            "text": "Фон заметок"
        },
        "$:/language/Docs/PaletteColours/tiddler-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-border",
            "text": "Граница заметок"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
            "text": "Цвет элементов управления заметки"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
            "text": "Цвет элементов управления заметки при наведении"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
            "text": "Цвет выбранных элементов управления заметки"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
            "text": "Фон редактора заметок"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
            "text": "Граница редактора заметок"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
            "text": "Граница редактора изображений"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
            "text": "Фон четных полей"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
            "text": "Фон нечётных полей"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-background",
            "text": "Фон информационной панели заметки"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-border",
            "text": "Граница информационной панели заметки"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
            "text": "Фон вкладок информационной панели заметки"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-background",
            "text": "Фон ссылок на заметку"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
            "text": "Цвет текста ссылок на заметку"
        },
        "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
            "text": "Цвет текста подзаголовка заметки"
        },
        "$:/language/Docs/PaletteColours/tiddler-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
            "text": "Цвет текста заголовка заметки"
        },
        "$:/language/Docs/PaletteColours/toolbar-cancel-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
            "text": "Цвет кнопки 'отменить'"
        },
        "$:/language/Docs/PaletteColours/toolbar-close-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-close-button",
            "text": "Цвет кнопки 'закрыть'"
        },
        "$:/language/Docs/PaletteColours/toolbar-delete-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
            "text": "Цвет кнопки 'удалить'"
        },
        "$:/language/Docs/PaletteColours/toolbar-done-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-done-button",
            "text": "Цвет кнопки 'готово'"
        },
        "$:/language/Docs/PaletteColours/toolbar-edit-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
            "text": "Цвет кнопки 'редактировать'"
        },
        "$:/language/Docs/PaletteColours/toolbar-info-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-info-button",
            "text": "Цвет кнопки 'информация'"
        },
        "$:/language/Docs/PaletteColours/toolbar-new-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-new-button",
            "text": "Цвет кнопки 'создать'"
        },
        "$:/language/Docs/PaletteColours/toolbar-options-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-options-button",
            "text": "Цвет кнопки 'настройки'"
        },
        "$:/language/Docs/PaletteColours/toolbar-save-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-save-button",
            "text": "Цвет кнопки 'сохранить'"
        },
        "$:/language/Docs/PaletteColours/untagged-background": {
            "title": "$:/language/Docs/PaletteColours/untagged-background",
            "text": "Фон метки 'без метки'"
        },
        "$:/language/Docs/PaletteColours/very-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/very-muted-foreground",
            "text": "Очень приглушенный цвет текста"
        },
        "$:/language/EditTemplate/Body/External/Hint": {
            "title": "$:/language/EditTemplate/Body/External/Hint",
            "text": "Содержимое этой заметки находится вне TiddlyWiki. Но вы можете редактировать метки и поля"
        },
        "$:/language/EditTemplate/Body/Placeholder": {
            "title": "$:/language/EditTemplate/Body/Placeholder",
            "text": "Введите текст заметки"
        },
        "$:/language/EditTemplate/Field/Remove/Caption": {
            "title": "$:/language/EditTemplate/Field/Remove/Caption",
            "text": "удалить поле"
        },
        "$:/language/EditTemplate/Field/Remove/Hint": {
            "title": "$:/language/EditTemplate/Field/Remove/Hint",
            "text": "Удалить поле"
        },
        "$:/language/EditTemplate/Fields/Add/Button": {
            "title": "$:/language/EditTemplate/Fields/Add/Button",
            "text": "добавить"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/System": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
            "text": "Системные поля"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/User": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
            "text": "Пользовательские поля"
        },
        "$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
            "text": "название поля"
        },
        "$:/language/EditTemplate/Fields/Add/Prompt": {
            "title": "$:/language/EditTemplate/Fields/Add/Prompt",
            "text": "Добавить новое поле:"
        },
        "$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
            "text": "значение"
        },
        "$:/language/EditTemplate/Shadow/OverriddenWarning": {
            "title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
            "text": "Это переопределённая встроенная заметка. Для восстановления стандартного значения просто удалите её"
        },
        "$:/language/EditTemplate/Shadow/Warning": {
            "title": "$:/language/EditTemplate/Shadow/Warning",
            "text": "Это встроенная заметка. Любое изменение переопределит стандартное значение"
        },
        "$:/language/EditTemplate/Tags/Add/Button": {
            "title": "$:/language/EditTemplate/Tags/Add/Button",
            "text": "добавить"
        },
        "$:/language/EditTemplate/Tags/Add/Placeholder": {
            "title": "$:/language/EditTemplate/Tags/Add/Placeholder",
            "text": "название метки"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
            "text": "список меток"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
            "text": "Показать список меток"
        },
        "$:/language/EditTemplate/Type/Delete/Caption": {
            "title": "$:/language/EditTemplate/Type/Delete/Caption",
            "text": "удалить тип содержимого"
        },
        "$:/language/EditTemplate/Type/Delete/Hint": {
            "title": "$:/language/EditTemplate/Type/Delete/Hint",
            "text": "Удалить тип содержимого"
        },
        "$:/language/EditTemplate/Type/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Caption",
            "text": "список типов содержимого"
        },
        "$:/language/EditTemplate/Type/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Hint",
            "text": "Показать список типов содержимого"
        },
        "$:/language/EditTemplate/Type/Placeholder": {
            "title": "$:/language/EditTemplate/Type/Placeholder",
            "text": "тип содержимого"
        },
        "$:/language/EditTemplate/Type/Prompt": {
            "title": "$:/language/EditTemplate/Type/Prompt",
            "text": "Тип:"
        },
        "$:/language/Exporters/StaticRiver": {
            "title": "$:/language/Exporters/StaticRiver",
            "text": "Показываемые заметки в виде статического HTML файла"
        },
        "$:/language/Exporters/JsonFile": {
            "title": "$:/language/Exporters/JsonFile",
            "text": "Заметки в формате JSON"
        },
        "$:/language/Exporters/CsvFile": {
            "title": "$:/language/Exporters/CsvFile",
            "text": "Заметки в формате CSV"
        },
        "$:/language/Exporters/TidFile": {
            "title": "$:/language/Exporters/TidFile",
            "text": "Одна заметка в формате \".tid\""
        },
        "$:/language/Filters/AllTags": {
            "title": "$:/language/Filters/AllTags",
            "text": "Все метки, кроме системных"
        },
        "$:/language/Filters/AllTiddlers": {
            "title": "$:/language/Filters/AllTiddlers",
            "text": "Все заметки, кроме системных"
        },
        "$:/language/Filters/Drafts": {
            "title": "$:/language/Filters/Drafts",
            "text": "Черновики"
        },
        "$:/language/Filters/Missing": {
            "title": "$:/language/Filters/Missing",
            "text": "Отсутствующие заметки"
        },
        "$:/language/Filters/Orphans": {
            "title": "$:/language/Filters/Orphans",
            "text": "Потерянные заметки"
        },
        "$:/language/Filters/OverriddenShadowTiddlers": {
            "title": "$:/language/Filters/OverriddenShadowTiddlers",
            "text": "Переопределённые встроенные заметки"
        },
        "$:/language/Filters/RecentSystemTiddlers": {
            "title": "$:/language/Filters/RecentSystemTiddlers",
            "text": "Недавно измененные заметки, включая системные"
        },
        "$:/language/Filters/RecentTiddlers": {
            "title": "$:/language/Filters/RecentTiddlers",
            "text": "Недавно измененные заметки"
        },
        "$:/language/Filters/ShadowTiddlers": {
            "title": "$:/language/Filters/ShadowTiddlers",
            "text": "Встроенные заметки"
        },
        "$:/language/Filters/SystemTags": {
            "title": "$:/language/Filters/SystemTags",
            "text": "Системные метки"
        },
        "$:/language/Filters/SystemTiddlers": {
            "title": "$:/language/Filters/SystemTiddlers",
            "text": "Системные заметки"
        },
        "$:/language/Filters/TypedTiddlers": {
            "title": "$:/language/Filters/TypedTiddlers",
            "text": "Не вики-текстовые тиддлеры"
        },
        "GettingStarted": {
            "title": "GettingStarted",
            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nДобро пожаловать в ~TiddlyWiki, нелинейную личную сетевую записную книжку.\n\nДля начала убедитесь, что у вас работает сохранение - подробные инструкции на https://tiddlywiki.com/.\n\nЗатем вы можете:\n\n* Создать новые заметки, используя кнопку 'плюс' на боковой панели\n* Зайти в панель управления, используя кнопку с изображением 'шестерёнки' на боковой панели и настроить TiddlyWiki на свой вкус\n** Убрать это сообщение, изменив настройку 'заметки по умолчанию' на вкладке Основные\n* Сохранить изменения при помощи кнопки 'скачать' на боковой панели\n* Изучить подробнее WikiText\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit-text tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
        },
        "$:/language/Import/Listing/Cancel/Caption": {
            "title": "$:/language/Import/Listing/Cancel/Caption",
            "text": "Отмена"
        },
        "$:/language/Import/Listing/Hint": {
            "title": "$:/language/Import/Listing/Hint",
            "text": "Импортируемые заметки:"
        },
        "$:/language/Import/Listing/Import/Caption": {
            "title": "$:/language/Import/Listing/Import/Caption",
            "text": "Импортировать"
        },
        "$:/language/Import/Listing/Select/Caption": {
            "title": "$:/language/Import/Listing/Select/Caption",
            "text": "Выбор"
        },
        "$:/language/Import/Listing/Status/Caption": {
            "title": "$:/language/Import/Listing/Status/Caption",
            "text": "Примечание"
        },
        "$:/language/Import/Listing/Title/Caption": {
            "title": "$:/language/Import/Listing/Title/Caption",
            "text": "Название"
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
            "text": "Заблокированный несовместимый или устаревший плагин"
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
            "text": "Заблокированный плагин (импотируемый <<incoming>> старее существующего <<existing>>)"
        },
        "$:/language/Import/Upgrader/Plugins/Upgraded": {
            "title": "$:/language/Import/Upgrader/Plugins/Upgraded",
            "text": "Обновляемый плагин с версии <<incoming>> до <<upgraded>>"
        },
        "$:/language/Import/Upgrader/State/Suppressed": {
            "title": "$:/language/Import/Upgrader/State/Suppressed",
            "text": "Заблокированная временная внутренняя заметка"
        },
        "$:/language/Import/Upgrader/System/Suppressed": {
            "title": "$:/language/Import/Upgrader/System/Suppressed",
            "text": "Заблокированная системная заметка"
        },
        "$:/language/Import/Upgrader/ThemeTweaks/Created": {
            "title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
            "text": "Импортированная настройка темы из <$text text=<<from>>/>"
        },
        "$:/language/BinaryWarning/Prompt": {
            "title": "$:/language/BinaryWarning/Prompt",
            "text": "Эта заметка содержит двоичные данные"
        },
        "$:/language/ClassicWarning/Hint": {
            "title": "$:/language/ClassicWarning/Hint",
            "text": "Эта заметка написана в формате TiddlyWiki Classic WikiText, который не совместим с TiddlyWiki 5. Подробнее: https://tiddlywiki.com/static/Upgrading.html"
        },
        "$:/language/ClassicWarning/Upgrade/Caption": {
            "title": "$:/language/ClassicWarning/Upgrade/Caption",
            "text": "обновление"
        },
        "$:/language/CloseAll/Button": {
            "title": "$:/language/CloseAll/Button",
            "text": "закрыть все"
        },
        "$:/language/ConfirmCancelTiddler": {
            "title": "$:/language/ConfirmCancelTiddler",
            "text": "Отменить изменения заметки \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmDeleteTiddler": {
            "title": "$:/language/ConfirmDeleteTiddler",
            "text": "Удалить заметку \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmEditShadowTiddler": {
            "title": "$:/language/ConfirmEditShadowTiddler",
            "text": "Вы собираетесь редактировать встроенную заметку. Любое изменение переопределит стандартное значение и может привести к проблемам при обновлении TiddlyWiki. Вы действительно хотите редактировать \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmOverwriteTiddler": {
            "title": "$:/language/ConfirmOverwriteTiddler",
            "text": "Заменить заметку \"<$text text=<<title>>/>\"?"
        },
        "$:/language/Count": {
            "title": "$:/language/Count",
            "text": "номер"
        },
        "$:/language/DefaultNewTiddlerTitle": {
            "title": "$:/language/DefaultNewTiddlerTitle",
            "text": "Новая заметка"
        },
        "$:/language/DropMessage": {
            "title": "$:/language/DropMessage",
            "text": "Перетащите сюда (или нажмите escape для отмены)"
        },
        "$:/language/Encryption/Cancel": {
            "title": "$:/language/Encryption/Cancel",
            "text": "Отмена"
        },
        "$:/language/Encryption/ConfirmClearPassword": {
            "title": "$:/language/Encryption/ConfirmClearPassword",
            "text": "Вы действительно хотите сбросить пароль? Это действие отменит шифрование при следующем сохранении"
        },
        "$:/language/Encryption/Password": {
            "title": "$:/language/Encryption/Password",
            "text": "Пароль"
        },
        "$:/language/Encryption/PasswordNoMatch": {
            "title": "$:/language/Encryption/PasswordNoMatch",
            "text": "Пароли не совпадают"
        },
        "$:/language/Encryption/PromptSetPassword": {
            "title": "$:/language/Encryption/PromptSetPassword",
            "text": "Установить новый пароль для TiddlyWiki"
        },
        "$:/language/Encryption/RepeatPassword": {
            "title": "$:/language/Encryption/RepeatPassword",
            "text": "Повторите пароль"
        },
        "$:/language/Encryption/SetPassword": {
            "title": "$:/language/Encryption/SetPassword",
            "text": "Введите пароль"
        },
        "$:/language/Encryption/Username": {
            "title": "$:/language/Encryption/Username",
            "text": "Имя пользователя"
        },
        "$:/language/InvalidFieldName": {
            "title": "$:/language/InvalidFieldName",
            "text": "Недопустимые символы в названии поля \"<$text text=<<fieldName>>/>\". Поля могут содержать только латинские буквы нижнего регистра, цифры и символы: подчеркивание (`_`), дефис (`-`) и точку (`.`)"
        },
        "$:/language/MissingTiddler/Hint": {
            "title": "$:/language/MissingTiddler/Hint",
            "text": "Заметка \"<$text text=<<currentTiddler>>/>\" отсутствует - нажмите {{||$:/core/ui/Buttons/edit}} чтобы её создать"
        },
        "$:/language/OfficialPluginLibrary": {
            "title": "$:/language/OfficialPluginLibrary",
            "text": "Официальная Библиотека Плагинов ~TiddlyWiki"
        },
        "$:/language/PluginReloadWarning": {
            "title": "$:/language/PluginReloadWarning",
            "text": "Пожалуйста, сохраните {{$:/core/ui/Buttons/save-wiki}} и перезапустите {{$:/core/ui/Buttons/refresh}} вики, чтобы изменения в плагинах возымели эффект."
        },
        "$:/language/RecentChanges/DateFormat": {
            "title": "$:/language/RecentChanges/DateFormat",
            "text": "DD MMM YYYY"
        },
        "$:/language/SystemTiddler/Tooltip": {
            "title": "$:/language/SystemTiddler/Tooltip",
            "text": "Это системная заметка"
        },
        "$:/language/TagManager/Colour/Heading": {
            "title": "$:/language/TagManager/Colour/Heading",
            "text": "Цвет"
        },
        "$:/language/TagManager/Count/Heading": {
            "title": "$:/language/TagManager/Count/Heading",
            "text": "Номер"
        },
        "$:/language/TagManager/Icon/Heading": {
            "title": "$:/language/TagManager/Icon/Heading",
            "text": "Значок"
        },
        "$:/language/TagManager/Info/Heading": {
            "title": "$:/language/TagManager/Info/Heading",
            "text": "Детали"
        },
        "$:/language/TagManager/Tag/Heading": {
            "title": "$:/language/TagManager/Tag/Heading",
            "text": "Метка"
        },
        "$:/language/UnsavedChangesWarning": {
            "title": "$:/language/UnsavedChangesWarning",
            "text": "Изменения TiddlyWiki не сохранены"
        },
        "$:/language/Modals/Download": {
            "title": "$:/language/Modals/Download",
            "type": "text/vnd.tiddlywiki",
            "subtitle": "Скачать изменения",
            "footer": "<$button message=\"tm-close-tiddler\">Закрыть</$button>",
            "help": "https://tiddlywiki.com/static/DownloadingChanges.html",
            "text": "Ваш браузер поддерживает только ручное сохранение.\n\nЧтобы сохранить измененную ~TiddlyWiki, щёлкните правой кнопкой мыши по ссылке ниже и выберите \"Скачать файл\" или \"Сохранить файл\", затем выберите расположение и имя файла.\n\n//Вы можете заметно ускорить этот процесс, щёлкнув по ссылке с нажатой клавишей Control (Windows) или Options/Alt (Mac OS X). У вас не спросят расположение и имя файла, возможно, имя будет неузнаваемым -- также может понадобиться добавить расширение `.html` к имени файла.//\n\nНа смартфонах, которые на позволяют скачивать файлы, можно поместить ссылку в закладки, затем синхронизировать закладки с компьютером, где ~TiddlyWiki можно сохранить обычным методом.\n"
        },
        "$:/language/Modals/SaveInstructions": {
            "title": "$:/language/Modals/SaveInstructions",
            "type": "text/vnd.tiddlywiki",
            "subtitle": "Сохраните свою работу",
            "footer": "<$button message=\"tm-close-tiddler\">Закрыть</$button>",
            "help": "https://tiddlywiki.com/static/SavingChanges.html",
            "text": "Изменения должны быть сохранены в виде HTML файла ~TiddlyWiki.\n\n!!! На компьютере\n\n# Нажмите ''Сохранить как'' в меню ''Файл''\n# Выберите название и расположение файла\n#* Иногда требуется также явно указать формат сохраняемого файла: ''Веб-страница, только HTML'' или подобный\n# Закройте эту вкладку\n\n!!! На смартфоне\n\n# Поместите эту страницу в закладки\n#* Если у вас настроен iCloud или Google Sync, тогда закладка автоматически синхронизируется с компьютером, и вы сможете открыть её и сохранить по инструкции для компьютеров\n# Закройте эту вкладку\n\n//При открытии закладки в Mobile Safari вы снова увидите это сообщение. Если вы хотите продолжить работу с файлом, нажмите на кнопку ''Закрыть'' ниже//\n"
        },
        "$:/config/NewJournal/Tags": {
            "title": "$:/config/NewJournal/Tags",
            "text": "Дневник"
        },
        "$:/config/NewJournal/Title": {
            "title": "$:/config/NewJournal/Title",
            "text": "DD MMM YYYY"
        },
        "$:/language/Notifications/Save/Done": {
            "title": "$:/language/Notifications/Save/Done",
            "text": "Успешно сохранено"
        },
        "$:/language/Notifications/Save/Starting": {
            "title": "$:/language/Notifications/Save/Starting",
            "text": "Идёт сохранение"
        },
        "$:/language/Search/DefaultResults/Caption": {
            "title": "$:/language/Search/DefaultResults/Caption",
            "text": "Список"
        },
        "$:/language/Search/Filter/Caption": {
            "title": "$:/language/Search/Filter/Caption",
            "text": "Фильтр"
        },
        "$:/language/Search/Filter/Hint": {
            "title": "$:/language/Search/Filter/Hint",
            "text": "Поиск с помощью [[фильтров|https://tiddlywiki.com/static/Filters.html]]"
        },
        "$:/language/Search/Filter/Matches": {
            "title": "$:/language/Search/Filter/Matches",
            "text": "//<small><<resultCount>> совпадений</small>//"
        },
        "$:/language/Search/Matches": {
            "title": "$:/language/Search/Matches",
            "text": "//<small><<resultCount>> совпадений</small>//"
        },
        "$:/language/Search/Shadows/Caption": {
            "title": "$:/language/Search/Shadows/Caption",
            "text": "Встроенные"
        },
        "$:/language/Search/Shadows/Hint": {
            "title": "$:/language/Search/Shadows/Hint",
            "text": "Поиск встроенных заметок"
        },
        "$:/language/Search/Shadows/Matches": {
            "title": "$:/language/Search/Shadows/Matches",
            "text": "//<small><<resultCount>> совпадений</small>//"
        },
        "$:/language/Search/Standard/Caption": {
            "title": "$:/language/Search/Standard/Caption",
            "text": "Обычные"
        },
        "$:/language/Search/Standard/Hint": {
            "title": "$:/language/Search/Standard/Hint",
            "text": "Поиск обычных заметок"
        },
        "$:/language/Search/Standard/Matches": {
            "title": "$:/language/Search/Standard/Matches",
            "text": "//<small><<resultCount>> совпадений</small>//"
        },
        "$:/language/Search/System/Caption": {
            "title": "$:/language/Search/System/Caption",
            "text": "Системные"
        },
        "$:/language/Search/System/Hint": {
            "title": "$:/language/Search/System/Hint",
            "text": "Поиск системных заметок"
        },
        "$:/language/Search/System/Matches": {
            "title": "$:/language/Search/System/Matches",
            "text": "//<small><<resultCount>> совпадений</small>//"
        },
        "$:/language/SideBar/All/Caption": {
            "title": "$:/language/SideBar/All/Caption",
            "text": "Все"
        },
        "$:/language/SideBar/Contents/Caption": {
            "title": "$:/language/SideBar/Contents/Caption",
            "text": "Оглавление"
        },
        "$:/language/SideBar/Drafts/Caption": {
            "title": "$:/language/SideBar/Drafts/Caption",
            "text": "Черновики"
        },
        "$:/language/SideBar/Missing/Caption": {
            "title": "$:/language/SideBar/Missing/Caption",
            "text": "Отсутствующие"
        },
        "$:/language/SideBar/More/Caption": {
            "title": "$:/language/SideBar/More/Caption",
            "text": "Ещё"
        },
        "$:/language/SideBar/Open/Caption": {
            "title": "$:/language/SideBar/Open/Caption",
            "text": "Открытые"
        },
        "$:/language/SideBar/Orphans/Caption": {
            "title": "$:/language/SideBar/Orphans/Caption",
            "text": "Потерянные"
        },
        "$:/language/SideBar/Recent/Caption": {
            "title": "$:/language/SideBar/Recent/Caption",
            "text": "Последние"
        },
        "$:/language/SideBar/Shadows/Caption": {
            "title": "$:/language/SideBar/Shadows/Caption",
            "text": "Встроенные"
        },
        "$:/language/SideBar/System/Caption": {
            "title": "$:/language/SideBar/System/Caption",
            "text": "Системные"
        },
        "$:/language/SideBar/Tags/Caption": {
            "title": "$:/language/SideBar/Tags/Caption",
            "text": "Метки"
        },
        "$:/language/SideBar/Tags/Untagged/Caption": {
            "title": "$:/language/SideBar/Tags/Untagged/Caption",
            "text": "без метки"
        },
        "$:/language/SideBar/Tools/Caption": {
            "title": "$:/language/SideBar/Tools/Caption",
            "text": "Инструменты"
        },
        "$:/language/SideBar/Types/Caption": {
            "title": "$:/language/SideBar/Types/Caption",
            "text": "Типы"
        },
        "$:/SiteSubtitle": {
            "title": "$:/SiteSubtitle",
            "text": "нелинейная личная сетевая записная книжка"
        },
        "$:/SiteTitle": {
            "title": "$:/SiteTitle",
            "text": "Моя ~TiddlyWiki"
        },
        "$:/language/TiddlerInfo/Advanced/Caption": {
            "title": "$:/language/TiddlerInfo/Advanced/Caption",
            "text": "Расширенные"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
            "text": "нет"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
            "text": "Сведения о плагине"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
            "text": "Плагин содержит следующие встроенные заметки:"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
            "text": "Встроенность"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
            "text": "Заметка <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> не является встроенной"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
            "text": "Она переопределена обычной заметкой"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
            "text": "Заметка <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> является встроенной"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
            "text": "Она принадлежит плагину <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
        },
        "$:/language/TiddlerInfo/Fields/Caption": {
            "title": "$:/language/TiddlerInfo/Fields/Caption",
            "text": "Поля"
        },
        "$:/language/TiddlerInfo/List/Caption": {
            "title": "$:/language/TiddlerInfo/List/Caption",
            "text": "Список"
        },
        "$:/language/TiddlerInfo/List/Empty": {
            "title": "$:/language/TiddlerInfo/List/Empty",
            "text": "У этой заметки нет списка"
        },
        "$:/language/TiddlerInfo/Listed/Caption": {
            "title": "$:/language/TiddlerInfo/Listed/Caption",
            "text": "В списках"
        },
        "$:/language/TiddlerInfo/Listed/Empty": {
            "title": "$:/language/TiddlerInfo/Listed/Empty",
            "text": "Этой заметки нет в списках"
        },
        "$:/language/TiddlerInfo/References/Caption": {
            "title": "$:/language/TiddlerInfo/References/Caption",
            "text": "Ссылки"
        },
        "$:/language/TiddlerInfo/References/Empty": {
            "title": "$:/language/TiddlerInfo/References/Empty",
            "text": "Другие заметки не ссылаются на эту"
        },
        "$:/language/TiddlerInfo/Tagging/Caption": {
            "title": "$:/language/TiddlerInfo/Tagging/Caption",
            "text": "Отмеченные"
        },
        "$:/language/TiddlerInfo/Tagging/Empty": {
            "title": "$:/language/TiddlerInfo/Tagging/Empty",
            "text": "Нет заметок, отмеченных этой"
        },
        "$:/language/TiddlerInfo/Tools/Caption": {
            "title": "$:/language/TiddlerInfo/Tools/Caption",
            "text": "Инструменты"
        },
        "$:/language/Docs/Types/application/javascript": {
            "title": "$:/language/Docs/Types/application/javascript",
            "description": "JavaScript code",
            "name": "application/javascript",
            "group": "Разработка"
        },
        "$:/language/Docs/Types/application/json": {
            "title": "$:/language/Docs/Types/application/json",
            "description": "JSON data",
            "name": "application/json",
            "group": "Разработка"
        },
        "$:/language/Docs/Types/application/x-tiddler-dictionary": {
            "title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
            "description": "Data dictionary",
            "name": "application/x-tiddler-dictionary",
            "group": "Разработка"
        },
        "$:/language/Docs/Types/image/gif": {
            "title": "$:/language/Docs/Types/image/gif",
            "description": "GIF изображение",
            "name": "image/gif",
            "group": "Изображение"
        },
        "$:/language/Docs/Types/image/jpeg": {
            "title": "$:/language/Docs/Types/image/jpeg",
            "description": "JPEG изображение",
            "name": "image/jpeg",
            "group": "Изображение"
        },
        "$:/language/Docs/Types/image/png": {
            "title": "$:/language/Docs/Types/image/png",
            "description": "PNG изображение",
            "name": "image/png",
            "group": "Изображение"
        },
        "$:/language/Docs/Types/image/svg+xml": {
            "title": "$:/language/Docs/Types/image/svg+xml",
            "description": "SVG изображение",
            "name": "image/svg+xml",
            "group": "Изображение"
        },
        "$:/language/Docs/Types/image/x-icon": {
            "title": "$:/language/Docs/Types/image/x-icon",
            "description": "ICO значок",
            "name": "image/x-icon",
            "group": "Изображение"
        },
        "$:/language/Docs/Types/text/css": {
            "title": "$:/language/Docs/Types/text/css",
            "description": "Static stylesheet",
            "name": "text/css",
            "group": "Разработка"
        },
        "$:/language/Docs/Types/text/html": {
            "title": "$:/language/Docs/Types/text/html",
            "description": "HTML разметка",
            "name": "text/html",
            "group": "Текст"
        },
        "$:/language/Docs/Types/text/plain": {
            "title": "$:/language/Docs/Types/text/plain",
            "description": "Обычный текст",
            "name": "text/plain",
            "group": "Текст"
        },
        "$:/language/Docs/Types/text/vnd.tiddlywiki": {
            "title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
            "description": "TiddlyWiki 5",
            "name": "text/vnd.tiddlywiki",
            "group": "Текст"
        },
        "$:/language/Docs/Types/text/x-tiddlywiki": {
            "title": "$:/language/Docs/Types/text/x-tiddlywiki",
            "description": "TiddlyWiki Classic",
            "name": "text/x-tiddlywiki",
            "group": "Текст"
        },
        "$:/languages/ru-RU/icon": {
            "title": "$:/languages/ru-RU/icon",
            "type": "image/svg+xml",
            "text": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 9 6\" width=\"900\" height=\"600\">\n<rect width=\"9\" height=\"6\" fill=\"#D52B1E\"/>\n<rect width=\"9\" height=\"4\" fill=\"#0039A6\"/>\n<rect width=\"9\" height=\"2\" fill=\"#FFF\"/>\n<path d=\"m0,0h9v6H0z\" stroke=\"#a0a0a0\" stroke-width=\".1\" fill=\"none\"/>\n</svg>"
        }
    }
}
$:/jd/palette/Neonize
alert-background: #9d7d00
alert-border: #8e7924
alert-highlight: #881122
alert-muted-foreground: #b99e2f
background: #000000
blockquote-bar: <<colour muted-foreground>>
button-background: #4c4c4c
button-foreground: #ffbf00
button-border: #666666
code-background: #4c4c4c
code-border: #ffbf00
code-foreground: #fdf3d9
dirty-indicator: #ff0000
download-background: #34c734
download-foreground: <<colour foreground>>
dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>>
dropdown-background: <<colour background>>
dropdown-border: <<colour muted-foreground>>
dropdown-tab-background-selected: #ffffff
dropdown-tab-background: #ececec
dropzone-background: rgba(0,200,0,0.7)
external-link-background-hover: inherit
external-link-background-visited: inherit
external-link-background: inherit
external-link-foreground-hover: inherit
external-link-foreground-visited: #ff0000
external-link-foreground: #ffbf00
foreground: #ffdfaa
message-background: #ecf2ff
message-border: #cfd6e6
message-foreground: #547599
modal-backdrop: <<colour pre-background>>
modal-background: <<colour background>>
modal-border: #999999
modal-footer-background: <<colour muted-background>>
modal-footer-border: #dddddd
modal-header-border: #eeeeee
muted-foreground: #Ffbf00
notification-background: <<colour pre-background>>
notification-border: #999999
page-background: #000000
pre-background: #69010e
pre-border: #cccccc
primary: #5778b8
sidebar-button-foreground: #Ffbf00
sidebar-controls-foreground-hover: <<colour sidebar-button-foreground>>
sidebar-controls-foreground: #aaaaaa
sidebar-foreground-shadow: 
sidebar-foreground: #ffbf00
sidebar-muted-foreground-hover: #444444
sidebar-muted-foreground: #c0c0c0
sidebar-tab-background-selected: #ffbf00
sidebar-tab-background: #604800
sidebar-tab-border-selected: <<colour tab-border-selected>>
sidebar-tab-border: #ab0318
sidebar-tab-divider: #ab0318
sidebar-tab-foreground-selected: #000000
sidebar-tab-foreground: #ffd964
sidebar-tiddler-link-foreground-hover: #464646
sidebar-tiddler-link-foreground: #ffbf00
site-title-foreground: #ffca95
static-alert-foreground: #aaaaaa
tab-background-selected: #ffbf00
tab-background: #604800
tab-border-selected: #ffbf00
tab-border: #ff9b6a
tab-divider: #ff9b6a
tab-foreground-selected: #000000
tab-foreground: #ffd964
table-border: #ab0318
table-footer-background: #a8a8a8
table-header-background: #710210
tag-background: #ec6
tag-foreground: #ffffff
tiddler-background: <<colour background>>
tiddler-border: #b08500
tiddler-controls-foreground-hover: <<colour sidebar-button-foreground>>
tiddler-controls-foreground-selected: #2d2d2d
tiddler-controls-foreground: <<colour tiddler-border>>
tiddler-editor-background: #b08500
tiddler-editor-border-image: #ffffff
tiddler-editor-border: #cccccc
tiddler-editor-fields-even: #85a585
tiddler-editor-fields-odd: #5f815f
tiddler-info-background: #710210
tiddler-info-border: #dddddd
tiddler-info-tab-background: #f8f8f8
tiddler-link-background: <<colour background>>
tiddler-link-foreground: #fe9901
tiddler-subtitle-foreground: #ffbf00
tiddler-title-foreground: <<colour site-title-foreground>>
toolbar-new-button: 
toolbar-options-button: 
toolbar-save-button: 
toolbar-info-button: 
toolbar-edit-button: 
toolbar-close-button: 
toolbar-delete-button: 
toolbar-cancel-button: 
toolbar-done-button: 
untagged-background: #999999
very-muted-foreground: #888888
alert-background: #ffe476
alert-border: #b99e2f
alert-highlight: #881122
alert-muted-foreground: #b99e2f
background: #ffffff
blockquote-bar: <<colour muted-foreground>>
button-background: 
button-foreground: 
button-border: 
code-background: #f7f7f9
code-border: #e1e1e8
code-foreground: #dd1144
dirty-indicator: #ff0000
download-background: #34c734
download-foreground: <<colour background>>
dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>>
dropdown-background: <<colour background>>
dropdown-border: <<colour muted-foreground>>
dropdown-tab-background-selected: #fff
dropdown-tab-background: #ececec
dropzone-background: rgba(0,200,0,0.7)
external-link-background-hover: inherit
external-link-background-visited: inherit
external-link-background: inherit
external-link-foreground-hover: inherit
external-link-foreground-visited: #0000aa
external-link-foreground: #0000ee
foreground: #333333
message-background: #ecf2ff
message-border: #cfd6e6
message-foreground: #547599
modal-backdrop: <<colour foreground>>
modal-background: <<colour background>>
modal-border: #999999
modal-footer-background: #f5f5f5
modal-footer-border: #dddddd
modal-header-border: #eeeeee
muted-foreground: #bbb
notification-background: #ffffdd
notification-border: #999999
page-background: #f4f4f4
pre-background: #f5f5f5
pre-border: #cccccc
primary: #5778d8
sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #000000
sidebar-controls-foreground: #aaaaaa
sidebar-foreground-shadow: #000000
sidebar-foreground: #acacac
sidebar-muted-foreground-hover: #444444
sidebar-muted-foreground: #c0c0c0
sidebar-tab-background-selected: #f4f4f4
sidebar-tab-background: #e0e0e0
sidebar-tab-border-selected: <<colour tab-border-selected>>
sidebar-tab-border: <<colour tab-border>>
sidebar-tab-divider: #e4e4e4
sidebar-tab-foreground-selected: 
sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #444444
sidebar-tiddler-link-foreground: #999999
site-title-foreground: <<colour tiddler-title-foreground>>
static-alert-foreground: #aaaaaa
tab-background-selected: #ffffff
tab-background: #d8d8d8
tab-border-selected: #d8d8d8
tab-border: #cccccc
tab-divider: #d8d8d8
tab-foreground-selected: <<colour tab-foreground>>
tab-foreground: #666666
table-border: #dddddd
table-footer-background: #a8a8a8
table-header-background: #f0f0f0
tag-background: #ec6
tag-foreground: #ffffff
tiddler-background: <<colour background>>
tiddler-border: <<colour background>>
tiddler-controls-foreground-hover: #888888
tiddler-controls-foreground-selected: #444444
tiddler-controls-foreground: #cccccc
tiddler-editor-background: #f8f8f8
tiddler-editor-border-image: #ffffff
tiddler-editor-border: #cccccc
tiddler-editor-fields-even: #e0e8e0
tiddler-editor-fields-odd: #f0f4f0
tiddler-info-background: #f8f8f8
tiddler-info-border: #dddddd
tiddler-info-tab-background: #f8f8f8
tiddler-link-background: <<colour background>>
tiddler-link-foreground: <<colour primary>>
tiddler-subtitle-foreground: #c0c0c0
tiddler-title-foreground: #182955
toolbar-new-button: 
toolbar-options-button: 
toolbar-save-button: 
toolbar-info-button: 
toolbar-edit-button: 
toolbar-close-button: 
toolbar-delete-button: 
toolbar-cancel-button: 
toolbar-done-button: 
untagged-background: #999999
very-muted-foreground: #888888
{
    "tiddlers": {
        "$:/plugins/benwebber/dnd/Changelog": {
            "title": "$:/plugins/benwebber/dnd/Changelog",
            "text": "\\define unreleased() [[Unreleased|https://github.com/benwebber/tiddlywiki-dnd/compare/v$(latest)$..HEAD]]\n\\define issue(number) [[#$number$|https://github.com/benwebber/tiddlywiki-dnd/issues/$number$]]\n\\define release(version) [[$version$|https://github.com/benwebber/tiddlywiki-dnd/releases/tag/v$version$]]\n\n<$vars latest={{$:/plugins/benwebber/dnd!!version}}>\n\n! <<unreleased>>\n</$vars>\n\n! <<release 1.1.0>> (2019-02-15)\n\n!! Added\n\n* Added `dnd.attack` macro to typeset creature melee and ranged attacks.\n* Added `dnd.modifier` macro to calculate ability score modifiers independently.\n\n!! Changed\n\n* Make creature and spell tags configurable (<<issue 3>>).\n* Refactored localization code to work with core language switcher. Nearly all user-facing strings use this framework now (<<issue 2>>).\n\n!! Deprecated\n\n* Deprecated `dnd.dspell` and `dnd.fspell` in favour of a single template that determines the input tiddler's type. These templates will be removed in 2.0.0.\n* Deprecated `dnd.dstatblock` and `dnd.fstatblock` in favour of a single template that determines the input tiddler's type. These templates will be removed in 2.0.0.\n\n!! Fixed\n\n* `dnd.check` macro supports skills with spaces in the name (Animal Handling and Sleight of Hand).\n* Macros which expect boolean values now only consider the string \"true\" true (<<issue 5>>).\n\n! <<release 1.0.0>> (2018-08-31)\n\n!! Added\n\n* Added English (UK) and English (US) translations.\n* Added D&D icon from Font Awesome to plugin info block.\n* Set up Jest test harness, Travis CI, and Codecov.\n* Added creature view template.\n* Added spell macros, templates, and view templates.\n* Added toolbar buttons to create new creatures and spells.\n* Added modal update form for creatures and spells.\n\n!! Changed\n\n* Moved macro functionality to testable library.\n* Ported to ~TypeScript.\n* Store creature attributes as tiddler field values by default.\n\n!! Fixed\n\n* Use proper minus sign for ability/roll modifiers.\n* `dnd.average`: Pass through unrecognized roll expressions (support arbitrary values).\n\n! <<release 0.1.0>> (2018-07-31)\n\nInitial release.\n"
        },
        "$:/plugins/benwebber/dnd/License": {
            "title": "$:/plugins/benwebber/dnd/License",
            "text": "!! MIT License\n\nCopyright (c) 2018 Ben Webber\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
        },
        "$:/plugins/benwebber/dnd/README": {
            "title": "$:/plugins/benwebber/dnd/README",
            "text": "Manage //Dungeons & Dragons// campaigns with [[TiddlyWiki|https://tiddlywiki.com]].\n\n! Install\n\n[[Manually install|https://tiddlywiki.com/#Manually%20installing%20a%20plugin]] the plugin by dragging this link to your ~TiddlyWiki:\n\n<$list\n  filter=\"[<transclusion>prefix[{$:/plugins/benwebber/dnd/README|$:/plugins/benwebber/dnd/README|||}]]\"\n  emptyMessage=\"[[$:/plugins/benwebber/dnd]]\"\n>\n{{$:/plugins/benwebber/dnd||$:/core/ui/Components/plugin-info}}\n</$list>\n\nThen save and refresh your ~TiddlyWiki.\n\n! Quick Start\n\n!! Create a new creature\n\n<!-- Set variables to render button as it appears in the toolbar. -->\n<$vars tv-config-toolbar-text=\"yes\" tv-config-toolbar-class=\"\">\nEnable the {{$:/plugins/benwebber/dnd/ui/Buttons/new-creature}} tool to create new creature tiddlers with a single click.\n</$vars>\n\nSee [[Goblin]] as an example.\n\n!! Create a new spell\n\n<!-- Set variables to render button as it appears in the toolbar. -->\n<$vars tv-config-toolbar-text=\"yes\" tv-config-toolbar-class=\"\">\nEnable the {{$:/plugins/benwebber/dnd/ui/Buttons/new-spell}} tool to create new spell tiddlers with a single click.\n</$vars>\n\nSee [[Alarm]] as an example.\n\n! Configuration\n\nNavigate to the plugin info tiddler ([[$:/plugins/benwebber/dnd]]), then go to the ''Settings'' tab.\n\n! Macros\n\n!! `dnd.ability`\n\nRenders an [[ability score|https://roll20.net/compendium/dnd5e/Ability%20Scores]] with its calculated modifier.\n\n|! Call|! Output|\n|`<<dnd.ability 8>>`|<<dnd.ability 8>>|\n|`<<dnd.ability 10>>`|<<dnd.ability 10>>|\n|`<<dnd.ability 15>>`|<<dnd.ability 15>>|\n|`<<dnd.ability 20>>`|<<dnd.ability 20>>|\n\n!! `dnd.attack`\n\nRenders creature attacks.\n\n!!! Attack and damage types\n\nAttack types and damage types are localized strings.\n\nTo specify an attack's type, use the following values:\n\n|! Value|! Attack Type|\n|`melee`|<<dnd._lingo StatBlock/Action/Melee>>|\n|`ranged`|<<dnd._lingo StatBlock/Action/Ranged>>|\n|`both`|<<dnd._lingo StatBlock/Action/MeleeOrRanged>>|\n\nSimilarly, to specify an attack's damage type, use its English name.\n\n|! Value|! Damage Type|\n|`acid`|<<dnd._lingo Damage/Type/Acid>>|\n|`bludgeoning`|<<dnd._lingo Damage/Type/Bludgeoning>>|\n|`cold`|<<dnd._lingo Damage/Type/Cold>>|\n|`fire`|<<dnd._lingo Damage/Type/Fire>>|\n|`force`|<<dnd._lingo Damage/Type/Force>>|\n|`lightning`|<<dnd._lingo Damage/Type/Lightning>>|\n|`necrotic`|<<dnd._lingo Damage/Type/Necrotic>>|\n|`piercing`|<<dnd._lingo Damage/Type/Piercing>>|\n|`poison`|<<dnd._lingo Damage/Type/Poison>>|\n|`psychic`|<<dnd._lingo Damage/Type/Psychic>>|\n|`radiant`|<<dnd._lingo Damage/Type/Radiant>>|\n|`slashing`|<<dnd._lingo Damage/Type/Slashing>>|\n|`thunder`|<<dnd._lingo Damage/Type/Thunder>>|\n\n!!! Simple melee, ranged, or melee and ranged attacks\n\n```\n<<dnd.attack\n  name:\"Rapier\"\n  type:melee\n  bonus:\"+3\"\n  reach:\"5 ft.\"\n  damage:\"1d8+1\"\n  damageType:piercing\n>>\n```\n\n<<dnd.attack name:\"Rapier\" type:melee bonus:\"+3\" reach:\"5 ft.\" damage:\"1d8+1\" damageType:piercing>>\n\n```\n<<dnd.attack\n  name:\"Heavy Crossbow\"\n  type:ranged\n  bonus:\"+2\"\n  range:\"100/400 ft.\"\n  damage:\"1d10\"\n  damageType:piercing\n>>\n```\n\n<<dnd.attack name:\"Heavy Crossbow\" type:ranged bonus:\"+2\" range:\"100/400 ft.\" damage:\"1d10\" damageType:piercing>>\n\n```\n<<dnd.attack\n  name:\"Dagger\"\n  type:both\n  bonus:\"+5\"\n  reach:\"5 ft.\"\n  range:\"20/60 ft.\"\n  damage:\"1d4+3\"\n  damageType:piercing\n>>\n```\n\n<<dnd.attack name:\"Dagger\" type:both bonus:\"+5\" reach:\"5 ft.\" range:\"20/60 ft.\" damage:\"1d4+3\" damageType:piercing>>\n\n!!! Attacks with extra damage\n\n```\n<<dnd.attack\n  name:\"Greatsword\"\n  type:melee\n  bonus:\"+15\"\n  reach:\"5 ft.\"\n  damage:\"4d6+8\"\n  damageType:\"slashing\"\n  extraDamage:\"6d8\"\n  extraDamageType:radiant\n>>\n```\n\n<<dnd.attack name:\"Greatsword\" type:melee bonus:\"+15\" reach:\"5 ft.\" damage:\"4d6+8\" damageType:slashing extraDamage:\"6d8\" extraDamageType:radiant>>\n\n!!! Attacks with conditional damage\n\n```\n<<dnd.attack\n  name:\"Longsword\"\n  type:melee\n  bonus:\"+5\"\n  reach:\"5 ft.\"\n  damage:\"1d8+3\"\n  damageType:slashing\n  condDamage:\"1d10+3\"\n  condDamageType:slashing\n  when:\"if used with two hands\"\n>>\n```\n\n<<dnd.attack name:\"Longsword\" type:melee bonus:\"+5\" reach:\"5 ft.\" damage:\"1d8+3\" damageType:slashing condDamage:\"1d10+3\" condDamageType:slashing when:\"if used with two hands\">>\n\n```\n<<dnd.attack\n  name:\"Longsword\"\n  type:melee\n  bonus:\"+5\"\n  reach:\"5 ft.\"\n  damage:\"1d8+3\"\n  damageType:slashing\n  extraDamage:\"1d4\"\n  extraDamage:fire\n  condDamage:\"1d10+3\"\n  condDamageType:slashing\n  extraCondDamage:\"1d4\"\n  extraCondDamage:fire\n  when:\"if used with two hands\"\n>>\n```\n\n<<dnd.attack name:\"Longsword\" type:melee bonus:\"+5\" reach:\"5 ft.\" damage:\"1d8+3\" damageType:slashing extraDamage:\"1d4\" extraDamageType:fire condDamage:\"1d10+3\" condDamageType:slashing extraCondDamage:\"1d4\" extraCondDamageType:fire when:\"if used with two hands\">>\n\n!!! Attacks with extra effects\n\n```\n<<dnd.attack\n  name:\"Light Crossbow\"\n  type:ranged\n  bonus:\"+6\"\n  range:\"80/320 ft.\"\n  damage:\"1d8+3\"\n  damageType:piercing\n  effect:\"and the target must make a DC 15 Constitution saving throw, taking 24 (7d6) poison damage on a failed save, or half as much damage on a successful one\"\n>>\n```\n\n<<dnd.attack name:\"Light Crossbow\" type:ranged bonus:\"+6\" range:\"80/320 ft.\" damage:\"1d8+3\" damageType:piercing effect:\"and the target must make a DC 15 Constitution saving throw, taking 24 (7d6) poison damage on a failed save, or half as much damage on a successful one\">>\n\n!!! Attacks with special targets\n\n```\n<<dnd.attack\n  name:\"Dagger\"\n  type:both\n  bonus:\"+4\"\n  reach:\"5 ft.\"\n  range:\"20/60 ft.\"\n  target:\"one creature\"\n  damage:\"1d4+2\"\n  damageType:piercing\n>>\n```\n\n<<dnd.attack name:\"Dagger\" type:both bonus:\"+4\" reach:\"5 ft.\" range:\"20/60 ft.\" target:\"one creature\" damage:\"1d4+2\" damageType:piercing>>\n\n!! `dnd.average`\n\nCalculates the average result of the specified roll.\n\n|! Call|! Output|\n|`<<dnd.average d8>>`|<<dnd.average d8>>|\n|`<<dnd.average 2d8>>`|<<dnd.average 2d8>>|\n|`<<dnd.average 2d8+2>>`|<<dnd.average 2d8+2>>|\n|`<<dnd.average 2d8-2>>`|<<dnd.average 2d8-2>>|\n|`<<dnd.average \"2d8 + 2\">>`|<<dnd.average \"2d8 + 2\">>|\n|`<<dnd.average \"2d8 - 2\">>`|<<dnd.average \"2d8 - 2\">>|\n\n!! `dnd.check`\n\nTypeset an ability check, optionally including a skill and/or DC.\nThis macro is not case-sensitive.\n\nThe macro matches English abbreviations of the ability names:\n\n| Ability | Code |h\n|<<dnd._lingo Ability/STR>> |`str` |\n|<<dnd._lingo Ability/DEX>> |`dex` |\n|<<dnd._lingo Ability/CON>> |`con` |\n|<<dnd._lingo Ability/INT>> |`int` |\n|<<dnd._lingo Ability/WIS>> |`wis` |\n|<<dnd._lingo Ability/CHA>> |`cha` |\n\nIt matches English skill names by least ambiguous prefix.\nFor example, `perc`, `perf`, and `pers` for Perception, Performance, and Persuasion, respectively.\n\n| Skill | Least Ambiguous Prefix |h\n|<<dnd._lingo Skill/Acrobatics>> |`ac` |\n|<<dnd._lingo Skill/AnimalHandling>> |`an` |\n|<<dnd._lingo Skill/Arcana>> |`ar` |\n|<<dnd._lingo Skill/Athletics>> |`at` |\n|<<dnd._lingo Skill/Deception>> |`d` |\n|<<dnd._lingo Skill/History>> |`h` |\n|<<dnd._lingo Skill/Insight>> |`ins` |\n|<<dnd._lingo Skill/Intimidation>> |`int` |\n|<<dnd._lingo Skill/Investigation>> |`inv` |\n|<<dnd._lingo Skill/Medicine>> |`m` |\n|<<dnd._lingo Skill/Nature>> |`n` |\n|<<dnd._lingo Skill/Perception>> |`perc` |\n|<<dnd._lingo Skill/Performance>> |`perf` |\n|<<dnd._lingo Skill/Persuasion>> |`pers` |\n|<<dnd._lingo Skill/Religion>> |`r` |\n|<<dnd._lingo Skill/SleightOfHand>> |`sl` |\n|<<dnd._lingo Skill/Stealth>> |`st` |\n|<<dnd._lingo Skill/Survival>> |`su` |\n\nYou can also use the full skill name, such as `<<dnd.check dex acrobatics>>` or `<<dnd.check wis \"Animal Handling\">>`.\n\n| Call | Output |h\n|`<<dnd.check int>>` |<<dnd.check int>> |\n|`<<dnd.check int dc:15>>` |<<dnd.check int dc:15>> |\n|`<<dnd.check int inv>>` |<<dnd.check int inv>> |\n|`<<dnd.check int inv 18>>` |<<dnd.check int inv 18>> |\n|`<<dnd.check cha perf>>` |<<dnd.check cha perf>> |\n|`<<dnd.check cha pers>>` |<<dnd.check cha pers>> |\n|`<<dnd.check wis su>>` |<<dnd.check wis su>> |\n|`<<dnd.check wis surv>>` |<<dnd.check wis surv>> |\n|`<<dnd.check wis survival>>` |<<dnd.check wis survival>> |\n|`<<dnd.check wis animal>>` |<<dnd.check wis animal>> |\n|`<<dnd.check wis \"Animal Handling\">>` |<<dnd.check wis \"Animal Handling\">> |\n\nFinally, the macro supports unusual ability and skill combinations, such as asking a player to make a <<dnd.check str int>> check (`<<dnd.check str int>>`).\n\n!! `dnd.creature`\n\nHelper macro to create a standalone creature tiddler.\n\nThis macro uses the [[dnd.statblock|$:/plugins/benwebber/dnd/templates/dnd.statblock]] template and stores the creature's attributes as tiddler fields.\nIt also adds a convenient button to edit the stats.\n\nIt is ''not'' necessary to use this macro if you use the automatic view template.\n\n!! `dnd.modifier`\n\nCalculates the modifier for a given ability score.\n\nGenerally you will want to use `dnd.ability` instead.\n\n|! Call|! Output|\n|`<<dnd.modifier 8>>`|<<dnd.modifier 8>>|\n|`<<dnd.modifier 10>>`|<<dnd.modifier 10>>|\n|`<<dnd.modifier 15>>`|<<dnd.modifier 15>>|\n|`<<dnd.modifier 20>>`|<<dnd.modifier 20>>|\n\n!! `dnd.spell`\n\nHelper macro to create a standalone spell tiddler.\n\nThis macro uses the [[dnd.spell|$:/plugins/benwebber/dnd/templates/dnd.spell]] template and stores the spell's attributes as tiddler fields.\nIt also adds a convenient button to edit the attributes.\n\nIt is ''not'' necessary to use this macro if you use the automatic view template.\n\n!! `dnd.statblock`\n\nRender a creature stat block.\nThis is a low-level macro.\nYou may want to use the automatic view template instead (see below).\n\n!!! Notes\n\n* Ability scores default to <<dnd.ability 10>>.\n* If not set, `language` defaults to `---`.\n\n```\n<<dnd.statblock\nsize: small\ntype: humanoid\ntags: goblinoid\nalignment: \"neutral evil\"\nac: \"15 (leather armor, shield)\"\nhp: 2d6\nspeed: \"30 ft.\"\nstr: 8\ndex: 14\nwis: 8\ncha: 8\nskills: \"Stealth +6\"\nsenses: \"darkvision 60 ft., passive Perception 9\"\nlanguages: \"Common, Goblin\"\nchallenge: 1/4\n>>\n```\n\n<$reveal type=\"nomatch\" state=\"!!dnd.statblock.state\" text=\"show\">\n\n<$button set=\"!!dnd.statblock.state\" setTo=\"show\">Show</$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"!!dnd.statblock.state\" text=\"show\">\n\n<$button set=\"!!dnd.statblock.state\" setTo=\"hide\">Hide</$button>\n\n<<dnd.statblock\nsize: small\ntype: humanoid\ntags: goblinoid\nalignment: \"neutral evil\"\nac: \"15 (leather armor, shield)\"\nhp: 2d6\nspeed: \"30 ft.\"\nstr: 8\ndex: 14\nwis: 8\ncha: 8\nskills: \"Stealth +6\"\nsenses: \"darkvision 60 ft., passive Perception 9\"\nlanguages: \"Common, Goblin\"\nchallenge: 1/4\n>>\n\n</$reveal>\n\n!! `dnd.xp`\n\nRenders experience points (XP) for the given challenge rating (CR).\n\n!!! Standard challenge ratings\n\n| Call | Output |h\n|`<<dnd.xp 0>>`|<<dnd.xp 0>>|\n|`<<dnd.xp 0 10>>`|<<dnd.xp 0 10>>|\n|`<<dnd.xp 1/2>>`|<<dnd.xp 1/2>>|\n|`<<dnd.xp 5>>`|<<dnd.xp 5>>|\n\n!!! Custom challenge ratings\n\n| Call | Output |h\n|`<<dnd.xp 40>>` |<<dnd.xp 40>>|\n|`<<dnd.xp 40 255555>>` |<<dnd.xp 40 255555>>|\n|`<<dnd.xp unknown>>`|<<dnd.xp unknown>>|\n\n! View Templates\n\n~TiddlyWiki view templates automatically inject content into tiddlers that match certain criteria.\nFor example, you might use a view template to style all tiddlers with a certain tag.\n\nThis plugin ships with two view templates:\n\n|! Template |! Description |! Example |\n|`spell` |Automatically render a spell description for all tiddlers tagged <$link to={{$:/plugins/benwebber/dnd/config/Tags/Spells}}>{{$:/plugins/benwebber/dnd/config/Tags/Spells}}</$link>. |[[Alarm]] |\n|`statblock` |Automatically render a stat block for all tiddlers tagged <$link to={{$:/plugins/benwebber/dnd/config/Tags/Creatures}}>{{$:/plugins/benwebber/dnd/config/Tags/Creatures}}</$link>. |[[Goblin]] |\n\nBoth templates are enabled by default.\nTo disable them and use the equivalent macros manually, navigate to the [[plugin settings tiddler|$:/plugins/benwebber/dnd]].\n"
        },
        "$:/plugins/benwebber/dnd/Settings": {
            "title": "$:/plugins/benwebber/dnd/Settings",
            "icon": "$:/core/images/options-button",
            "text": "\\define render-boolean(key)\n<$checkbox tiddler=\"$:/plugins/benwebber/dnd/config/$key$\" field=\"text\" checked=\"true\" unchecked=\"false\" default=\"true\" />\n\\end\n\n\\define edit-setting(key)\n<$edit-text tiddler=\"$:/plugins/benwebber/dnd/config/$key$\" field=\"text\" tag=\"input\" />\n\\end\n\n|<<dnd._lingo Settings/Version>> |{{$:/plugins/benwebber/dnd!!version}} |\n|<<dnd._lingo Settings/CreatureTag>> |<<edit-setting \"Tags/Creatures\">> |\n|<<dnd._lingo Settings/SpellTag>> |<<edit-setting \"Tags/Spells\">> |\n|<<dnd._lingo Settings/RenderCreatures>> | <<render-boolean \"ViewTemplates/StatBlock\">> |\n|<<dnd._lingo Settings/RenderSpells>> | <<render-boolean \"ViewTemplates/Spell\">> |\n"
        },
        "$:/plugins/benwebber/dnd/templates/dnd.dspell": {
            "title": "$:/plugins/benwebber/dnd/templates/dnd.dspell",
            "tags": "$:/plugins/benwebber/dnd/Tags/Deprecated",
            "text": "{{||$:/plugins/benwebber/dnd/templates/dnd.spell}}"
        },
        "$:/plugins/benwebber/dnd/templates/dnd.fspell": {
            "title": "$:/plugins/benwebber/dnd/templates/dnd.fspell",
            "tags": "$:/plugins/benwebber/dnd/Tags/Deprecated",
            "text": "{{||$:/plugins/benwebber/dnd/templates/dnd.spell}}"
        },
        "$:/plugins/benwebber/dnd/templates/dnd.dstatblock": {
            "title": "$:/plugins/benwebber/dnd/templates/dnd.dstatblock",
            "tags": "$:/plugins/benwebber/dnd/Tags/Deprecated",
            "text": "{{||$:/plugins/benwebber/dnd/templates/dnd.statblock}}"
        },
        "$:/plugins/benwebber/dnd/templates/dnd.fstatblock": {
            "title": "$:/plugins/benwebber/dnd/templates/dnd.fstatblock",
            "tags": "$:/plugins/benwebber/dnd/Tags/Deprecated",
            "text": "{{||$:/plugins/benwebber/dnd/templates/dnd.statblock}}"
        },
        "$:/plugins/benwebber/dnd/config/Tags/Creatures": {
            "title": "$:/plugins/benwebber/dnd/config/Tags/Creatures",
            "text": "Creatures"
        },
        "$:/plugins/benwebber/dnd/config/Tags/Spells": {
            "title": "$:/plugins/benwebber/dnd/config/Tags/Spells",
            "text": "Spells"
        },
        "$:/plugins/benwebber/dnd/config/ViewTemplates/StatBlock": {
            "title": "$:/plugins/benwebber/dnd/config/ViewTemplates/StatBlock",
            "text": "true"
        },
        "$:/plugins/benwebber/dnd/config/ViewTemplates/Spell": {
            "title": "$:/plugins/benwebber/dnd/config/ViewTemplates/Spell",
            "text": "true"
        },
        "$:/plugins/benwebber/dnd/dnd.js": {
            "text": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* tslint:disable:object-literal-sort-keys */\nvar CR_TO_XP = {\n    \"0\": 0,\n    \"1/8\": 25,\n    \"1/4\": 50,\n    \"1/2\": 100,\n    \"1\": 200,\n    \"2\": 450,\n    \"3\": 700,\n    \"4\": 1100,\n    \"5\": 1800,\n    \"6\": 2300,\n    \"7\": 2900,\n    \"8\": 3900,\n    \"9\": 5000,\n    \"10\": 5900,\n    \"11\": 7200,\n    \"12\": 8400,\n    \"13\": 10000,\n    \"14\": 11500,\n    \"15\": 13000,\n    \"16\": 15000,\n    \"17\": 18000,\n    \"18\": 20000,\n    \"19\": 22000,\n    \"20\": 25000,\n    \"21\": 33000,\n    \"22\": 41000,\n    \"23\": 50000,\n    \"24\": 62000,\n    \"25\": 75000,\n    \"26\": 90000,\n    \"27\": 105000,\n    \"28\": 120000,\n    \"29\": 135000,\n    \"30\": 155000,\n};\n/* tslint:enable */\nvar SKILL_CODES_TO_CAPTIONS = {\n    ac: \"Acrobatics\",\n    an: \"AnimalHandling\",\n    ar: \"Arcana\",\n    at: \"Athletics\",\n    d: \"Deception\",\n    h: \"History\",\n    ins: \"Insight\",\n    int: \"Intimidation\",\n    inv: \"Investigation\",\n    m: \"Medicine\",\n    n: \"Nature\",\n    perc: \"Perception\",\n    perf: \"Performance\",\n    pers: \"Persuasion\",\n    r: \"Religion\",\n    sl: \"SleightOfHand\",\n    st: \"Stealth\",\n    su: \"Survival\",\n};\nvar ABILITY_REGEX = /^(STR|DEX|CON|INT|WIS|CHA).*/i;\nvar SKILL_REGEX = new RegExp(\"^(\" + Object.keys(SKILL_CODES_TO_CAPTIONS).join(\"|\") + \").*\", \"i\");\nvar AttackType;\n(function (AttackType) {\n    AttackType[AttackType[\"Melee\"] = 0] = \"Melee\";\n    AttackType[AttackType[\"Ranged\"] = 1] = \"Ranged\";\n    AttackType[AttackType[\"MeleeOrRanged\"] = 2] = \"MeleeOrRanged\";\n})(AttackType = exports.AttackType || (exports.AttackType = {}));\nvar DamageType;\n(function (DamageType) {\n    DamageType[\"Acid\"] = \"<<dnd._lingo Damage/Type/Acid>>\";\n    DamageType[\"Bludgeoning\"] = \"<<dnd._lingo Damage/Type/Bludgeoning>>\";\n    DamageType[\"Cold\"] = \"<<dnd._lingo Damage/Type/Cold>>\";\n    DamageType[\"Fire\"] = \"<<dnd._lingo Damage/Type/Fire>>\";\n    DamageType[\"Force\"] = \"<<dnd._lingo Damage/Type/Force>>\";\n    DamageType[\"Lightning\"] = \"<<dnd._lingo Damage/Type/Lightning>>\";\n    DamageType[\"Necrotic\"] = \"<<dnd._lingo Damage/Type/Necrotic>>\";\n    DamageType[\"Piercing\"] = \"<<dnd._lingo Damage/Type/Piercing>>\";\n    DamageType[\"Poison\"] = \"<<dnd._lingo Damage/Type/Poison>>\";\n    DamageType[\"Psychic\"] = \"<<dnd._lingo Damage/Type/Psychic>>\";\n    DamageType[\"Radiant\"] = \"<<dnd._lingo Damage/Type/Radiant>>\";\n    DamageType[\"Slashing\"] = \"<<dnd._lingo Damage/Type/Slashing>>\";\n    DamageType[\"Thunder\"] = \"<<dnd._lingo Damage/Type/Thunder>>\";\n})(DamageType = exports.DamageType || (exports.DamageType = {}));\nvar Spell = /** @class */ (function () {\n    function Spell(level, school, cast, ritual, range, verbal, somatic, material, duration) {\n        this.level = level;\n        this.school = school;\n        this.cast = cast;\n        this.ritual = ritual;\n        this.range = range;\n        this.verbal = verbal;\n        this.somatic = somatic;\n        this.material = material;\n        this.duration = duration;\n    }\n    Object.defineProperty(Spell.prototype, \"isCantrip\", {\n        get: function () {\n            return !isNaN(this.level) && this.level === 0;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Spell.prototype.render = function () {\n        var descriptionLevel = Number.isNaN(this.level) ? \"\" : this.level;\n        var output = [\n            \"//<<dnd._spellDescription level:\\\"\" + descriptionLevel + \"\\\" school:\\\"\" + this.school + \"\\\" ritual:\\\"\" + this.ritual + \"\\\">>//\",\n            \"\",\n        ];\n        var componentFragments = [];\n        if (this.verbal) {\n            componentFragments.push(\"<<dnd._lingo Spell/Verbal>>\");\n        }\n        if (this.somatic) {\n            componentFragments.push(\"<<dnd._lingo Spell/Somatic>>\");\n        }\n        if (this.material) {\n            componentFragments.push(\"<<dnd._lingo Spell/Material>> (\" + this.material + \")\");\n        }\n        var components = componentFragments.join(\", \");\n        var fields = [\n            { caption: \"Spell/CastingTime\", value: this.cast },\n            { caption: \"Spell/Range\", value: this.range },\n            { caption: \"Spell/Components\", value: components },\n            { caption: \"Spell/Duration\", value: this.duration },\n        ];\n        output = output.concat(renderFields(fields, true));\n        output.push(\"\");\n        return output.join(\"\\n\");\n    };\n    return Spell;\n}());\nexports.Spell = Spell;\nvar StatBlock = /** @class */ (function () {\n    function StatBlock(size, type, alignment, ac, hp, speed, str, dex, con, int, wis, cha, senses, languages, challenge, tags, saves, skills, dimm, dres, dvul, cimm, cres, cvul) {\n        this.size = size;\n        this.type = type;\n        this.alignment = alignment;\n        this.ac = ac;\n        this.hp = hp;\n        this.speed = speed;\n        this.str = str;\n        this.dex = dex;\n        this.con = con;\n        this.int = int;\n        this.wis = wis;\n        this.cha = cha;\n        this.senses = senses;\n        this.languages = languages;\n        this.challenge = challenge;\n        this.tags = tags;\n        this.saves = saves;\n        this.skills = skills;\n        this.dimm = dimm;\n        this.dres = dres;\n        this.dvul = dvul;\n        this.cimm = cimm;\n        this.cres = cres;\n        this.cvul = cvul;\n    }\n    Object.defineProperty(StatBlock.prototype, \"description\", {\n        get: function () {\n            // TODO: Translate stored size, type values in description.\n            var descriptionFragments = [this.size, this.type];\n            if (this.tags) {\n                descriptionFragments.push(this.renderTags(this.tags));\n            }\n            var description = descriptionFragments.join(\" \").trim();\n            if (this.alignment) {\n                description = description + \", \" + this.alignment;\n            }\n            return description;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    StatBlock.prototype.render = function () {\n        var output = [\n            \"//\" + capitalize(this.description) + \"//\",\n            \"\",\n        ];\n        var fields = [\n            { caption: \"StatBlock/AC\", value: this.ac },\n            { caption: \"StatBlock/HP\", value: average(this.hp) },\n            { caption: \"StatBlock/Speed\", value: this.speed },\n        ];\n        output = output.concat(renderFields(fields, true));\n        output.push(\"\");\n        output.push(\"---\");\n        var abilities = [\n            { caption: \"StatBlock/STR\", value: this.str },\n            { caption: \"StatBlock/DEX\", value: this.dex },\n            { caption: \"StatBlock/CON\", value: this.con },\n            { caption: \"StatBlock/INT\", value: this.int },\n            { caption: \"StatBlock/WIS\", value: this.wis },\n            { caption: \"StatBlock/CHA\", value: this.cha },\n        ];\n        output = output.concat(this.renderAbilities(abilities));\n        output.push(\"\");\n        output.push(\"---\");\n        fields = [\n            { caption: \"StatBlock/Saves\", value: this.saves },\n            { caption: \"StatBlock/Skills\", value: this.skills },\n            { caption: \"StatBlock/DamageImmunities\", value: this.dimm },\n            { caption: \"StatBlock/DamageResistances\", value: this.dres },\n            { caption: \"StatBlock/DamageVulnerabilities\", value: this.dvul },\n            { caption: \"StatBlock/ConditionImmunities\", value: this.cimm },\n            { caption: \"StatBlock/ConditionResistances\", value: this.cres },\n            { caption: \"StatBlock/ConditionVulnerabilities\", value: this.cvul },\n        ];\n        output = output.concat(renderFields(fields, false));\n        // Does the challenge field embed XP?\n        var challengeRegexp = /(\\d+)\\s+(\\d+)?/;\n        var challengeMatch = this.challenge.match(challengeRegexp);\n        var challengeMacro = \"<<dnd.xp \\\"\" + this.challenge + \"\\\">>\";\n        if (challengeMatch && challengeMatch[2]) {\n            challengeMacro = \"<<dnd.xp \\\"\" + challengeMatch[1] + \"\\\" \\\"\" + challengeMatch[2] + \"\\\">>\";\n        }\n        fields = [\n            { caption: \"StatBlock/Senses\", value: this.senses },\n            { caption: \"StatBlock/Languages\", value: this.languages },\n            { caption: \"StatBlock/Challenge\", value: challengeMacro },\n        ];\n        output = output.concat(renderFields(fields, true));\n        output.push(\"\");\n        output.push(\"---\");\n        return output.join(\"\\n\");\n    };\n    StatBlock.prototype.renderTags = function (tags) {\n        return tags ? \"(\" + tags + \")\" : \"\";\n    };\n    StatBlock.prototype.renderAbilities = function (abilities) {\n        return [\n            \"| \" + abilities.map(function (field) { return \"<<dnd._lingo \" + field.caption + \">>\"; }).join(\" | \") + \" |h\",\n            \"| \" + abilities.map(function (field) { return ability(field.value); }).join(\" | \") + \" |\",\n        ];\n    };\n    return StatBlock;\n}());\nexports.StatBlock = StatBlock;\nfunction ability(score) {\n    return score + \" (\" + modifier(score) + \")\";\n}\nexports.ability = ability;\nfunction modifier(score) {\n    var mod = Math.floor((score - 10) / 2);\n    var op = (mod >= 0) ? \"+\" : \"−\"; // minus sign (U+2212)\n    return \"\" + op + Math.abs(mod);\n}\nexports.modifier = modifier;\nfunction average(expr) {\n    var regexp = /(\\d+)?d(\\d+)\\s?(?:(-|\\+)\\s?(\\d+))?/i;\n    var match = expr.match(regexp);\n    if (!match) {\n        return expr;\n    }\n    var nDice = parseInt(match[1], 10) || 1;\n    var nSides = parseInt(match[2], 10);\n    var op = match[3];\n    var mod = parseInt(match[4], 10) || 0;\n    var avg;\n    if (!op) {\n        avg = Math.floor(nDice * (1 + nSides) / 2 + mod);\n        return avg + \" (\" + nDice + \"d\" + nSides + \")\";\n    }\n    if (op === \"+\") {\n        avg = Math.floor(nDice * (1 + nSides) / 2 + mod);\n    }\n    else {\n        op = \"−\";\n        avg = Math.floor(nDice * (1 + nSides) / 2 - mod);\n    }\n    return avg + \" (\" + nDice + \"d\" + nSides + \" \" + op + \" \" + mod + \")\";\n}\nexports.average = average;\nfunction capitalize(s) {\n    return s.charAt(0).toLocaleUpperCase() + s.slice(1);\n}\nexports.capitalize = capitalize;\n// tslint:disable-next-line:no-shadowed-variable\nfunction check(ability, skill, dc) {\n    var abilityMatch = ability.match(ABILITY_REGEX);\n    if (!abilityMatch) {\n        return \"\";\n    }\n    var abilityCode = abilityMatch[1].toLocaleUpperCase();\n    var fragments = [\"<<dnd._lingo Ability/\" + abilityCode + \">>\"];\n    if (skill) {\n        var skillMatch = skill.match(SKILL_REGEX);\n        if (skillMatch) {\n            var skillCode = skillMatch[1].toLocaleLowerCase();\n            fragments.push(\"(<<dnd._lingo Skill/\" + SKILL_CODES_TO_CAPTIONS[skillCode] + \">>)\");\n        }\n    }\n    if (dc) {\n        fragments.unshift(\"<<dnd._lingo Check/DC>> \" + dc);\n    }\n    return fragments.join(\" \");\n}\nexports.check = check;\nfunction renderFields(fields, alwaysRender) {\n    var output = [];\n    for (var _i = 0, fields_1 = fields; _i < fields_1.length; _i++) {\n        var field = fields_1[_i];\n        if (alwaysRender || field.value) {\n            output.push(\"|!<<dnd._lingo \" + field.caption + \">> |\" + field.value + \" |\");\n        }\n    }\n    return output;\n}\nfunction getXP(rating) {\n    rating = rating.replace(/['\"]/g, \"\");\n    return CR_TO_XP[rating];\n}\nexports.getXP = getXP;\nfunction hit(damage, damageType, extraDamage, extraDamageType, condDamage, condDamageType, extraCondDamage, extraCondDamageType, when, effect) {\n    var buffer = [\"//<<dnd._lingo StatBlock/Action/Hit>>://\"];\n    buffer.push(renderDamage(damage, damageType, extraDamage, extraDamageType));\n    var or = \"\";\n    if (condDamage && condDamageType && when) {\n        or = renderDamage(condDamage, condDamageType, extraCondDamage, extraCondDamageType) + \" \" + when;\n    }\n    var output = buffer.join(\" \");\n    if (or) {\n        output = output + \", <<dnd._lingo StatBlock/Action/Or>> \" + or;\n    }\n    if (effect) {\n        output = output + \", \" + effect;\n    }\n    return output + \".\";\n}\nexports.hit = hit;\nfunction renderDamage(damage, damageType, extraDamage, extraDamageType) {\n    var buffer = [\n        average(damage),\n        damageType,\n    ];\n    if (extraDamage && extraDamageType) {\n        buffer = buffer.concat([\n            \"<<dnd._lingo StatBlock/Action/Plus>>\",\n            average(extraDamage),\n            extraDamageType,\n        ]);\n    }\n    return buffer.join(\" \");\n}\nfunction weaponAttack(attackType, bonus, reach, range, target) {\n    var _a;\n    // tslint:disable max-line-length\n    var attackTypesToCaptions = (_a = {},\n        _a[AttackType.Melee] = {\n            attack: \"<<dnd._lingo StatBlock/Action/Melee>>\",\n            reachOrRange: \"<<dnd._lingo StatBlock/Action/Reach>> \" + reach,\n        },\n        _a[AttackType.Ranged] = {\n            attack: \"<<dnd._lingo StatBlock/Action/Ranged>>\",\n            reachOrRange: \"<<dnd._lingo StatBlock/Action/Range>> \" + range,\n        },\n        _a[AttackType.MeleeOrRanged] = {\n            attack: \"<<dnd._lingo StatBlock/Action/MeleeOrRanged>>\",\n            reachOrRange: \"<<dnd._lingo StatBlock/Action/Reach>> \" + reach + \" <<dnd._lingo StatBlock/Action/Or>> <<dnd._lingo StatBlock/Action/Range>> \" + range,\n        },\n        _a);\n    var captions = attackTypesToCaptions[attackType];\n    var output = [\n        \"//\" + captions.attack + \":// \" + bonus + \" <<dnd._lingo StatBlock/Action/ToHit>>\",\n        captions.reachOrRange,\n        target || \"<<dnd._lingo StatBlock/Action/DefaultTarget>>\",\n    ];\n    return output.join(\", \") + \".\";\n}\nexports.weaponAttack = weaponAttack;\n",
            "title": "$:/plugins/benwebber/dnd/dnd.js",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/plugins/benwebber/dnd/icon": {
            "title": "$:/plugins/benwebber/dnd/icon",
            "text": "<!--\nd-and-d-brands icon from FontAwesome\nLicensed under Creative Commons Attribution 4.0 International\nhttps://fontawesome.com/license\n-->\n<svg aria-hidden=\"true\" data-prefix=\"fab\" data-icon=\"d-and-d\" class=\"svg-inline--fa fa-d-and-d fa-w-18\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path fill=\"currentColor\" d=\"M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z\"></path></svg>\n"
        },
        "$:/plugins/benwebber/dnd/images/new-creature": {
            "title": "$:/plugins/benwebber/dnd/images/new-creature",
            "text": "<!--\n  user-plus-solid icon from FontAwesome\n  Licensed under Creative Commons Attribution 4.0 International\n  https://fontawesome.com/license\n\n  Modified by setting TiddlyWiki classes, height, and width.\n-->\n<svg aria-hidden=\"true\" data-prefix=\"fas\" data-icon=\"user-plus\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 512\" class=\"tc-image-new-image-button tc-image-button\" width=\"22pt\" height=\"22pt\"><path fill=\"currentColor\" d=\"M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"></path></svg>\n"
        },
        "$:/plugins/benwebber/dnd/images/new-spell": {
            "title": "$:/plugins/benwebber/dnd/images/new-spell",
            "text": "<!--\n  magic icon from FontAwesome\n  Licensed under Creative Commons Attribution 4.0 International\n  https://fontawesome.com/license\n\n  Modified by setting TiddlyWiki classes, height, and width.\n-->\n<svg aria-hidden=\"true\" data-prefix=\"fas\" data-icon=\"magic\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" class=\"tc-image-new-image-button tc-image-button\" width=\"22pt\" height=\"22pt\"><path fill=\"currentColor\" d=\"M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z\"></path></svg>\n"
        },
        "$:/plugins/benwebber/dnd/language/Ability/STR": {
            "title": "$:/plugins/benwebber/dnd/language/Ability/STR",
            "text": "Strength"
        },
        "$:/plugins/benwebber/dnd/language/Ability/DEX": {
            "title": "$:/plugins/benwebber/dnd/language/Ability/DEX",
            "text": "Dexterity"
        },
        "$:/plugins/benwebber/dnd/language/Ability/CON": {
            "title": "$:/plugins/benwebber/dnd/language/Ability/CON",
            "text": "Constitution"
        },
        "$:/plugins/benwebber/dnd/language/Ability/INT": {
            "title": "$:/plugins/benwebber/dnd/language/Ability/INT",
            "text": "Intelligence"
        },
        "$:/plugins/benwebber/dnd/language/Ability/WIS": {
            "title": "$:/plugins/benwebber/dnd/language/Ability/WIS",
            "text": "Wisdom"
        },
        "$:/plugins/benwebber/dnd/language/Ability/CHA": {
            "title": "$:/plugins/benwebber/dnd/language/Ability/CHA",
            "text": "Charisma"
        },
        "$:/plugins/benwebber/dnd/language/Buttons/NewCreature/Text": {
            "title": "$:/plugins/benwebber/dnd/language/Buttons/NewCreature/Text",
            "text": "new creature"
        },
        "$:/plugins/benwebber/dnd/language/Buttons/NewCreature/Title": {
            "title": "$:/plugins/benwebber/dnd/language/Buttons/NewCreature/Title",
            "text": "New Creature"
        },
        "$:/plugins/benwebber/dnd/language/Buttons/NewCreature/Tooltip": {
            "title": "$:/plugins/benwebber/dnd/language/Buttons/NewCreature/Tooltip",
            "text": "Create a new creature"
        },
        "$:/plugins/benwebber/dnd/language/Buttons/NewSpell/Text": {
            "title": "$:/plugins/benwebber/dnd/language/Buttons/NewSpell/Text",
            "text": "new spell"
        },
        "$:/plugins/benwebber/dnd/language/Buttons/NewSpell/Title": {
            "title": "$:/plugins/benwebber/dnd/language/Buttons/NewSpell/Title",
            "text": "New Spell"
        },
        "$:/plugins/benwebber/dnd/language/Buttons/NewSpell/Tooltip": {
            "title": "$:/plugins/benwebber/dnd/language/Buttons/NewSpell/Tooltip",
            "text": "Create a new spell"
        },
        "$:/plugins/benwebber/dnd/language/Check/DC": {
            "title": "$:/plugins/benwebber/dnd/language/Check/DC",
            "text": "DC"
        },
        "$:/plugins/benwebber/dnd/language/EditCurrentTiddler": {
            "title": "$:/plugins/benwebber/dnd/language/EditCurrentTiddler",
            "text": "Edit <<sourceTiddler>>"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Size/Tiny": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Size/Tiny",
            "text": "Tiny"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Size/Small": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Size/Small",
            "text": "Small"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Size/Medium": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Size/Medium",
            "text": "Medium"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Size/Large": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Size/Large",
            "text": "Large"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Size/Huge": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Size/Huge",
            "text": "Huge"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Size/Gargantuan": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Size/Gargantuan",
            "text": "Gargantuan"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Aberration": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Aberration",
            "text": "Aberration"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Beast": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Beast",
            "text": "Beast"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Celestial": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Celestial",
            "text": "Celestial"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Construct": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Construct",
            "text": "Construct"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Dragon": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Dragon",
            "text": "Dragon"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Elemental": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Elemental",
            "text": "Elemental"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Fey": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Fey",
            "text": "Fey"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Fiend": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Fiend",
            "text": "Fiend"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Giant": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Giant",
            "text": "Giant"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Humanoid": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Humanoid",
            "text": "Humanoid"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Monstrosity": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Monstrosity",
            "text": "Monstrosity"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Ooze": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Ooze",
            "text": "Ooze"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Plant": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Plant",
            "text": "Plant"
        },
        "$:/plugins/benwebber/dnd/language/Creature/Type/Undead": {
            "title": "$:/plugins/benwebber/dnd/language/Creature/Type/Undead",
            "text": "Undead"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Acid": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Acid",
            "text": "acid damage"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Bludgeoning": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Bludgeoning",
            "text": "bludgeoning damage"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Cold": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Cold",
            "text": "cold damage"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Fire": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Fire",
            "text": "fire damage"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Force": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Force",
            "text": "force damage"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Lightning": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Lightning",
            "text": "lightning damage"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Necrotic": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Necrotic",
            "text": "necrotic damage"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Piercing": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Piercing",
            "text": "piercing damage"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Poison": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Poison",
            "text": "poison damage"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Psychic": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Psychic",
            "text": "psychic damage"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Radiant": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Radiant",
            "text": "radiant damage"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Slashing": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Slashing",
            "text": "slashing damage"
        },
        "$:/plugins/benwebber/dnd/language/Damage/Type/Thunder": {
            "title": "$:/plugins/benwebber/dnd/language/Damage/Type/Thunder",
            "text": "thunder damage"
        },
        "$:/plugins/benwebber/dnd/language/Modals/Subtitle": {
            "title": "$:/plugins/benwebber/dnd/language/Modals/Subtitle",
            "text": "Editing <<tiddler>>"
        },
        "$:/plugins/benwebber/dnd/language/Modals/Help": {
            "title": "$:/plugins/benwebber/dnd/language/Modals/Help",
            "text": "//Changes take effect immediately.//"
        },
        "$:/plugins/benwebber/dnd/language/Settings/Version": {
            "title": "$:/plugins/benwebber/dnd/language/Settings/Version",
            "text": "Version"
        },
        "$:/plugins/benwebber/dnd/language/Settings/CreatureTag": {
            "title": "$:/plugins/benwebber/dnd/language/Settings/CreatureTag",
            "text": "Tag for creature tiddlers"
        },
        "$:/plugins/benwebber/dnd/language/Settings/SpellTag": {
            "title": "$:/plugins/benwebber/dnd/language/Settings/SpellTag",
            "text": "Tag for spell tiddlers"
        },
        "$:/plugins/benwebber/dnd/language/Settings/RenderCreatures": {
            "title": "$:/plugins/benwebber/dnd/language/Settings/RenderCreatures",
            "text": "Automatically render stat blocks for creature tiddlers"
        },
        "$:/plugins/benwebber/dnd/language/Settings/RenderSpells": {
            "title": "$:/plugins/benwebber/dnd/language/Settings/RenderSpells",
            "text": "Automatically render stat blocks for spell tiddlers"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Acrobatics": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Acrobatics",
            "text": "Acrobatics"
        },
        "$:/plugins/benwebber/dnd/language/Skill/AnimalHandling": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/AnimalHandling",
            "text": "Animal Handling"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Arcana": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Arcana",
            "text": "Arcana"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Athletics": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Athletics",
            "text": "Athletics"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Deception": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Deception",
            "text": "Deception"
        },
        "$:/plugins/benwebber/dnd/language/Skill/History": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/History",
            "text": "History"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Insight": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Insight",
            "text": "Insight"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Intimidation": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Intimidation",
            "text": "Intimidation"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Investigation": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Investigation",
            "text": "Investigation"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Medicine": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Medicine",
            "text": "Medicine"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Nature": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Nature",
            "text": "Nature"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Perception": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Perception",
            "text": "Perception"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Performance": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Performance",
            "text": "Performance"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Persuasion": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Persuasion",
            "text": "Persuasion"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Religion": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Religion",
            "text": "Religion"
        },
        "$:/plugins/benwebber/dnd/language/Skill/SleightOfHand": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/SleightOfHand",
            "text": "Sleight of Hand"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Stealth": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Stealth",
            "text": "Stealth"
        },
        "$:/plugins/benwebber/dnd/language/Skill/Survival": {
            "title": "$:/plugins/benwebber/dnd/language/Skill/Survival",
            "text": "Survival"
        },
        "$:/plugins/benwebber/dnd/language/Spell/DescriptionFormat/Default": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/DescriptionFormat/Default",
            "text": "$level$$levelSuffix$-level $school$"
        },
        "$:/plugins/benwebber/dnd/language/Spell/DescriptionFormat/Ritual": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/DescriptionFormat/Ritual",
            "text": "$level$$levelSuffix$-level $school$ (ritual)"
        },
        "$:/plugins/benwebber/dnd/language/Spell/DescriptionFormat/Cantrip": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/DescriptionFormat/Cantrip",
            "text": "$School$ cantrip"
        },
        "$:/plugins/benwebber/dnd/language/Spell/Level": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/Level",
            "text": "Level"
        },
        "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/1": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/1",
            "text": "st"
        },
        "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/2": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/2",
            "text": "nd"
        },
        "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/3": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/3",
            "text": "rd"
        },
        "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/4": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/4",
            "text": "th"
        },
        "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/5": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/5",
            "text": "th"
        },
        "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/6": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/6",
            "text": "th"
        },
        "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/7": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/7",
            "text": "th"
        },
        "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/8": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/8",
            "text": "th"
        },
        "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/9": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/LevelSuffix/9",
            "text": "th"
        },
        "$:/plugins/benwebber/dnd/language/Spell/School": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/School",
            "text": "School"
        },
        "$:/plugins/benwebber/dnd/language/Spell/CastingTime": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/CastingTime",
            "text": "Casting Time"
        },
        "$:/plugins/benwebber/dnd/language/Spell/Range": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/Range",
            "text": "Range"
        },
        "$:/plugins/benwebber/dnd/language/Spell/Duration": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/Duration",
            "text": "Duration"
        },
        "$:/plugins/benwebber/dnd/language/Spell/Components": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/Components",
            "text": "Components"
        },
        "$:/plugins/benwebber/dnd/language/Spell/School/Abjuration": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/School/Abjuration",
            "text": "Abjuration"
        },
        "$:/plugins/benwebber/dnd/language/Spell/School/Conjuration": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/School/Conjuration",
            "text": "Conjuration"
        },
        "$:/plugins/benwebber/dnd/language/Spell/School/Divination": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/School/Divination",
            "text": "Divination"
        },
        "$:/plugins/benwebber/dnd/language/Spell/School/Enchantment": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/School/Enchantment",
            "text": "Enchantment"
        },
        "$:/plugins/benwebber/dnd/language/Spell/School/Evocation": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/School/Evocation",
            "text": "Evocation"
        },
        "$:/plugins/benwebber/dnd/language/Spell/School/Illusion": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/School/Illusion",
            "text": "Illusion"
        },
        "$:/plugins/benwebber/dnd/language/Spell/School/Necromancy": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/School/Necromancy",
            "text": "Necromancy"
        },
        "$:/plugins/benwebber/dnd/language/Spell/School/Transmutation": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/School/Transmutation",
            "text": "Transmutation"
        },
        "$:/plugins/benwebber/dnd/language/Spell/Ritual": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/Ritual",
            "text": "Ritual"
        },
        "$:/plugins/benwebber/dnd/language/Spell/Verbal": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/Verbal",
            "text": "V"
        },
        "$:/plugins/benwebber/dnd/language/Spell/Somatic": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/Somatic",
            "text": "S"
        },
        "$:/plugins/benwebber/dnd/language/Spell/Material": {
            "title": "$:/plugins/benwebber/dnd/language/Spell/Material",
            "text": "M"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Size": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Size",
            "text": "Size"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Type": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Type",
            "text": "Type"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Tags": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Tags",
            "text": "Tags"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Alignment": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Alignment",
            "text": "Alignment"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/AC": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/AC",
            "text": "Armour Class"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/HP": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/HP",
            "text": "Hit Points"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Speed": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Speed",
            "text": "Speed"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/STR": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/STR",
            "text": "STR"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/DEX": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/DEX",
            "text": "DEX"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/CON": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/CON",
            "text": "CON"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/INT": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/INT",
            "text": "INT"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/WIS": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/WIS",
            "text": "WIS"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/CHA": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/CHA",
            "text": "CHA"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/SavingThrows": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/SavingThrows",
            "text": "Saving Throws"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Senses": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Senses",
            "text": "Senses"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Languages": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Languages",
            "text": "Languages"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Challenge": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Challenge",
            "text": "Challenge"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Saves": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Saves",
            "text": "Saving Throws"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Skills": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Skills",
            "text": "Skills"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/DamageImmunities": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/DamageImmunities",
            "text": "Damage Immunities"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/DamageResistances": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/DamageResistances",
            "text": "Damage Resistances"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/DamageVulnerabilities": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/DamageVulnerabilities",
            "text": "Damage Vulnerabilities"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/ConditionImmunities": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/ConditionImmunities",
            "text": "Condition Immunities"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/ConditionResistances": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/ConditionResistances",
            "text": "Condition Resistances"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/ConditionVulnerabilities": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/ConditionVulnerabilities",
            "text": "Condition Vulnerabilities"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Action/Damage": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Action/Damage",
            "text": "damage"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Action/DefaultTarget": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Action/DefaultTarget",
            "text": "one target"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Action/Hit": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Action/Hit",
            "text": "Hit"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Action/Melee": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Action/Melee",
            "text": "Melee Weapon Attack"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Action/MeleeOrRanged": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Action/MeleeOrRanged",
            "text": "Melee or Ranged Weapon Attack"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Action/Or": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Action/Or",
            "text": "or"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Action/Plus": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Action/Plus",
            "text": "plus"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Action/Range": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Action/Range",
            "text": "range"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Action/Ranged": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Action/Ranged",
            "text": "Ranged Weapon Attack"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Action/Reach": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Action/Reach",
            "text": "reach"
        },
        "$:/plugins/benwebber/dnd/language/StatBlock/Action/ToHit": {
            "title": "$:/plugins/benwebber/dnd/language/StatBlock/Action/ToHit",
            "text": "to hit"
        },
        "$:/plugins/benwebber/dnd/language/XP": {
            "title": "$:/plugins/benwebber/dnd/language/XP",
            "text": "XP"
        },
        "$:/plugins/benwebber/dnd/languages/en-US/StatBlock/AC": {
            "title": "$:/plugins/benwebber/dnd/languages/en-US/StatBlock/AC",
            "text": "Armor Class"
        },
        "$:/plugins/benwebber/dnd/macros/creature": {
            "title": "$:/plugins/benwebber/dnd/macros/creature",
            "tags": "$:/tags/Macro",
            "text": "\\define creature-actions()\n<!--\nIf the user enters, then deletes a value in the form, the corresponding field\nwill be empty. Delete empty fields.\n-->\n<$list filter=\"[title<currentTiddler>fields[]]\" variable=\"field\">\n<$list filter=\"[title<currentTiddler>!has<field>]\">\n<$action-deletefield $field=<<field>> />\n</$list>\n</$list>\n<!-- Open editor form. -->\n<$action-sendmessage\n  $message=\"tm-modal\"\n  $param=\"$:/plugins/benwebber/dnd/ui/Modals/UpdateCreature\"\n  tiddler=<<currentTiddler>>\n/>\n\\end\n\n\\define dnd.creature()\n{{||$:/plugins/benwebber/dnd/templates/dnd.statblock}}\n\n<$set name=\"sourceTiddler\" value=<<currentTiddler>>>\n<$button actions=<<creature-actions>>><<dnd._lingo EditCurrentTiddler>></$button>\n</$set>\n\\end\n"
        },
        "$:/plugins/benwebber/dnd/macros/spell": {
            "title": "$:/plugins/benwebber/dnd/macros/spell",
            "tags": "$:/tags/Macro",
            "text": "\\define spell-actions()\n<!--\nIf the user enters, then deletes a value in the form, the corresponding field\nwill be empty. Delete empty fields.\n-->\n<$list filter=\"[title<currentTiddler>fields[]]\" variable=\"field\">\n<$list filter=\"[title<currentTiddler>!has<field>]\">\n<$action-deletefield $field=<<field>> />\n</$list>\n</$list>\n<!-- Open editor form. -->\n<$action-sendmessage\n  $message=\"tm-modal\"\n  $param=\"$:/plugins/benwebber/dnd/ui/Modals/UpdateSpell\"\n  tiddler=<<currentTiddler>>\n/>\n\\end\n\n\\define dnd.spell()\n{{||$:/plugins/benwebber/dnd/templates/dnd.spell}}\n\n<$set name=\"sourceTiddler\" value=<<currentTiddler>>>\n<$button actions=<<spell-actions>>><<dnd._lingo EditCurrentTiddler>></$button>\n</$set>\n\\end\n"
        },
        "$:/plugins/benwebber/dnd/modules/macros/dnd._lingo.js": {
            "text": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.name = \"dnd._lingo\";\nexports.params = [\n    { name: \"title\" },\n];\nfunction run(title) {\n    var plugin = \"benwebber/dnd\";\n    var languageTitle = this.getVariable(\"languageTitle\");\n    var tiddlerTitle = \"$:/plugins/\" + plugin + \"/languages/\" + languageTitle + \"/\" + title;\n    if (this.wiki.isShadowTiddler(tiddlerTitle)) {\n        return \"{{\" + tiddlerTitle + \"}}\";\n    }\n    // Check if string is defined in dependency.\n    var dependents = this.wiki.getTextReference(\"$:/languages/\" + languageTitle + \"!!dependents\", \"\");\n    var dependentLanguageTitles = $tw.utils.parseStringArray(dependents)\n        .map(function (tiddler) { return tiddler.replace(\"$:/languages/\", \"\"); });\n    for (var _i = 0, dependentLanguageTitles_1 = dependentLanguageTitles; _i < dependentLanguageTitles_1.length; _i++) {\n        var dependentLanguageTitle = dependentLanguageTitles_1[_i];\n        var dependentTiddlerTitle = \"$:/plugins/\" + plugin + \"/languages/\" + dependentLanguageTitle + \"/\" + title;\n        if (this.wiki.isShadowTiddler(dependentTiddlerTitle)) {\n            return \"{{\" + dependentTiddlerTitle + \"}}\";\n        }\n    }\n    // Fall back to default string.\n    return \"{{$:/plugins/\" + plugin + \"/language/\" + title + \"}}\";\n}\nexports.run = run;\n",
            "title": "$:/plugins/benwebber/dnd/modules/macros/dnd._lingo.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/plugins/benwebber/dnd/modules/macros/dnd._spellDescription.js": {
            "text": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dnd_js_1 = require(\"$:/plugins/benwebber/dnd/dnd.js\");\nexports.name = \"dnd._spellDescription\";\nexports.params = [\n    { name: \"level\" },\n    { name: \"school\" },\n    { name: \"ritual\" },\n];\nfunction run(level, school, ritual) {\n    var isRitual = ritual === \"true\";\n    // tslint:disable no-shadowed-variable\n    var isCantrip = function (level) { return parseInt(level, 10) === 0; };\n    var template;\n    if (isCantrip(level)) {\n        template = \"Spell/DescriptionFormat/Cantrip\";\n    }\n    else if (isRitual) {\n        template = \"Spell/DescriptionFormat/Ritual\";\n    }\n    else {\n        template = \"Spell/DescriptionFormat/Default\";\n    }\n    var format = this.wiki.renderText(\"text/plain\", \"text/vnd.tiddlywiki\", \"<<dnd._lingo \" + template + \">>\");\n    var schoolName = this.wiki.renderText(\"text/plain\", \"text/vnd.tiddlywiki\", \"<<dnd._lingo Spell/School/\" + dnd_js_1.capitalize(school) + \">>\");\n    var replacements = {\n        School: schoolName,\n        level: level,\n        levelSuffix: \"<<dnd._lingo Spell/LevelSuffix/\" + level + \">>\",\n        school: schoolName.toLocaleLowerCase(),\n    };\n    var rendered = format.replace(/\\$(\\w+)\\$/g, function (_, key) { return replacements[key]; });\n    return rendered;\n}\nexports.run = run;\n",
            "title": "$:/plugins/benwebber/dnd/modules/macros/dnd._spellDescription.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/plugins/benwebber/dnd/modules/macros/dnd.ability.js": {
            "text": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dnd_js_1 = require(\"$:/plugins/benwebber/dnd/dnd.js\");\nexports.name = \"dnd.ability\";\nexports.params = [{ name: \"score\" }];\nfunction run(score) {\n    var nScore = Number.parseInt(score, 10);\n    return dnd_js_1.ability(nScore);\n}\nexports.run = run;\n",
            "title": "$:/plugins/benwebber/dnd/modules/macros/dnd.ability.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/plugins/benwebber/dnd/modules/macros/dnd.attack.js": {
            "text": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dnd_js_1 = require(\"$:/plugins/benwebber/dnd/dnd.js\");\nexports.name = \"dnd.attack\";\nexports.params = [\n    { name: \"name\" },\n    { name: \"type\" },\n    { name: \"bonus\" },\n    { name: \"reach\" },\n    { name: \"range\" },\n    { name: \"target\" },\n    { name: \"damage\" },\n    { name: \"damageType\" },\n    { name: \"extraDamage\" },\n    { name: \"extraDamageType\" },\n    { name: \"condDamage\" },\n    { name: \"condDamageType\" },\n    { name: \"extraCondDamage\" },\n    { name: \"extraCondDamageType\" },\n    { name: \"when\" },\n    { name: \"effect\" },\n];\n// tslint:disable no-shadowed-variable\nfunction run(name, attackType, bonus, reach, range, target, damage, damageType, extraDamage, extraDamageType, condDamage, condDamageType, extraCondDamage, extraCondDamageType, when, effect) {\n    var attackTypes = {\n        both: dnd_js_1.AttackType.MeleeOrRanged,\n        melee: dnd_js_1.AttackType.Melee,\n        ranged: dnd_js_1.AttackType.Ranged,\n    };\n    var damageTypes = {\n        acid: dnd_js_1.DamageType.Acid,\n        bludgeoning: dnd_js_1.DamageType.Bludgeoning,\n        cold: dnd_js_1.DamageType.Cold,\n        fire: dnd_js_1.DamageType.Fire,\n        force: dnd_js_1.DamageType.Force,\n        lightning: dnd_js_1.DamageType.Lightning,\n        necrotic: dnd_js_1.DamageType.Necrotic,\n        piercing: dnd_js_1.DamageType.Piercing,\n        poison: dnd_js_1.DamageType.Poison,\n        psychic: dnd_js_1.DamageType.Psychic,\n        radiant: dnd_js_1.DamageType.Radiant,\n        slashing: dnd_js_1.DamageType.Slashing,\n        thunder: dnd_js_1.DamageType.Thunder,\n    };\n    var eAttackType = attackTypes[attackType.toLowerCase()];\n    if (eAttackType == null) {\n        return \"\";\n    }\n    var eDamageType = damageTypes[damageType.toLowerCase()];\n    var eExtraDamageType = damageTypes[extraDamageType.toLowerCase()];\n    var eCondDamageType = damageTypes[condDamageType.toLowerCase()];\n    var eExtraCondDamageType = damageTypes[extraCondDamageType.toLowerCase()];\n    var output = [\n        \"//''\" + name + \".''//\",\n        dnd_js_1.weaponAttack(eAttackType, bonus, reach, range, target),\n        dnd_js_1.hit(damage, eDamageType, extraDamage, eExtraDamageType, condDamage, eCondDamageType, extraCondDamage, eExtraCondDamageType, when, effect),\n    ];\n    return output.join(\" \");\n}\nexports.run = run;\n",
            "title": "$:/plugins/benwebber/dnd/modules/macros/dnd.attack.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/plugins/benwebber/dnd/modules/macros/dnd.average.js": {
            "text": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dnd_js_1 = require(\"$:/plugins/benwebber/dnd/dnd.js\");\nexports.name = \"dnd.average\";\nexports.params = [{ name: \"expr\" }];\nfunction run(expr) {\n    return dnd_js_1.average(expr);\n}\nexports.run = run;\n",
            "title": "$:/plugins/benwebber/dnd/modules/macros/dnd.average.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/plugins/benwebber/dnd/modules/macros/dnd.check.js": {
            "text": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dnd_js_1 = require(\"$:/plugins/benwebber/dnd/dnd.js\");\nexports.name = \"dnd.check\";\nexports.params = [\n    { name: \"ability\" },\n    { name: \"skill\" },\n    { name: \"dc\" },\n];\nfunction run(ability, skill, dc) {\n    var nDC = Number.parseInt(dc, 10);\n    return dnd_js_1.check(ability, skill, nDC);\n}\nexports.run = run;\n",
            "title": "$:/plugins/benwebber/dnd/modules/macros/dnd.check.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/plugins/benwebber/dnd/modules/macros/dnd.modifier.js": {
            "text": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dnd_js_1 = require(\"$:/plugins/benwebber/dnd/dnd.js\");\nexports.name = \"dnd.modifier\";\nexports.params = [{ name: \"score\" }];\nfunction run(score) {\n    var nScore = Number.parseInt(score, 10);\n    return dnd_js_1.modifier(nScore);\n}\nexports.run = run;\n",
            "title": "$:/plugins/benwebber/dnd/modules/macros/dnd.modifier.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/plugins/benwebber/dnd/modules/macros/dnd.spellblock.js": {
            "text": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dnd_js_1 = require(\"$:/plugins/benwebber/dnd/dnd.js\");\nexports.name = \"dnd.spellblock\";\nexports.params = [\n    { name: \"level\" },\n    { name: \"school\" },\n    { name: \"cast\" },\n    { name: \"ritual\" },\n    { name: \"range\" },\n    { name: \"verbal\" },\n    { name: \"somatic\" },\n    { name: \"material\" },\n    { name: \"duration\" },\n];\nfunction run(level, school, cast, ritual, range, verbal, somatic, material, duration) {\n    var isRitual = ritual === \"true\";\n    var isSomatic = somatic === \"true\";\n    var isVerbal = verbal === \"true\";\n    var nLevel = Number.parseInt(level, 10);\n    var spell = new dnd_js_1.Spell(nLevel, school, cast, isRitual, range, isVerbal, isSomatic, material, duration);\n    return spell.render();\n}\nexports.run = run;\n",
            "title": "$:/plugins/benwebber/dnd/modules/macros/dnd.spellblock.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/plugins/benwebber/dnd/modules/macros/dnd.statblock.js": {
            "text": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dnd_js_1 = require(\"$:/plugins/benwebber/dnd/dnd.js\");\nexports.name = \"dnd.statblock\";\nexports.params = [\n    // All monsters/NPCs have these attributes:\n    { name: \"size\" },\n    { name: \"type\" },\n    { name: \"alignment\" },\n    { name: \"ac\" },\n    { name: \"hp\" },\n    { name: \"speed\" },\n    { name: \"str\", default: 10 },\n    { name: \"dex\", default: 10 },\n    { name: \"con\", default: 10 },\n    { name: \"int\", default: 10 },\n    { name: \"wis\", default: 10 },\n    { name: \"cha\", default: 10 },\n    { name: \"senses\" },\n    { name: \"languages\", default: \"---\" },\n    { name: \"challenge\" },\n    // These attributes are optional:\n    { name: \"tags\" },\n    { name: \"saves\" },\n    { name: \"skills\" },\n    { name: \"dimm\" },\n    { name: \"dres\" },\n    { name: \"dvul\" },\n    { name: \"cimm\" },\n    { name: \"cres\" },\n    { name: \"cvul\" },\n];\nfunction run(size, type, alignment, ac, hp, speed, str, dex, con, int, wis, cha, senses, languages, challenge, tags, saves, skills, dimm, dres, dvul, cimm, cres, cvul) {\n    var nAC = Number.parseInt(ac, 10);\n    var nStr = Number.parseInt(str, 10);\n    var nDex = Number.parseInt(dex, 10);\n    var nCon = Number.parseInt(con, 10);\n    var nInt = Number.parseInt(int, 10);\n    var nWis = Number.parseInt(wis, 10);\n    var nCha = Number.parseInt(cha, 10);\n    var statblock = new dnd_js_1.StatBlock(size, type, alignment, nAC, hp, speed, nStr, nDex, nCon, nInt, nWis, nCha, senses, languages, challenge, tags, saves, skills, dimm, dres, dvul, cimm, cres, cvul);\n    return statblock.render();\n}\nexports.run = run;\n",
            "title": "$:/plugins/benwebber/dnd/modules/macros/dnd.statblock.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/plugins/benwebber/dnd/modules/macros/dnd.xp.js": {
            "text": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dnd_js_1 = require(\"$:/plugins/benwebber/dnd/dnd.js\");\nexports.name = \"dnd.xp\";\nexports.params = [\n    { name: \"rating\" },\n    { name: \"xp\" },\n];\nfunction run(rating, xp) {\n    var languageTitle = this.getVariable(\"languageTitle\");\n    var formatter = new Intl.NumberFormat(languageTitle);\n    // Try using user input directly. If `xp` is a number, use it.\n    var nXP = parseInt(xp, 10);\n    var hasXP = !Number.isNaN(nXP);\n    if (hasXP) {\n        return rating + \" (\" + formatter.format(nXP) + \" <<dnd._lingo XP>>)\";\n    }\n    // If `xp` is not a number or not defined, try using a standard score.\n    nXP = dnd_js_1.getXP(rating);\n    if (nXP != null) {\n        // Use standard scores (<<dnd.xp 5>>)\n        return rating + \" (\" + formatter.format(nXP) + \" <<dnd._lingo XP>>)\";\n    }\n    // Unknown rating: pass through (<<dnd.xp \"5 (800 XP)\">>).\n    return rating;\n}\nexports.run = run;\n",
            "title": "$:/plugins/benwebber/dnd/modules/macros/dnd.xp.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/plugins/benwebber/dnd/templates/dnd.spell": {
            "title": "$:/plugins/benwebber/dnd/templates/dnd.spell",
            "text": "\\define field-spell()\n\n<$macrocall\n  $name=\"dnd.spellblock\"\n  level={{!!dnd.spell.level}}\n  school={{!!dnd.spell.school}}\n  cast={{!!dnd.spell.cast}}\n  ritual={{!!dnd.spell.ritual}}\n  range={{!!dnd.spell.range}}\n  verbal={{!!dnd.spell.verbal}}\n  somatic={{!!dnd.spell.somatic}}\n  material={{!!dnd.spell.material}}\n  duration={{!!dnd.spell.duration}}\n/>\n\n\\end\n\n\\define data-spell()\n\n<$macrocall\n  $name=\"dnd.spellblock\"\n  level={{##level}}\n  school={{##school}}\n  cast={{##cast}}\n  ritual={{##ritual}}\n  range={{##range}}\n  components={{##components}}\n  verbal={{##verbal}}\n  somatic={{##somatic}}\n  material={{##material}}\n  duration={{##duration}}\n/>\n\n\\end\n\n<$reveal type=\"match\" state=\"!!type\" text=\"text/vnd.tiddlywiki\" default=\"text/vnd.tiddlywiki\">\n\n<<field-spell>>\n</$reveal>\n<$reveal type=\"match\" state=\"!!type\" text=\"application/x-tiddler-dictionary\">\n\n<<data-spell>>\n</$reveal>\n<$reveal type=\"match\" state=\"!!type\" text=\"application/json\">\n\n<<data-spell>>\n</$reveal>\n"
        },
        "$:/plugins/benwebber/dnd/templates/dnd.statblock": {
            "title": "$:/plugins/benwebber/dnd/templates/dnd.statblock",
            "text": "\\define field-statblock()\n\n<$macrocall\n  $name=\"dnd.statblock\"\n  size={{!!dnd.creature.size}}\n  type={{!!dnd.creature.type}}\n  tags={{!!dnd.creature.tags}}\n  alignment={{!!dnd.creature.alignment}}\n  ac={{!!dnd.creature.ac}}\n  hp={{!!dnd.creature.hp}}\n  speed={{!!dnd.creature.speed}}\n  str={{!!dnd.creature.str}}\n  dex={{!!dnd.creature.dex}}\n  con={{!!dnd.creature.con}}\n  int={{!!dnd.creature.int}}\n  wis={{!!dnd.creature.wis}}\n  cha={{!!dnd.creature.cha}}\n  saves={{!!dnd.creature.saves}}\n  skills={{!!dnd.creature.skills}}\n  dimm={{!!dnd.creature.dimm}}\n  dres={{!!dnd.creature.dres}}\n  dvul={{!!dnd.creature.dvul}}\n  cimm={{!!dnd.creature.cimm}}\n  cres={{!!dnd.creature.cres}}\n  cvul={{!!dnd.creature.cvul}}\n  senses={{!!dnd.creature.senses}}\n  languages={{!!dnd.creature.languages}}\n  challenge={{!!dnd.creature.challenge}}\n/>\n\n\\end\n\n\\define data-statblock()\n\n<$macrocall\n  $name=\"dnd.statblock\"\n  size={{##size}}\n  type={{##type}}\n  tags={{##tags}}\n  alignment={{##alignment}}\n  ac={{##ac}}\n  hp={{##hp}}\n  speed={{##speed}}\n  str={{##str}}\n  dex={{##dex}}\n  con={{##con}}\n  int={{##int}}\n  wis={{##wis}}\n  cha={{##cha}}\n  saves={{##saves}}\n  skills={{##skills}}\n  dimm={{##dimm}}\n  dres={{##dres}}\n  dvul={{##dvul}}\n  cimm={{##cimm}}\n  cres={{##cres}}\n  cvul={{##cvul}}\n  senses={{##senses}}\n  languages={{##languages}}\n  challenge={{##challenge}}\n/>\n\n\\end\n\n<$reveal type=\"match\" state=\"!!type\" text=\"text/vnd.tiddlywiki\" default=\"text/vnd.tiddlywiki\">\n\n<<field-statblock>>\n</$reveal>\n<$reveal type=\"match\" state=\"!!type\" text=\"application/x-tiddler-dictionary\">\n\n<<data-statblock>>\n</$reveal>\n<$reveal type=\"match\" state=\"!!type\" text=\"application/json\">\n\n<<data-statblock>>\n</$reveal>\n"
        },
        "$:/plugins/benwebber/dnd/ui/Buttons/new-creature": {
            "title": "$:/plugins/benwebber/dnd/ui/Buttons/new-creature",
            "tags": "$:/tags/PageControls",
            "text": "\\define actions()\n<$action-sendmessage\n  $message=\"tm-new-tiddler\"\n  title=<<title>>\n  tags={{$:/plugins/benwebber/dnd/config/Tags/Creatures}}\n/>\n\\end\n\n<$wikify name=\"text\" text=<<dnd._lingo Buttons/NewCreature/Text>>>\n<$wikify name=\"title\" text=<<dnd._lingo Buttons/NewCreature/Title>>>\n<$wikify name=\"tooltip\" text=<<dnd._lingo Buttons/NewCreature/Tooltip>>>\n<$button actions=<<actions>> class=<<tv-config-toolbar-class>> tooltip=<<tooltip>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/plugins/benwebber/dnd/images/new-creature}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text=<<text>>/></span>\n</$list>\n</$button>\n</$wikify>\n</$wikify>\n</$wikify>\n"
        },
        "$:/plugins/benwebber/dnd/ui/Buttons/new-spell": {
            "title": "$:/plugins/benwebber/dnd/ui/Buttons/new-spell",
            "tags": "$:/tags/PageControls",
            "text": "\\define actions()\n<$action-sendmessage\n  $message=\"tm-new-tiddler\"\n  title=<<title>>\n  tags={{$:/plugins/benwebber/dnd/config/Tags/Spells}}\n/>\n\\end\n\n<$wikify name=\"text\" text=<<dnd._lingo Buttons/NewSpell/Text>>>\n<$wikify name=\"title\" text=<<dnd._lingo Buttons/NewSpell/Title>>>\n<$wikify name=\"tooltip\" text=<<dnd._lingo Buttons/NewSpell/Tooltip>>>\n<$button actions=<<actions>> class=<<tv-config-toolbar-class>> tooltip=<<tooltip>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/plugins/benwebber/dnd/images/new-spell}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text=<<text>>/></span>\n</$list>\n</$button>\n</$wikify>\n</$wikify>\n</$wikify>\n"
        },
        "$:/plugins/benwebber/dnd/ui/Modals/UpdateCreature": {
            "title": "$:/plugins/benwebber/dnd/ui/Modals/UpdateCreature",
            "subtitle": "<<dnd._lingo Modals/Subtitle>>",
            "text": "\\define input(field)\n<$edit-text tag=input tiddler=<<tiddler>> field=<<__field__>> />\n\\end\n\n\\define select-size()\n<$select tiddler=<<tiddler>> field=\"dnd.creature.size\">\n  <option value=\"tiny\"><<dnd._lingo Creature/Size/Tiny>></option>\n  <option value=\"small\"><<dnd._lingo Creature/Size/Small>></option>\n  <option value=\"medium\"><<dnd._lingo Creature/Size/Medium>></option>\n  <option value=\"large\"><<dnd._lingo Creature/Size/Large>></option>\n  <option value=\"huge\"><<dnd._lingo Creature/Size/Huge>></option>\n  <option value=\"gargantuan\"><<dnd._lingo Creature/Size/Gargantuan>></option>\n</$select>\n\\end\n\n\\define select-type()\n<$select tiddler=<<tiddler>> field=\"dnd.creature.type\">\n  <option value=\"aberration\"><<dnd._lingo Creature/Type/Aberration>></option>\n  <option value=\"beast\"><<dnd._lingo Creature/Type/Beast>></option>\n  <option value=\"celestial\"><<dnd._lingo Creature/Type/Celestial>></option>\n  <option value=\"construct\"><<dnd._lingo Creature/Type/Construct>></option>\n  <option value=\"dragon\"><<dnd._lingo Creature/Type/Dragon>></option>\n  <option value=\"elemental\"><<dnd._lingo Creature/Type/Elemental>></option>\n  <option value=\"fey\"><<dnd._lingo Creature/Type/Fey>></option>\n  <option value=\"fiend\"><<dnd._lingo Creature/Type/Fiend>></option>\n  <option value=\"giant\"><<dnd._lingo Creature/Type/Giant>></option>\n  <option value=\"humanoid\"><<dnd._lingo Creature/Type/Humanoid>></option>\n  <option value=\"monstrosity\"><<dnd._lingo Creature/Type/Monstrosity>></option>\n  <option value=\"ooze\"><<dnd._lingo Creature/Type/Ooze>></option>\n  <option value=\"plant\"><<dnd._lingo Creature/Type/Plant>></option>\n  <option value=\"undead\"><<dnd._lingo Creature/Type/Undead>></option>\n</$select>\n\\end\n\n\\define select-ability(field)\n<$select tiddler=<<tiddler>> field=<<__field__>>>\n  <option value=\"1\"><<dnd.ability 1>></option>\n  <option value=\"2\"><<dnd.ability 2>></option>\n  <option value=\"3\"><<dnd.ability 3>></option>\n  <option value=\"4\"><<dnd.ability 4>></option>\n  <option value=\"5\"><<dnd.ability 5>></option>\n  <option value=\"6\"><<dnd.ability 6>></option>\n  <option value=\"7\"><<dnd.ability 7>></option>\n  <option value=\"8\"><<dnd.ability 8>></option>\n  <option value=\"9\"><<dnd.ability 9>></option>\n  <option value=\"10\"><<dnd.ability 10>></option>\n  <option value=\"11\"><<dnd.ability 11>></option>\n  <option value=\"12\"><<dnd.ability 12>></option>\n  <option value=\"13\"><<dnd.ability 13>></option>\n  <option value=\"14\"><<dnd.ability 14>></option>\n  <option value=\"15\"><<dnd.ability 15>></option>\n  <option value=\"16\"><<dnd.ability 16>></option>\n  <option value=\"17\"><<dnd.ability 17>></option>\n  <option value=\"18\"><<dnd.ability 18>></option>\n  <option value=\"19\"><<dnd.ability 19>></option>\n  <option value=\"20\"><<dnd.ability 20>></option>\n  <option value=\"21\"><<dnd.ability 21>></option>\n  <option value=\"22\"><<dnd.ability 22>></option>\n  <option value=\"23\"><<dnd.ability 23>></option>\n  <option value=\"24\"><<dnd.ability 24>></option>\n  <option value=\"25\"><<dnd.ability 25>></option>\n  <option value=\"26\"><<dnd.ability 26>></option>\n  <option value=\"27\"><<dnd.ability 27>></option>\n  <option value=\"28\"><<dnd.ability 28>></option>\n  <option value=\"29\"><<dnd.ability 29>></option>\n  <option value=\"30\"><<dnd.ability 30>></option>\n</$select>\n\\end\n\n\\define select-challenge()\n<$select tiddler=<<tiddler>> field=\"dnd.creature.challenge\">>\n  <option value=\"0\"><<dnd.xp \"0\">></option>\n  <option value=\"0 10\"><<dnd.xp \"0\" \"10\">></option>\n  <option value=\"1/8\"><<dnd.xp \"1/8\">></option>\n  <option value=\"1/4\"><<dnd.xp \"1/4\">></option>\n  <option value=\"1/2\"><<dnd.xp \"1/2\">></option>\n  <option value=\"1\"><<dnd.xp \"1\">></option>\n  <option value=\"2\"><<dnd.xp \"2\">></option>\n  <option value=\"3\"><<dnd.xp \"3\">></option>\n  <option value=\"4\"><<dnd.xp \"4\">></option>\n  <option value=\"5\"><<dnd.xp \"5\">></option>\n  <option value=\"6\"><<dnd.xp \"6\">></option>\n  <option value=\"7\"><<dnd.xp \"7\">></option>\n  <option value=\"8\"><<dnd.xp \"8\">></option>\n  <option value=\"9\"><<dnd.xp \"9\">></option>\n  <option value=\"10\"><<dnd.xp \"10\">></option>\n  <option value=\"11\"><<dnd.xp \"11\">></option>\n  <option value=\"12\"><<dnd.xp \"12\">></option>\n  <option value=\"13\"><<dnd.xp \"13\">></option>\n  <option value=\"14\"><<dnd.xp \"14\">></option>\n  <option value=\"15\"><<dnd.xp \"15\">></option>\n  <option value=\"16\"><<dnd.xp \"16\">></option>\n  <option value=\"17\"><<dnd.xp \"17\">></option>\n  <option value=\"18\"><<dnd.xp \"18\">></option>\n  <option value=\"19\"><<dnd.xp \"19\">></option>\n  <option value=\"20\"><<dnd.xp \"20\">></option>\n  <option value=\"21\"><<dnd.xp \"21\">></option>\n  <option value=\"22\"><<dnd.xp \"22\">></option>\n  <option value=\"23\"><<dnd.xp \"23\">></option>\n  <option value=\"24\"><<dnd.xp \"24\">></option>\n  <option value=\"25\"><<dnd.xp \"25\">></option>\n  <option value=\"26\"><<dnd.xp \"26\">></option>\n  <option value=\"27\"><<dnd.xp \"27\">></option>\n  <option value=\"28\"><<dnd.xp \"28\">></option>\n  <option value=\"29\"><<dnd.xp \"29\">></option>\n  <option value=\"30\"><<dnd.xp \"30\">></option>\n</$select>\n\\end\n\n<<dnd._lingo Modals/Help>>\n\n|!<<dnd._lingo StatBlock/Size>> |<<select-size>> |\n|!<<dnd._lingo StatBlock/Type>> |<<select-type>> |\n|!<<dnd._lingo StatBlock/Tags>> |<<input dnd.creature.tags>> |\n|!<<dnd._lingo StatBlock/Alignment>> |<<input dnd.creature.alignment>> |\n\n---\n\n|!<<dnd._lingo StatBlock/AC>> |<<input dnd.creature.ac>> |\n|!<<dnd._lingo StatBlock/HP>> |<<input dnd.creature.hp>> |\n|!<<dnd._lingo StatBlock/Speed>> |<<input dnd.creature.speed>> |\n\n---\n\n| <<dnd._lingo StatBlock/STR>> | <<dnd._lingo StatBlock/DEX>> | <<dnd._lingo StatBlock/CON>> | <<dnd._lingo StatBlock/INT>> | <<dnd._lingo StatBlock/WIS>> | <<dnd._lingo StatBlock/CHA>> |h\n| <<select-ability dnd.creature.str>> | <<select-ability dnd.creature.dex>> | <<select-ability dnd.creature.con>> | <<select-ability dnd.creature.int>> | <<select-ability dnd.creature.wis>> | <<select-ability dnd.creature.cha>> |\n\n---\n\n|!<<dnd._lingo StatBlock/SavingThrows>> |<<input dnd.creature.saves>> |\n|!<<dnd._lingo StatBlock/Skills>> |<<input dnd.creature.skills>> |\n|!<<dnd._lingo StatBlock/DamageImmunities>> |<<input dnd.creature.dimm>> |\n|!<<dnd._lingo StatBlock/DamageResistances>> |<<input dnd.creature.dres>> |\n|!<<dnd._lingo StatBlock/DamageVulnerabilities>> |<<input dnd.creature.dvul>> |\n|!<<dnd._lingo StatBlock/ConditionImmunities>> |<<input dnd.creature.cimm>> |\n|!<<dnd._lingo StatBlock/ConditionResistances>> |<<input dnd.creature.cres>> |\n|!<<dnd._lingo StatBlock/ConditionVulnerabilities>> |<<input dnd.creature.cvul>> |\n|!<<dnd._lingo StatBlock/Senses>> |<<input dnd.creature.senses>> |\n|!<<dnd._lingo StatBlock/Languages>> |<<input dnd.creature.languages>> |\n|!<<dnd._lingo StatBlock/Challenge>> |<<select-challenge>> |\n"
        },
        "$:/plugins/benwebber/dnd/ui/Modals/UpdateSpell": {
            "title": "$:/plugins/benwebber/dnd/ui/Modals/UpdateSpell",
            "subtitle": "<<dnd._lingo Modals/Subtitle>>",
            "text": "\\define input(field)\n<$edit-text tag=input tiddler=<<tiddler>> field=<<__field__>> />\n\\end\n\n\\define select-level(field)\n<$select tiddler=<<tiddler>> field=\"dnd.spell.level\">\n  <option>0</option>\n  <option>1</option>\n  <option>2</option>\n  <option>3</option>\n  <option>4</option>\n  <option>5</option>\n  <option>6</option>\n  <option>7</option>\n  <option>8</option>\n  <option>9</option>\n</$select>\n\\end\n\n\\define select-school()\n<$select tiddler=<<tiddler>> field=\"dnd.spell.school\">\n  <option value=\"abjuration\"><<dnd._lingo Spell/School/Abjuration>></option>\n  <option value=\"conjuration\"><<dnd._lingo Spell/School/Conjuration>></option>\n  <option value=\"divination\"><<dnd._lingo Spell/School/Divination>></option>\n  <option value=\"enchantment\"><<dnd._lingo Spell/School/Enchantment>></option>\n  <option value=\"evocation\"><<dnd._lingo Spell/School/Evocation>></option>\n  <option value=\"illusion\"><<dnd._lingo Spell/School/Illusion>></option>\n  <option value=\"necromancy\"><<dnd._lingo Spell/School/Necromancy>></option>\n  <option value=\"transmutation\"><<dnd._lingo Spell/School/Transmutation>></option>\n</$select>\n\\end\n\n<<dnd._lingo Modals/Help>>\n\n|!<<dnd._lingo Spell/Level>> |<<select-level>> |\n|!<<dnd._lingo Spell/School>> |<<select-school>> |\n|!<<dnd._lingo Spell/CastingTime>> |<<input dnd.spell.cast>> <$checkbox tiddler=<<tiddler>> field=\"dnd.spell.ritual\" checked=\"true\" unchecked=\"\" default=\"\"> <<dnd._lingo Spell/Ritual>></$checkbox> |\n|!<<dnd._lingo Spell/Range>> |<<input dnd.spell.range>> |\n|!<<dnd._lingo Spell/Duration>> |<<input dnd.spell.duration>> |\n|!<<dnd._lingo Spell/Components>> |<$checkbox tiddler=<<tiddler>> field=\"dnd.spell.verbal\" checked=\"true\" unchecked=\"\" default=\"\"> <<dnd._lingo Spell/Verbal>></$checkbox> <$checkbox tiddler=<<tiddler>> field=\"dnd.spell.somatic\" checked=\"true\" unchecked=\"\" default=\"\"> <<dnd._lingo Spell/Somatic>></$checkbox> <<dnd._lingo Spell/Material>>: <<input dnd.spell.material>> |\n"
        },
        "$:/plugins/benwebber/dnd/ui/ViewTemplate/spell": {
            "title": "$:/plugins/benwebber/dnd/ui/ViewTemplate/spell",
            "tags": "$:/tags/ViewTemplate",
            "list-before": "$:/core/ui/ViewTemplate/body",
            "text": "<!-- Check tiddler tag. -->\n<$list filter=\"[<currentTiddler>tag{$:/plugins/benwebber/dnd/config/Tags/Spells}]\">\n<!-- Check if user enabled view template; don't override <<currentTiddler>>. -->\n<$list\n  filter=\"[title[$:/plugins/benwebber/dnd/config/ViewTemplates/Spell]field:text[true]]\"\n  variable=\"noop\"\n>\n\n<<dnd.spell>>\n</$list>\n</$list>\n"
        },
        "$:/plugins/benwebber/dnd/ui/ViewTemplate/statblock": {
            "title": "$:/plugins/benwebber/dnd/ui/ViewTemplate/statblock",
            "tags": "$:/tags/ViewTemplate",
            "list-before": "$:/core/ui/ViewTemplate/body",
            "text": "<!-- Check tiddler tag. -->\n<$list filter=\"[<currentTiddler>tag{$:/plugins/benwebber/dnd/config/Tags/Creatures}]\">\n<!-- Check if user enabled view template; don't override <<currentTiddler>>. -->\n<$list\n  filter=\"[title[$:/plugins/benwebber/dnd/config/ViewTemplates/StatBlock]field:text[true]]\"\n  variable=\"noop\"\n>\n\n<<dnd.creature>>\n</$list>\n</$list>\n"
        }
    }
}
{
    "tiddlers": {
        "$:/plugins/jd/mob/config": {
            "created": "20171029115120346",
            "creator": "JD",
            "text": "<style>\n.tc-btn-invisible { text-align: left; }\n</style>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##freshinstall\" text=\"yes\">\n<div class=\"jd-bq\">\n<p>\nThanks for installing this plugin! You can always find the latest updates <a target=\"blank\" href=\"http://j.d.simplemobile.tiddlyspot.com\">here</a>\n</p>\n<p>\nThis plugin options tiddler is also available at ''Control panel'' >> ''Appearance'' >> ''JD Mob''\n</p>\n<p>\n<$button>\n<<jdconfig freshinstall no>>\nClose message\n</$button>\n</p>\n</div>\n<br>\n<hr>\n<br>\n</$reveal>\nShow as:\n<$select tiddler=\"$:/plugins/jd/mob/config/config\" index=\"configtype\">\n<option value=\"list\">List</option>\n<option value=\"htabs\">Horizontal tabs</option>\n<option value=\"vtabs\">Vertical tabs</option>\n</$select>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##configtype\" text=\"list\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/jd/config]]\"><$transclude/><hr></$list>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##configtype\" text=\"htabs\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/jd/config]!has[draft.of]]\" \"$:/plugins/jd/mob/config/barpresets\">>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##configtype\" text=\"vtabs\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/jd/config]!has[draft.of]]\" \"$:/plugins/jd/mob/config/barpresets\" \"$:/state/tab/JDconfig\" \"tc-vertical\">>\n</$reveal>",
            "title": "$:/plugins/jd/mob/config",
            "tags": "$:/tags/ControlPanel/Appearance",
            "subtitle": "Configure JD mobile layout",
            "modifier": "JD",
            "modified": "20171122151014084",
            "caption": "JD Mob"
        },
        "$:/plugins/jd/mob/config/fonts": {
            "created": "20171031124255884",
            "creator": "JD",
            "text": "<style> .texte { width: calc(100% - 60px); } </style>\n\n<h2>Fonts and heights presets</h2>\n\n\n<$button class=\"tc-btn-invisible\">\n<<jdfont 38px 30px 38px 28px 20px>>\n<<jdconfig fontsize largest>>\n<<jdradbut fontsize largest>>\n</$button> Largest\n<br>\n<$button class=\"tc-btn-invisible\">\n<<jdfont 34px 26px 34px 24px 20px>>\n<<jdconfig fontsize larger>>\n<<jdradbut fontsize larger>>\n</$button> Larger\n<br>\n<$button class=\"tc-btn-invisible\">\n<<jdfont 30px 22px 30px 20px 20px>>\n<<jdconfig fontsize large>>\n<<jdradbut fontsize large>>\n</$button> Large\n<br>\n<$button class=\"tc-btn-invisible\">\n<<jdfont 26px 18px 26px 16px 20px>>\n<<jdconfig fontsize medium>>\n<<jdradbut fontsize medium>>\n</$button> Medium\n<br>\n<$button class=\"tc-btn-invisible\">\n<<jdfont 22px 14px 20px 12px 20px>>\n<<jdconfig fontsize small>>\n<<jdradbut fontsize small>>\n</$button> Small\n<br>\n<$button class=\"tc-btn-invisible\">\n<<jdfont 18px 10px 16px 8px 20px>>\n<<jdconfig fontsize smaller>>\n<<jdradbut fontsize smaller>>\n</$button> Smaller\n<br>\n<$button class=\"tc-btn-invisible\">\n<<jdfont>>\n<<jdconfig fontsize default>>\n<<jdradbut fontsize default>>\n</$button> TW5 default\n<br>\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/jd/mob/font/font-title\" caption=\"Title\" list-before=\"$:/temp/jd/mob/font/font-body\"/>\n<$action-setfield $tiddler=\"$:/temp/jd/mob/font/font-body\" caption=\"Body, text buttons\" list-after=\"$:/temp/jd/mob/font/font-title\"/>\n<$action-setfield $tiddler=\"$:/temp/jd/mob/font/lineheight\" caption=\"Lineheight\"/>\n<$action-setfield $tiddler=\"$:/temp/jd/mob/font/font-tab-button\" caption=\"Tab buttons\"/>\n<$action-setfield $tiddler=\"$:/temp/jd/mob/font/font-button\" caption=\"Image buttons\"/>\n<<jdconfig fontsize custom>>\n<<jdradbut fontsize custom>>\n</$button> Custom\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##fontsize\" text=\"custom\">\n\nInclude unit (''px'' or ''em'') when entering custom values\n\n<table style=\"width:100%\">\n<tr>\n<th style=\"width:40%\">Element</th>\n<th style=\"width:60%\">Adjust</th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/temp/jd/mob/font/]!suffix[sitetitle]]\">\n<tr>\n<td><$view field=\"caption\"/></td>\n<td><$edit-text tiddler={{!!title}} field=\"temp\" placeholder={{!!text}} class=\"texte\"/>\n<$reveal type=\"match\" state=!!temp text=\"\">\n<$button class=\"tc-btn-invisible\" style=\"color:grey; cursor:not-allowed;\">✓</$button>\n<$button class=\"tc-btn-invisible\" style=\"color:grey; cursor:not-allowed;\">✕</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=!!temp text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler={{!!title}} text={{!!temp}}/>\n<$action-setfield $tiddler={{!!title}} temp=\"\"/>✓</$button>\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler={{!!title}} temp=\"\"/>✕</$button>\n</$reveal>\n</td>\n</tr>\n</$list>\n</table>\n</$reveal>\n<br><br>",
            "title": "$:/plugins/jd/mob/config/fonts",
            "tags": "$:/tags/jd/config",
            "modifier": "JD",
            "modified": "20171120143104637",
            "caption": "Fonts and heights"
        },
        "$:/plugins/jd/mob/readme": {
            "created": "20171030143047925",
            "creator": "JD",
            "text": "This is a mobile layout that applies to narrow screens. It introduces the following:\n\n# A Topbar that can be any of the following:\n#* Hidden\n#* Titlebar (search, title, subtitle, menu)\n#* Mobbuttons bar\n#**  Buttons tagged ''~$:/tags/jd/mobbutton''\n#* Searchbar\n#**  Simple searchbar lists standard search results only\n#**  Combined searchbar lists all search results (possibly slow on some devices)\n#* Control area containing ''Top Left Bar'', ''Page Control'', ''Mob-only'', and ''Top Right Bar'' buttons (in that order)\n#**  ''Top Left Bar'' >> buttons tagged ''~$:/tags/TopLeftBar''\n#**  ''Page control'' >> buttons tagged ''~$:/tags/PageControls''\n#**  ''Mob-only'' >> other buttons tagged ''~$:/tags/jd/mobbutton''\n#**  ''Top Right Bar'' >> buttons tagged ''~$:/tags/TopRightBar''\n#**  Buttons you don't want to appear here should be tagged ''~$:/tags/jd/mobno'' \n\n# A Bottombar that can be any of the following:\n#* Hidden\n#* Mobbuttons bar\n#**  Buttons tagged ''~$:/tags/jd/mobbutton''\n#* Control area containing ''Top Left Bar'', ''Page Control'', ''Mob-only'', and ''Top Right Bar'' buttons (in that order)\n#**  ''Top Left Bar'' >> buttons tagged ''~$:/tags/TopLeftBar''\n#**  ''Page control'' >> buttons tagged ''~$:/tags/PageControls''\n#**  ''Mob-only'' >> other buttons tagged ''~$:/tags/jd/mobbutton''\n#**  ''Top Right Bar'' >> buttons tagged ''~$:/tags/TopRightBar''\n#**  Buttons you don't want to appear here should be tagged ''~$:/tags/jd/mobno'' \n\n//Note:// \n\nThis layout is tied to the ''Sidebar Breakpoint'' set at ''Control Panel'' >> ''Appearance'' >> ''Theme Tweaks''.\n\nThis layout is compatible with any core theme as of release date.\n\n<a target=\"blank\" href=\"http://j.d.simplemobile.tiddlyspot.com\">Project Homepage on Tiddlyspot</a>\n\n!! Version History\n\n!!! 2018-09-03 Release of version 1.0.4\n\n* Added ability to create tiddler out of search term via \"+\" button, or keyboard shortcut: \"ctrl+space\"\n\n[[Detailed changelog|http://j.d.simplemobile.tiddlyspot.com/#Changelog]]",
            "title": "$:/plugins/jd/mob/readme",
            "tags": "",
            "modifier": "JD",
            "modified": "20180903122259331"
        },
        "$:/plugins/jd/mob/config/config": {
            "created": "20171109145547252",
            "creator": "JD",
            "text": "freshinstall: yes\ndefaultconfirm: cancel\nconfigtype: list\nfontsize: default\nscrollbars: show\nbarpreset: 4\nstoryfix: no\ntitlebaradjust: no\ntopbar: fixedsearch\ntopbarchoice: hide\nsearchbar: yes\nradbuttop: fixedsearch\nsearchbarchoice: simple\nbottombar: controls\nradbuttopfixedsearchops: hide\nradbuttopcontrolsops: hide\nradbuttopmobbuttonsops: hide\nradbuttoptitleops: hide\nbottombarcontrolsops: hide\nbottombarmobbuttonsops: hide\nbarpreset1ops: hide\nbarpreset2ops: hide\nbarpreset3ops: hide\nbarpreset4ops: hide\nsearchbutton: simple\nfocus: show",
            "type": "application/x-tiddler-dictionary",
            "title": "$:/plugins/jd/mob/config/config",
            "modifier": "JD",
            "modified": "20171122154523597"
        },
        "$:/plugins/jd/mob/config/topbar": {
            "created": "20171028024424838",
            "creator": "JD",
            "text": "<h2>Topbar</h2>\n<$button class=tc-btn-invisible>\n<<setTopsearchbar>>\n<<tglSearch>>\n<<jdconfig searchbutton simple>>\n<<jdradbut radbuttop fixedsearch>>\n</$button> Fixed searchbar\n<<moreOps radbuttop fixedsearch searchbar>>\n<$button class=tc-btn-invisible>\n<<setTopcontrols>>\n<<tglSearch>>\n<<jdconfig searchbutton simple>>\n<<jdradbut radbuttop controls>>\n</$button> Controls\n<<moreOps radbuttop controls searchbutton>>\n<$button class=tc-btn-invisible>\n<<setTopmobbuttons>>\n<<tglSearch>>\n<<jdconfig searchbutton simple>>\n<<jdradbut radbuttop mobbuttons>>\n</$button> Mob buttons only\n<<moreOps radbuttop mobbuttons searchbutton>>\n<$button class=tc-btn-invisible>\n<<setToptitlebar>>\n<<tglSearch>>\n<<jdconfig searchbutton simple>>\n<<jdradbut radbuttop title>>\n</$button> Titlebar\n<<moreOps radbuttop title titlebar>>\n<$button class=tc-btn-invisible>\n<<setTophide>>\n<<jdradbut radbuttop hide>>\n</$button> Hidden\n<br>",
            "title": "$:/plugins/jd/mob/config/topbar",
            "modifier": "JD",
            "modified": "20171122131221362",
            "list-before": "$:/plugins/jd/mob/config/bottombar",
            "caption": "Topbar style"
        },
        "$:/plugins/jd/mob/config/bottombar": {
            "created": "20171110164302862",
            "creator": "JD",
            "text": "<h2>Bottombar</h2>\n<$button class=\"tc-btn-invisible\">\n<<setBottomcontrols>>\n<<jdradbut bottombar controls>>\n</$button> Controls\n<<moreOps bottombar controls searchbutton>>\n<$button class=\"tc-btn-invisible\">\n<<jdconfig bottombar mobbuttons>>\n<<jdradbut bottombar mobbuttons>>\n</$button> Mob buttons only\n<<moreOps bottombar mobbuttons searchbutton>>\n<$button class=\"tc-btn-invisible\">\n<<noBottom>>\n<<jdradbut bottombar hide>>\n</$button> Hidden\n<br>",
            "title": "$:/plugins/jd/mob/config/bottombar",
            "modifier": "JD",
            "modified": "20171122131210851",
            "list-after": "$:/plugins/jd/mob/config/topbar",
            "caption": "Bottombar style"
        },
        "$:/plugins/jd/mob/config/barpresets": {
            "created": "20171113033257223",
            "creator": "JD",
            "text": "<h2>Topbar and bottombar presets</h2>\n<$button class=\"tc-btn-invisible\">\n<<jdconfig barpreset 1>>\n<<setToptitlebar>>\n<<noBottom>>\n<<jdradbut barpreset 1>>\n</$button> ''Titlebar'' on top, hidden bottom\n<<moreOps barpreset 1 titlebar>>\n<$button class=\"tc-btn-invisible\">\n<<jdconfig barpreset 2>>\n<<setTopcontrols>>\n<<noBottom>>\n<<jdradbut barpreset 2>>\n</$button> ''Controls'' on top, hidden bottom\n<<moreOps barpreset 2 searchbutton>>\n<$button class=\"tc-btn-invisible\">\n<<jdconfig barpreset 3>>\n<<setTophide>>\n<<setBottomcontrols>>\n<<jdradbut barpreset 3>>\n</$button> Hidden top, ''Controls'' on bottom\n<<moreOps barpreset 3 searchbutton>>\n<$button class=\"tc-btn-invisible\">\n<<jdconfig barpreset 4>>\n<<setTopsearchbar>>\n<<setBottomcontrols>>\n<<jdradbut barpreset 4>>\n</$button> ''Searchbar'' on top, ''Controls'' on bottom\n<<moreOps barpreset 4 searchbar>>\n<$button class=\"tc-btn-invisible\">\n<<jdconfig barpreset 5>>\n<<jdradbut barpreset 5>>\n</$button> Custom topbar and bottombar\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##barpreset\" text=\"5\">\n{{$:/plugins/jd/mob/config/topbar}}\n{{$:/plugins/jd/mob/config/bottombar}}\n</$reveal>\n<br><br>",
            "title": "$:/plugins/jd/mob/config/barpresets",
            "tags": "$:/tags/jd/config",
            "modifier": "JD",
            "modified": "20171122154450000",
            "caption": "Top and bottom bars"
        },
        "$:/plugins/jd/mob/template/topbar": {
            "text": "<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##topbar\" text=\"fixedsearch\">\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##fixedsearch\" text=\"combined\">\n{{$:/plugins/jd/mob/template/combinedsearch}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##fixedsearch\" text=\"simple\">\n{{$:/plugins/jd/mob/template/simplesearch}}\n</$reveal>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##topbar\" text=\"controls\">\n<span class=\"jd-topbar\">\n{{$:/plugins/jd/mob/template/controls}}\n</span>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##topbar\" text=\"mobbuttons\">\n<span class=\"jd-topbar\">\n<div class=\"tc-page-controls\">\n{{$:/plugins/jd/mob/template/mobbuttons}}\n</div>\n</span>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##topbar\" text=\"title\">\n<span class=\"jd-topbar\">\n{{$:/plugins/jd/mob/template/titlebar}}\n</span>\n</$reveal>",
            "title": "$:/plugins/jd/mob/template/topbar",
            "tags": "$:/tags/PageTemplate",
            "modifier": "JD",
            "modified": "20171118170723817",
            "fixedsearch": "{{$:/plugins/jd/mob/template/combinedsearch}}",
            "creator": "JD",
            "created": "20171018115714311"
        },
        "$:/plugins/jd/mob/template/titlebar": {
            "created": "20171112032454483",
            "creator": "JD",
            "text": "<div class=\"jd-title-wrapper\">\n<span class=\"tc-site-title\"><$transclude tiddler=\"$:/SiteTitle\"/></span>\n<span class=\"tc-site-subtitle\"><$transclude tiddler=\"$:/SiteSubtitle\"/></span>\n</div>\n<div class=\"jd-title-controls\">\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##searchbutton\" text=\"simple\">\n{{$:/plugins/jd/mob/button/search}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##searchbutton\" text=\"combined\">\n{{$:/plugins/jd/mob/button/search}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##searchbutton\" text=\"core\">\n{{$:/core/ui/Buttons/advanced-search}}\n</$reveal>\n{{$:/core/ui/TopBar/menu}}\n</div>",
            "title": "$:/plugins/jd/mob/template/titlebar",
            "tags": "",
            "modifier": "JD",
            "modified": "20171122134204001"
        },
        "$:/plugins/jd/mob/template/controls": {
            "created": "20171111135718973",
            "creator": "JD",
            "text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]!tag[$:/tags/jd/mobno]]\">\n<$transclude/>\n</$list>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]!tag[$:/tags/jd/mobno]]\" variable=\"listItem\">\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\">\n<$transclude tiddler=<<listItem>>/>\n</$reveal>\n</$list>\n{{$:/plugins/jd/mob/template/mobbuttons}}\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]!tag[$:/tags/jd/mobno]]\">\n<$transclude/>\n</$list>\n</div>",
            "title": "$:/plugins/jd/mob/template/controls",
            "tags": "",
            "modifier": "JD",
            "modified": "20171119140040863"
        },
        "$:/plugins/jd/mob/template/bottombar": {
            "text": "<div class=\"jd-bottombar\">\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"controls\">\n{{$:/plugins/jd/mob/template/controls}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"mobbuttons\">\n<div class=\"tc-page-controls\">\n{{$:/plugins/jd/mob/template/mobbuttons}}\n</div>\n</$reveal>\n</div>",
            "title": "$:/plugins/jd/mob/template/bottombar",
            "tags": "$:/tags/PageTemplate",
            "modifier": "JD",
            "modified": "20171118170729880",
            "creator": "JD",
            "created": "20171115114644869"
        },
        "$:/plugins/jd/mob/template/mobbuttons": {
            "text": "\\define config-mobtitle()\n$:/config/jd/mobbutton/visibility/$(listItem)$\n\\end\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/jd/mobbutton]!has[draft.of]]\" variable=\"listItem\">\n<$reveal type=\"nomatch\" state=<<config-mobtitle>> text=\"hide\">\n<$transclude tiddler=<<listItem>>/>\n</$reveal>\n</$list>",
            "title": "$:/plugins/jd/mob/template/mobbuttons",
            "tags": "",
            "modifier": "JD",
            "modified": "20171118161831963",
            "creator": "JD",
            "created": "20171118055005587"
        },
        "$:/plugins/jd/mob/config/mobbuttons": {
            "created": "20171118051624478",
            "creator": "JD",
            "text": "\\define config-base() $:/config/jd/mobbutton/visibility/\n<h2>Mob buttons</h2>\n<p>Here are buttons tagged <b>~$:/tags/jd/mobbutton</b></p>\n<p>Choose which ones are displayed. Drag and drop to change the ordering</p>\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/jd/mobbutton\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n</$set>\n</$set>\n<br>",
            "title": "$:/plugins/jd/mob/config/mobbuttons",
            "tags": "$:/tags/jd/config",
            "modifier": "JD",
            "modified": "20171122150902808",
            "caption": "Mob buttons"
        },
        "$:/plugins/jd/mob/button/config": {
            "text": "<$button tooltip=\"Configure JD mobile layout\" class=\"tc-btn-invisible\">{{$:/core/images/theme-button}}<$action-sendmessage $message=\"tm-modal\" $param=\"$:/plugins/jd/mob/config\"/></$button>",
            "title": "$:/plugins/jd/mob/button/config",
            "tags": "$:/tags/jd/mobbutton",
            "modifier": "JD",
            "modified": "20171122114923959",
            "description": "Configure JD mobile layout",
            "creator": "JD",
            "created": "20171117090228867",
            "caption": "{{$:/core/images/theme-button}} configure JDmob"
        },
        "$:/plugins/jd/mob/stylesheet": {
            "created": "20171016123229521",
            "creator": "JD",
            "text": "@media print\n{\n.tc-sidebar-scrollable,\n.jd-search,\n.jd-topbar,\n.jd-bottombar { display: none !important; }\n}\n\n/**  CONFIG RADIO BUTTONS  **/\n\n.radbutton, .radbuttoff { \n    display: inline-block; \n    height: 12px; \n    width: 12px; \n    border: 2px solid <<colour muted-foreground>>; \n    -webkit-transition-duration: {{$:/config/AnimationDuration}}ms;\n    -moz-transition-duration: {{$:/config/AnimationDuration}}ms;\n    -ms-transition-duration: {{$:/config/AnimationDuration}}ms;\n    -o-transition-duration: {{$:/config/AnimationDuration}}ms;\n    transition-duration: {{$:/config/AnimationDuration}}ms;\n}\n\n.radbutton { background: <<colour primary>>; }\n.radbuttoff { background: <<colour muted-foreground>>; }\n.radbutton:hover, .radbuttoff:hover { \n    border: 2px solid <<colour primary>>;\n    background: <<colour primary>>; \n}\n\n.jd-bq {\n    margin: 5px;\n    padding: 5px;\n    border: 1px solid <<colour tab-border>>;\n}\n\n.jd-bq, .radbutton, .radbuttoff {\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    -ms-border-radius: 6px;\n    -o-border-radius: 6px;\n    border-radius: 6px;\n}\n\n.jd-btn-txt {\n    border: none;\n    background: none;\n    font-size: inherit;\n    text-decoration: underline;\n    padding: 0;\n    margin: 0;\n}\n\n.jd-btn-txt:hover {\n    text-decoration: none;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) { \n.jd-topbar, \n.jd-bottombar,\n.jd-search { display: none; }\n} \n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) { \n\n.tc-topbar { display: none !important; } \n\n.tc-tags-wrapper { margin: 5px 0 !important; }\n\n\n/**  NOTIFICATIONS  **/\n\n.tc-notification {\n    position: fixed; \n    top: 60px !important;\n    right: 10px !important;\n    z-index: {{!!z-bar}} !important;\n}\n\n.tc-modal {\n    top: 50px !important;\n    left: 50px !important;\n    right: 50px !important;\n}\n\n.tc-modal-body { max-height: calc(100vh - 200px) !important; }\n\n.tc-modal-wrapper,\n.tc-plugin-reload-warning { z-index: {{!!z-notif}} !important; }\n\n\n/**  STORY RIVER  **/\n\n.tc-story-river { \n    margin: 0 !important;\n    padding-top: 0 !important;\n}\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##storyfix\" text=\"no\">\n\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##topbar\" text=\"hide\">\n\n@media print\n{\n.tc-story-river { margin-top: 0 !important; }\n}\n\n@media screen\n{\n.tc-story-river { margin-top: 50px !important; }\n}\n\n</$reveal>\n\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"hide\">\n\n.tc-story-river { margin-bottom: 50px !important; }\n\n</$reveal>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##storyfix\" text=\"yes\">\n\n.tc-story-river { \n    width: 100% !important;\n    position: fixed !important;\n    left: 0 !important;\n    overflow-y: auto !important;\n}\n\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##topbar\" text=\"hide\">\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"hide\">\n.tc-story-river { \n    top: 50px !important;\n    height: calc(100% - 50px) !important;\n}\n</$reveal>\n\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"hide\">\n.tc-story-river { \n    top: 50px !important; \n    height: calc(100% - 100px) !important;\n}\n</$reveal>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##topbar\" text=\"hide\">\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"hide\">\n.tc-story-river { \n    top: 0 !important; \n    height: 100% !important;\n}\n</$reveal>\n\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"hide\">\n.tc-story-river { \n    top: 0 !important; \n    height: calc(100% - 50px) !important;\n}\n</$reveal>\n\n</$reveal>\n\n</$reveal>\n\n.tc-tiddler-frame {\n    margin-bottom: 2px !important;\n    padding: 15px 10px;\n    overflow: auto;\n}\n\n\n/**  POPUPS AND DROPDOWNS INSIDE VIEW AREA  **/\n\n.tc-drop-down,\n.tc-block-dropdown {\n    position: fixed !important;\n    top: 50% !important;\n    left: 50% !important;\n    text-align: left;\n    white-space: normal !important;\n    max-height: calc(100% - 160px) !important;\n    min-width: calc(100% - 90px) !important;\n    max-width: calc(100% - 60px) !important;\n   -webkit-transform: translate(-50%, -50%) !important;\n   -moz-transform: translate(-50%, -50%) !important;\n   -ms-transform: translate(-50%, -50%) !important;\n   -o-transform: translate(-50%, -50%) !important;\n    transform: translate(-50%, -50%) !important;\n    -webkit-box-shadow: 0 0 10px 5px rgba(0,0,0,0.5);\n    -moz-box-shadow: 0 0 10px 5px rgba(0,0,0,0.5);\n    -ms-box-shadow: 0 0 10px 5px rgba(0,0,0,0.5);\n    -o-box-shadow: 0 0 10px 5px rgba(0,0,0,0.5);\n    box-shadow: 0 0 10px 5px rgba(0,0,0,0.5);\n    overflow: auto !important;\n    z-index: {{!!z-dropdown}} !important;\n}\n\n.tc-menu-list-item {\n    padding-left: 5px;\n    text-indent: -5px;\n    white-space: normal !important;\n    word-wrap: break-word !important;\n    -webkit-word-break: break-all !important;\n    -moz-word-break: break-all !important;\n    -ms-word-break: break-all !important;\n    -o-word-break: break-all !important;\n    word-break: break-all !important;\n}\n\n.tc-edit-type-dropdown { overflow: auto; }\n\n\n/**  SCROLLBARS  **/\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##scrollbars\" text=\"hide\">\n\nbody { \n   -ms-overflow-style: -ms-autohiding-scrollbar;\n}\n\ndiv::-webkit-scrollbar,\n.tc-edit-type-dropdown::-webkit-scrollbar,\n.tc-block-dropdown::-webkit-scrollbar,\n.tc-drop-down::-webkit-scrollbar,\n.jd-search-results::-webkit-scrollbar,\n.tc-story-river::-webkit-scrollbar,\n.tc-sidebar-scrollable::-webkit-scrollbar {\n    background: transparent;\n    width: 0;\n}\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##scrollbars\" text=\"show\">\n\nbody { \n    scrollbar-face-color: <<colour background>>;\n    scrollbar-arrow-color: <<colour page-background>>;\n    scrollbar-track-color: <<colour page-background>>;\n    scrollbar-shadow-color: <<colour page-background>>;\n}\n\ndiv::-webkit-scrollbar,\n.tc-edit-type-dropdown::-webkit-scrollbar,\n.tc-block-dropdown::-webkit-scrollbar,\n.tc-drop-down::-webkit-scrollbar,\n.tc-story-river::-webkit-scrollbar,\n.tc-sidebar-scrollable::-webkit-scrollbar {\n    background: <<colour background>>;\n    width: 6px;\n    -webkit-border-radius: 3px;\n    border-radius: 3px;\n}\n\ndiv::-webkit-scrollbar-thumb,\n.tc-edit-type-dropdown::-webkit-scrollbar-thumb,\n.tc-block-dropdown::-webkit-scrollbar-thumb,\n.tc-drop-down::-webkit-scrollbar-thumb,\n.jd-search-results::-webkit-scrollbar,\n.tc-story-river::-webkit-scrollbar-thumb,\n.tc-sidebar-scrollable::-webkit-scrollbar-thumb {\n    background: <<colour page-background>>; \n    width: 6px;\n    -webkit-border-radius: 3px;\n    border-radius: 3px;\n}\n\n.jd-search-results::-webkit-scrollbar-thumb {\n    background: <<colour primary>>;\n    width: 6px;\n    -webkit-border-radius: 3px;\n    border-radius: 3px;\n}\n\n</$reveal>\n\n\n/**  FOCUS  **/\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##focus\" text=\"hide\">\ntextarea:focus, select:focus, button:focus, input:focus { outline: none; }\n</$reveal>\n\n\n/**  TOPBAR & BOTTOMBAR  **/\n\n.jd-topbar,\n.jd-bottombar {\n    width: 100%;\n    position: fixed;\n    left: 0;\n    background: <<colour page-background>>;\n    overflow: hidden;\n    z-index: {{!!z-bar}};\n}\n\n.jd-topbar { top: 0; height: 50px; }\n.jd-bottombar { bottom: 0; }\n\n\n/**  SEARCH  **/\n\n.jd-search { z-index: {{!!z-search}}; }\n\n.jd-search-results {\n    background: <<colour page-background>>;\n    width: 100%;\n    position: fixed;\n    top: 50px;\n    left: 0;\n    margin: 0;\n    padding: 0 10px;\n    overflow-y: auto;\n    z-index: {{!!z-searchwrapper}};\n}\n\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"hide\">\n.jd-search-results { max-height: calc(100% - 100px); }\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"hide\">\n.jd-search-results { max-height: calc(100% - 50px); }\n</$reveal>\n\n.jd-searchwrapper {\n    background: <<colour page-background>>;\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 50px;\n    z-index: {{!!z-searchwrapper}};\n}\n\n.jd-searchbar {\n    width: calc(100% - 20px);\n    height: 30px; \n    position: fixed;\n    top: 0;\n    left: 0;\n    font-size: 16px !important;\n    background: transparent !important;\n    border: none;\n    border-bottom: 2px solid<<colour primary>>;\n<$reveal state=\"$:/plugins/jd/mob/config/config##searchbarchoice\" type=\"match\" text=\"combined\">\n    padding: 0 160px 0 10px;\n</$reveal>\n<$reveal state=\"$:/plugins/jd/mob/config/config##searchbarchoice\" type=\"match\" text=\"simple\">\n    padding: 0 100px 0 10px;\n</$reveal>\n    margin: 10px;\n}\n\n.jd-search-buttons {\n<$reveal state=\"$:/plugins/jd/mob/config/config##searchbarchoice\" type=\"match\" text=\"combined\">\n    width: 160px; \n</$reveal>\n<$reveal state=\"$:/plugins/jd/mob/config/config##searchbarchoice\" type=\"match\" text=\"simple\">\n    width: 100px; \n</$reveal>\n    position: fixed; \n    top: 12px;\n    right: 0; \n    background: <<colour page-background>>;\n    border: transparent;\n    margin-right: 20px; \n    text-align: right;\n    vertical-align: middle;\n}\n\n.jd-search-buttons {\n    z-index: {{!!z-searchbuttons}};\n}\n\n.jd-search-buttons .tc-popup-keep,\n.jd-search-buttons .tc-btn-invisible {\n    font-size: 18px;\n    background: transparent;\n    border: transparent;\n    cursor: pointer;\n}\n\n.jd-search-buttons .tc-btn-invisible { margin-left: 8px; }\n\n\n/**  CONTROLS **/\n\n.jd-title-controls {\n    display: flex;\n    justify-content: space-between;\n    margin: 10px;\n}\n\n.jd-search-buttons button,\n.jd-title-controls button {\n    fill: <<colour sidebar-controls-foreground>>;\n    font-size: 1.6em;\n    -webkit-transition-duration: {{$:/config/AnimationDuration}}ms;\n    -moz-transition-duration: {{$:/config/AnimationDuration}}ms;\n    -ms-transition-duration: {{$:/config/AnimationDuration}}ms;\n    -o-transition-duration: {{$:/config/AnimationDuration}}ms;\n    transition-duration: {{$:/config/AnimationDuration}}ms;\n}\n\n.jd-search-buttons button:hover,\n.jd-title-controls button:hover {\n    fill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.jd-topbar .tc-page-controls,\n.jd-bottombar .tc-page-controls {\n    display: flex;\n    justify-content: space-between;\n    height: 30px;\n    margin: 10px;\n}\n\n.tc-page-controls button { margin: 0 !important;}\n\n\n/**  TITLEBAR  **/\n\n.jd-title-wrapper .tc-site-title,\n.jd-title-wrapper .tc-site-subtitle {\n    position: absolute;\n    left: 50%;\n    text-align: center;\n   -webkit-transform: translate(-50%, 50%);\n   -moz-transform: translate(-50%, 50%);\n   -ms-transform: translate(-50%, 50%);\n   -o-transform: translate(-50%, 50%);\n    transform: translate(-50%, 50%);\n}\n\n.jd-title-wrapper .tc-site-subtitle {\n    width: calc(100% - 100px);\n}\n\n\n/**  SIDEBAR LISTS  **/\n\n.tc-sidebar-scrollable .tc-site-title,\n.tc-sidebar-scrollable .tc-site-subtitle,\n.tc-sidebar-scrollable .tc-page-controls,\n.tc-sidebar-scrollable .tc-search\n { display: none; }\n\n.tc-sidebar-header { padding: 0 !important; }\n\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"no\">\n.tc-sidebar-scrollable {\n    background: <<colour background>>;\n    width: 100%;\n    position: fixed;\n    left: 0; \n    z-index: {{!!z-sidebar}};\n    overflow: auto !important;\n}\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/sidebar\" text=\"no\">\n\n.tc-sidebar-scrollable { display:none; }\n\n.tc-tab-set { overflow-y: auto !important; }\n\n</$reveal>\n\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##topbar\" text=\"hide\">\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"hide\">\n.tc-sidebar-scrollable { \n    top: 50px !important;\n    height: calc(100% - 50px) !important;\n}\n\n.tc-sidebar-scrollable .tc-tab-buttons { top: 50px; }\n</$reveal>\n\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"hide\">\n.tc-sidebar-scrollable { \n    top: 50px !important;\n    height: calc(100% - 100px) !important;\n}\n\n.tc-sidebar-scrollable .tc-tab-buttons { top: 50px; }\n</$reveal>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##topbar\" text=\"hide\">\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"hide\">\n.tc-sidebar-scrollable { \n    top: 0 !important;\n    height: 100% !important;\n}\n</$reveal>\n\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##bottombar\" text=\"hide\">\n.tc-sidebar-scrollable { \n    top: 0 !important;\n    height: calc(100% - 50px) !important;\n}\n</$reveal>\n\n</$reveal>\n\n\n/**  SIDEBAR LISTS BUTTONS  **/\n\n.tc-sidebar-scrollable .tc-tab-buttons { margin: 10px; }\n\n.tc-sidebar-scrollable .tc-tab-content { \n    margin: 10px !important; \n    border: 0 !important;\n}\n\n\n/**  ADJUSTABLE  FONTS AND HEIGHTS  **/\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##titlebaradjust\" text=\"no\">\n.jd-title-wrapper .tc-site-title { top: -3px; font-size: 18px; }\n.jd-title-wrapper .tc-site-subtitle { top: 15px; font-size: 12px; }\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##titlebaradjust\" text=\"yes\">\n.jd-title-wrapper .tc-site-title { top: {{!!height-sitetitle}}; font-size: {{!!font-sitetitle}}; }\n.jd-title-wrapper .tc-site-subtitle { top: {{!!height-subsitetitle}}; font-size: {{!!font-subsitetitle}}; }\n</$reveal>\n\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##fontsize\" text=\"default\">\n\n.tc-tiddler-view-frame h2.tc-title,\ninput.tc-titlebar.tc-edit-texteditor { \n    font-size: {{!!font-title}} !important; \n}\n\n.tc-tiddler-view-frame .tc-subtitle { \n    font-size: calc({{!!font-body}} - 4px) !important; \n}\n\nh1, h1 a { \n    font-size: calc({{!!font-body}} + 6px) !important; \n}\n\nh2, h2 a { \n    font-size: calc({{!!font-body}} + 4px) !important; \n}\n\nh3, h3 a { \n    font-size: calc({{!!font-body}} + 2px) !important; \n}\n\nh4, a, li, table,\ninput, textarea, select,\n.tc-tiddler-preview-preview p,\n.tc-tiddler-view-frame p,\n.tc-modal p,\n.tc-btn-text,\n.jd-search-results,\n.tc-tab-content,\n.tc-modal-header h3 { \n    font-size: {{!!font-body}} !important; \n    line-height: {{!!lineheight}} !important;\n}\n\nbutton.tc-btn-invisible.tc-remove-tag-button,\n.tc-tag-label.tc-btn-invisible { \n    font-size: calc({{!!font-body}} - 4px) !important; \n}\n\n.tc-tab-buttons button,\n.tc-tab-buttons.tc-vertical button,\n.tc-sidebar-scrollable .tc-tab-buttons button,\n.tc-sidebar-scrollable .tc-tab-buttons.tc-vertical button {\n    font-size: {{!!font-tab-button}} !important;\n}\n\n.tc-btn-invisible,\n.tc-tiddler-controls button, \n.tc-tiddler-controls button svg, \n.tc-tiddler-controls button img,\n.tc-image-buttons,\n.tc-page-controls { \n    font-size: {{!!font-button}} !important; \n}\n\n.tc-tiddler-controls button svg, \n.tc-tiddler-controls button img,\n.tc-image-buttons { \n    height: {{!!font-button}} !important; \n    width: {{!!font-button}} !important; \n}\n\n</$reveal>\n\n}",
            "z-sidebar": "1500",
            "z-searchwrapper": "2500",
            "z-searchbuttons": "4100",
            "z-search": "4000",
            "z-notif": "9000",
            "z-dropdown": "4000",
            "z-bar": "2000",
            "title": "$:/plugins/jd/mob/stylesheet",
            "tags": "$:/tags/Stylesheet",
            "modifier": "JD",
            "modified": "20180903124046078",
            "lineheight": "{{$:/temp/jd/mob/font/lineheight}}",
            "height-subsitetitle": "{{$:/temp/jd/mob/font/height-subsitetitle}}",
            "height-sitetitle": "{{$:/temp/jd/mob/font/height-sitetitle}}",
            "font-title": "{{$:/temp/jd/mob/font/font-title}}",
            "font-tab-button": "{{$:/temp/jd/mob/font/font-tab-button}}",
            "font-subsitetitle": "{{$:/temp/jd/mob/font/font-subsitetitle}}",
            "font-sitetitle": "{{$:/temp/jd/mob/font/font-sitetitle}}",
            "font-button": "{{$:/temp/jd/mob/font/font-button}}",
            "font-body": "{{$:/temp/jd/mob/font/font-body}}",
            "list-after": "$:/themes/tiddlywiki/vanilla/base"
        },
        "$:/plugins/jd/mob/config/searchbutton": {
            "created": "20171118142818660",
            "creator": "JD",
            "text": "<h3>Choose search button</h3>\n\n<$button class=\"tc-btn-invisible\">\n<<tglSearch show>>\n<$action-setfield $tiddler=\"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search\" text=\"hide\"/>\n<<jdconfig searchbarchoice simple>>\n<<jdconfig searchbutton simple>>\n<<jdradbut searchbutton simple>>\n</$button> Toggle for simple searchbar\n<br>\n<$button class=\"tc-btn-invisible\">\n<<tglSearch show>>\n<$action-setfield $tiddler=\"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search\" text=\"hide\"/>\n<<jdconfig searchbarchoice combined>>\n<<jdconfig searchbutton combined>>\n<<jdradbut searchbutton combined>>\n</$button> Toggle for combined searchbar\n<br>\n<$button class=\"tc-btn-invisible\">\n<<tglSearch hide>>\n<$action-setfield $tiddler=\"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search\" text=\"show\"/>\n<<jdconfig searchbutton core>>\n<<jdradbut searchbutton core>>\n</$button> Button to core search\n<br>\n<$button class=\"tc-btn-invisible\">\n<<tglSearch hide>>\n<$action-setfield $tiddler=\"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search\" text=\"hide\"/>\n<<jdconfig searchbutton hide>>\n<<jdradbut searchbutton hide>>\n</$button> Hidden\n<br><br>",
            "title": "$:/plugins/jd/mob/config/searchbutton",
            "tags": "",
            "modifier": "JD",
            "modified": "20171122125953528",
            "caption": "Choose search button"
        },
        "$:/plugins/jd/mob/config/titlebar": {
            "created": "20171118171842911",
            "creator": "JD",
            "text": "<h3>Vertical position</h3>\n\n<$button class=tc-btn-invisible>\n<<jdconfig titlebaradjust no>>\n<<jdradbut titlebaradjust no>>\n</$button> Default\n<br>\n<$button class=tc-btn-invisible>\n<<jdconfig titlebaradjust yes>>\n<$action-setfield $tiddler=\"$:/temp/jd/mob/font/height-sitetitle\" caption=\"Site title vertical position\" text=\"-3px\" list-after=\"$:/temp/jd/mob/font/font-sitetitle\"/>\n<$action-setfield $tiddler=\"$:/temp/jd/mob/font/font-sitetitle\" caption=\"Site title font size\" text=\"18px\"/>\n<$action-setfield $tiddler=\"$:/temp/jd/mob/font/height-subsitetitle\" caption=\"Site subtitle vertical position\" text=\"15px\" list-after=\"$:/temp/jd/mob/font/font-subsitetitle\"/>\n<$action-setfield $tiddler=\"$:/temp/jd/mob/font/font-subsitetitle\" caption=\"Site subtitle font size\" text=\"12px\"/>\n<<jdradbut titlebaradjust yes>>\n</$button> Custom\n\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##titlebaradjust\" text=\"yes\">\n\nInclude unit (''px'' or ''em'') when entering custom values\n\n<table style=\"width:100%\">\n<tr>\n<th style=\"width:40%\">Element</th>\n<th style=\"width:60%\">Adjust</th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/temp/jd/mob/font/]suffix[sitetitle]]\">\n<tr>\n<td><$view field=\"caption\"/></td>\n<td><$edit-text tiddler={{!!title}} field=\"temp\" placeholder={{!!text}} class=\"texte\"/>\n<$reveal type=\"match\" state=!!temp text=\"\">\n<$button class=\"tc-btn-invisible\" style=\"color:grey; cursor:not-allowed;\">✓</$button>\n<$button class=\"tc-btn-invisible\" style=\"color:grey; cursor:not-allowed;\">✕</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=!!temp text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler={{!!title}} text={{!!temp}}/>\n<$action-setfield $tiddler={{!!title}} temp=\"\"/>✓</$button>\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler={{!!title}} temp=\"\"/>✕</$button>\n</$reveal>\n</td>\n</tr>\n</$list>\n</table>\n</$reveal>\n{{$:/plugins/jd/mob/config/searchbutton}}",
            "title": "$:/plugins/jd/mob/config/titlebar",
            "modifier": "JD",
            "modified": "20171119072342630",
            "caption": "Fonts and heights",
            "tags": ""
        },
        "$:/plugins/jd/mob/config/searchbar": {
            "created": "20171118171759396",
            "creator": "JD",
            "text": "<h3>Choose searchbar style</h3>\n\n<$button class=\"tc-btn-invisible\">\n<<tglSearch show>>\n<<jdconfig searchbarchoice combined>>\n<<jdconfig searchbutton combined>>\n<<jdradbut searchbutton combined>>\n</$button> Combined search\n<br>\n<$button class=\"tc-btn-invisible\">\n<<tglSearch show>>\n<<jdconfig searchbarchoice simple>>\n<<jdconfig searchbutton simple>>\n<<jdradbut searchbutton simple>>\n</$button> Simple search\n<p>\n<$checkbox tiddler=\"$:/config/jd/mobbutton/visibility/$:/plugins/jd/mob/button/search\" field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> Show search button at controls\n</p>",
            "title": "$:/plugins/jd/mob/config/searchbar",
            "tags": "",
            "modifier": "JD",
            "modified": "20171122123127279",
            "caption": "Choose searchbar style"
        },
        "$:/plugins/jd/mob/macros": {
            "created": "20171119044207910",
            "creator": "JD",
            "text": "\\define jdconf() $:/plugins/jd/mob/config/config\n\\define jdconfont() $:/temp/jd/mob/font/\n\\define jdconfig(config:\"\" choice:\"\")\n<$action-setfield $tiddler=<<jdconf>> $index=\"$config$\" $value=$choice$/>\n\\end\n\\define moreOps(config:\"\" choice:\"\" option:\"\")\n<$reveal type=\"match\" state=\"$(jdconf)$##$config$\" text=\"$choice$\">\n<$reveal type=\"nomatch\" state=\"$(jdconf)$##$config$$choice$ops\" text=\"show\">\n<$button class =\"jd-btn-txt\" set=\"$(jdconf)$##$config$$choice$ops\" setTo=\"show\"> Show options</$button>\n</$reveal>\n<$reveal type=\"match\" state=\"$(jdconf)$##$config$$choice$ops\" text=\"show\">\n<$button class =\"jd-btn-txt\" set=\"$(jdconf)$##$config$$choice$ops\" setTo=\"hide\"> Hide options</$button>\n<div class=\"jd-bq\">{{$:/plugins/jd/mob/config/$option$}}</div>\n</$reveal>\n</$reveal>\n<br>\n\\end\n\\define jdfont(font-title:\"\" font-body:\"\" lineheight:\"\" font-tab:\"\" font-button:\"\")\n<$action-setfield $tiddler=\"$(jdconfont)$font-title\" text=\"$font-title$\"/>\n<$action-setfield $tiddler=\"$(jdconfont)$font-body\" text=\"$font-body$\"/>\n<$action-setfield $tiddler=\"$(jdconfont)$lineheight\" text=\"$lineheight$\"/>\n<$action-setfield $tiddler=\"$(jdconfont)$font-tab-button\" text=\"$font-tab$\"/>\n<$action-setfield $tiddler=\"$(jdconfont)$font-button\" text=\"$font-button$\"/>\n\\end\n\\define jdradbut(config:\"\" choice:\"\")\n<$reveal type=\"match\" state=\"$(jdconf)$##$config$\" text=\"$choice$\"><div class=\"radbutton\"></div></$reveal>\n<$reveal type=\"nomatch\" state=\"$(jdconf)$##$config$\" text=\"$choice$\"><div class=\"radbuttoff\"></div></$reveal>\n\\end\n\\define tglSearch(choice:\"show\")\n<$action-setfield $tiddler=\"$:/config/jd/mobbutton/visibility/$:/plugins/jd/mob/button/search\" text=$choice$/>\n\\end\n\\define notPreset()\n<<jdconfig barpreset 0>>\n\\end\n\\define setTopsearchbar()\n<<jdconfig topbar fixedsearch>>\n<<jdconfig topbarchoice hide>>\n<<jdconfig searchbar yes>>\n<<jdconfig radbuttop fixedsearch>>\n\\end\n\\define setToptitlebar()\n<<jdconfig searchbar no>>\n<<jdconfig topbar title>>\n<<jdconfig topbarchoice title>>\n<<jdconfig radbuttop title>>\n\\end\n\\define setTopcontrols()\n<<jdconfig searchbar no>>\n<<jdconfig topbar controls>>\n<<jdconfig topbarchoice controls>>\n<<jdconfig radbuttop controls>>\n\\end\n\\define setTopmobbuttons()\n<<jdconfig searchbar no>>\n<<jdconfig topbar mobbuttons>>\n<<jdconfig topbarchoice mobbuttons>>\n<<jdconfig radbuttop mobbuttons>>\n\\end\n\\define setTophide()\n<<jdconfig searchbar no>>\n<<jdconfig topbar hide>>\n<<jdconfig topbarchoice hide>>\n<<jdconfig radbuttop hide>>\n\\end\n\\define noBottom()\n<<jdconfig bottombar hide>>\n\\end\n\\define setBottomcontrols()\n<<jdconfig bottombar controls>>\n\\end\n\\define setJDmobdefaults()\n<<tglSearch>>\n<<jdconfig freshinstall yes>>\n<<jdconfig configtype list>>\n<<jdfont>>\n<<jdconfig fontsize default>>\n<<jdconfig scrollbars show>>\n<<jdconfig focus show>>\n<<jdconfig storyfix no>>\n<<jdconfig titlebaradjust no>>\n<<jdconfig topbarchoice hide>>\n<<jdconfig searchbarchoice simple>>\n<<jdconfig searchbutton simple>>\n<<jdconfig barpreset 4>>\n<<setTopsearchbar>>\n<<setBottomcontrols>>\n<<jdconfig radbuttopfixedsearchops hide>>\n<<jdconfig radbuttopcontrolsops hide>>\n<<jdconfig radbuttopmobbuttonsops hide>>\n<<jdconfig radbuttoptitleops hide>>\n<<jdconfig bottombarcontrolsops hide>>\n<<jdconfig bottombarmobbuttonsops hide>>\n<<jdconfig barpreset1ops hide>>\n<<jdconfig barpreset2ops hide>>\n<<jdconfig barpreset3ops hide>>\n<<jdconfig barpreset4ops hide>>\n<$fieldmangler tiddler=\"$:/plugins/jd/mob/button/search\">\n<$action-sendmessage $message=\"tm-add-tag\" $param=\"$:/tags/jd/mobbutton\"/>\n</$fieldmangler>\n\\end",
            "title": "$:/plugins/jd/mob/macros",
            "tags": "$:/tags/Macro",
            "modifier": "JD",
            "modified": "20171122150921869"
        },
        "$:/plugins/jd/mob/button/search": {
            "created": "20171122115403541",
            "creator": "JD",
            "text": "<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##searchbar\" text=\"yes\">\n<$button class=\"tc-btn-invisible\" tooltip=\"Show searchbar\" set=\"$:/plugins/jd/mob/config/config##searchbar\" setTo=\"yes\">\n<<jdconfig topbar search>>\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##searchbar\" text=\"yes\">\n<$button class=\"tc-btn-invisible\" tooltip=\"Hide searchbar\" set=\"$:/plugins/jd/mob/config/config##searchbar\" setTo=\"no\">\n<<jdconfig topbar hide>>\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>",
            "title": "$:/plugins/jd/mob/button/search",
            "tags": "$:/tags/jd/mobbutton",
            "modifier": "JD",
            "modified": "20171122154523596",
            "description": "Toggle searchbar visibility",
            "caption": "{{$:/core/images/advanced-search-button}} search"
        },
        "$:/plugins/jd/mob/template/search": {
            "created": "20171018115714311",
            "creator": "JD",
            "text": "\\define NewTidActions(searcharea)\n<$action-createtiddler $basetitle={{$searcharea$}} $savetitle=\"$:/temp/NewTidTitle\"/>\n<$action-sendmessage $message=\"tm-edit-tiddler\" $param={{$:/temp/NewTidTitle}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTidTitle\"/>\n<$action-setfield $tiddler=\"$searcharea$\" text=\"\"/>\n\\end\n\n\\define NewTidBtn(searcharea)\n<$button tooltip=\"Create new tiddler with this title\" class=\"tc-btn-invisible\" actions=<<NewTidActions \"$searcharea$\">>>\n{{$:/core/images/new-button}}\n</$button>\n\\end\n\n\\define lingo-base() $:/language/Search/\n<$reveal state=\"$:/plugins/jd/mob/config/config##searchbar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<$reveal state=\"$:/plugins/jd/mob/config/config##searchbarchoice\" type=\"match\" text=\"simple\">\n<div class=\"jd-search\">\n<$keyboard class=\"jd-searchwrapper\" tag=\"div\" key=\"ctrl+space\" actions=<<NewTidActions \"$:/temp/search\">>>\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\" placeholder={{$:/language/Search/Search}} class=\"jd-searchbar\"/>\n</$keyboard>\n<div class=\"jd-search-buttons\">\n<$list filter=\"[[$:/temp/search]!text[]]\" variable=\"statecheck\">\n<<NewTidBtn \"$:/temp/search\">>\n</$list>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##radbuttop\" text=\"fixedsearch\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$list filter=\"[[$:/temp/search]!text[]]\" variable=\"statecheck\">\n<$button class=\"tc-btn-invisible\" tooltip=\"Clear searchbar\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text=\"\"/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$list>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##radbuttop\" text=\"fixedsearch\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<<jdconfig searchbar no>>\n<<jdconfig topbar {{$:/plugins/jd/mob/config/config##topbarchoice}}>>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\" tooltip=\"Clear and hide searchbar\">\n<<jdconfig searchbar no>>\n<<jdconfig topbar {{$:/plugins/jd/mob/config/config##topbarchoice}}>>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text=\"\"/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n<div class=\"jd-search-results\">\n<$list filter=\"[[$:/temp/search]!text[]]\" variable=\"statecheck\">\n<$scrollable fallthrough=\"no\" class=\"results\">\n<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n</$list>\n</$set>\n</$scrollable>\n</$list>\n</div>\n</div>\n</$reveal>\n\n<$reveal state=\"$:/plugins/jd/mob/config/config##searchbarchoice\" type=\"match\" text=\"combined\">\n<div class=\"jd-search\">\n<$keyboard class=\"jd-searchwrapper\" tag=\"div\" key=\"ctrl+space\" actions=<<NewTidActions \"$:/temp/advancedsearch\">>>\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" placeholder={{$:/language/Search/Search}} class=\"jd-searchbar\"/>\n</$linkcatcher>\n</$keyboard>\n<div class=\"jd-search-buttons\">\n<$list filter=\"[[$:/temp/advancedsearch]!text[]]\" variable=\"statecheck\">\n<<NewTidBtn \"$:/temp/advancedsearch\">>\n</$list>\n{{$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete}}\n{{$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown}}\n{{$:/core/ui/AdvancedSearch/Filter/FilterButtons/export}}\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##radbuttop\" text=\"fixedsearch\">\n{{$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear}} \n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##radbuttop\" text=\"fixedsearch\">\n<$button class=\"tc-btn-invisible\" tooltip=\"Clear and hide searchbar\">\n<<jdconfig searchbar no>>\n<<jdconfig topbar {{$:/plugins/jd/mob/config/config##topbarchoice}}>>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text=\"\"/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n<div class=\"jd-search-results\">\n<!--STANDARD-->\n<$list filter=\"[[$:/temp/advancedsearch]!text[]]\" variable=\"statecheck\">\n<br>\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"{{$:/language/Search/Search/TooShort}}\"\"\" variable=\"listItem\">\n<$set name=\"searchTiddler\" value=\"$:/temp/advancedsearch\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n</$list>\n</$set>\n</$list>\n</$list>\n<!--STANDARD-->\n<!--FILTER-->\n<$list filter=\"[[$:/temp/advancedsearch]!text[]]\" variable=\"statecheck\">\n<br><br>\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nFilter search: <<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n</$set>\n</$list>\n<!--FILTER-->\n<!--SYSTEM-->\n<$list filter=\"[[$:/temp/advancedsearch]!text[]]\" variable=\"statecheck\">\n<br>\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" variable=\"listItem\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\nSystem search: <<lingo System/Matches>>\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</$set>\n</$list>\n</$list>\n<!--SYSTEM-->\n<!--SHADOWS-->\n<$list filter=\"[[$:/temp/advancedsearch]!text[]]\" variable=\"statecheck\">\n<br>\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" variable=\"listItem\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\nShadows search: <<lingo Shadows/Matches>>\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</$set>\n</$list>\n</$list>\n<!--SHADOWS-->\n</div>\n</div>\n</$reveal>\n</$reveal>",
            "title": "$:/plugins/jd/mob/template/search",
            "tags": "$:/tags/PageTemplate",
            "modifier": "JD",
            "modified": "20180903123722931"
        },
        "$:/plugins/jd/mob/config/misc": {
            "created": "20171122140327337",
            "creator": "JD",
            "text": "<h2>Miscellaneous</h2>\n<h3>Config button</h3>\n<$checkbox tiddler=\"$:/config/jd/mobbutton/visibility/$:/plugins/jd/mob/button/config\" field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> Show {{$:/core/images/theme-button}} button at ''Controls'' / ''Mobbuttons''\n<br><br>\n<hr>\n<h3>Scrollbars</h3>\n<$button class=\"tc-btn-invisible\">\n<<jdconfig scrollbars hide>>\n<<jdradbut scrollbars hide>>\n</$button> Invisible scrollbars\n<br>\n<$button class=\"tc-btn-invisible\">\n<<jdconfig scrollbars show>>\n<<jdradbut scrollbars show>>\n</$button> Visible scrollbars\n<br><br>\n<hr>\n<h3>Focus</h3>\n<p>Here we can hide the hightlight / outline on focused text inputs and buttons</p>\n<$button class=\"tc-btn-invisible\">\n<<jdconfig focus show>>\n<<jdradbut focus show>>\n</$button> Default\n<br>\n<$button class=\"tc-btn-invisible\">\n<<jdconfig focus hide>>\n<<jdradbut focus hide>>\n</$button> Hide focus\n<br><br>\n<hr>\n<h3>Story river</h3>\nHere we can try to stop the fist tiddler in the story river from scrolling past the topbar\n<br>\n''Side effects:''\n<br>\n<li>For ''classic'' and ''pop'' story view: tiddlers won't automatically scroll into view on link click</li>\n<li>Browser search bar won't automatically hide on scroll up (tested on Chrome for Android)</li>\n<br>\n<$button class=\"tc-btn-invisible\">\n<<jdconfig storyfix yes>>\n<<jdradbut storyfix yes>>\n</$button> Apply \n<br>\n<$button class=\"tc-btn-invisible\">\n<<jdconfig storyfix no>>\n<<jdradbut storyfix no>>\n</$button> Don't apply\n<br><br>\n<hr>\n<h3>Restore defaults</h3>\n<div class=\"jd-bq\">\n<p>\nTo reset to...\n</p>\n<p>\nDefault font size,  Visible scrollbars, ''Simple searchbar'' on top, ''Controls'' on bottom,  ''Simple searchbar button'' on controls,  Story river hack not applied...\n</p>\n<p>\nClick:\n</p>\n<p>\n<$reveal type=\"nomatch\" state=\"$:/plugins/jd/mob/config/config##defaultconfirm\" text=\"confirm\">\n<$button class=\"jd-btn-txt\">\n<<jdconfig defaultconfirm confirm>>\nRestore defaults\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/plugins/jd/mob/config/config##defaultconfirm\" text=\"confirm\">\n<$button class=\"jd-btn-txt\">\n<<setJDmobdefaults>>\n<<jdconfig defaultconfirm cancel>>\nConfirm\n</$button>\n<$button class=\"jd-btn-txt\">\n<<jdconfig defaultconfirm cancel>>\nCancel\n</$button>\n</$reveal>\n</p>\n</div>\n<br>",
            "title": "$:/plugins/jd/mob/config/misc",
            "tags": "$:/tags/jd/config",
            "modified": "20171122141012375",
            "modifier": "JD",
            "caption": "Miscellaneous"
        }
    }
}
{
    "tiddlers": {
        "$:/plugins/jd/plainrevs/TiddlerInfo/Revisions": {
            "text": "<style>\n.diff-wrapper { margin: 0 0 1em 0; }\n.diff-wrapper div { width: 100%; }\n.diff-wrapper pre {\n    margin: 0;\n    width: 100%;\n    max-height: 24em;\n    overflow-y: auto;\n}\n</style>\n<$list filter=\"[[$:/state/revTab/tabType]!text[vertical]]\" variable=\"tabType\" emptyMessage=\"\"\"<<revTabs \"tc-vertical\">>\"\"\">\n<<revTabs>>\n</$list>",
            "type": "text/vnd.tiddlywiki",
            "title": "$:/plugins/jd/plainrevs/TiddlerInfo/Revisions",
            "tags": "$:/tags/TiddlerInfo",
            "revision": "2-6c1651bc53216f77697bbeefe012fcbe",
            "modifier": "jd",
            "modified": "20180715090724978",
            "creator": "jd",
            "created": "20180713032258699",
            "caption": "Revisions"
        },
        "$:/plugins/jd/plainrevs/Buttons/save": {
            "text": "<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[[$:/config/plainrevs/whitelist]text[yes]]\" emptyMessage=\"\"\"\n<$macrocall $name=\"saveRev\" from=\"{!!draft.title}\" source=\"{{!!draft.title}}\"/>\n<$macrocall $name=\"keepRev\" from=\"{!!draft.title}\"/>\n\"\"\" variable=\"checkWhitelist\">\n<$list filter=\"[<currentTiddler>!keep-rev[]]\" variable=\"checkkeepRev\">\n<$macrocall $name=\"saveRev\" from=\"{!!draft.title}\" source=\"{{!!draft.title}}\"/>\n<$macrocall $name=\"keepRev\" from=\"{!!draft.title}\"/>\n</$list></$list>\n<$action-deletetiddler $tiddler=\"$:/temp/recentTiddler\"/>\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/plugins/jd/plainrevs/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button></$fieldmangler>\n",
            "type": "text/vnd.tiddlywiki",
            "title": "$:/plugins/jd/plainrevs/Buttons/save",
            "tags": "$:/tags/EditToolbar",
            "revision": "16-5872e5975ec10785e4fafc91be2aad4c",
            "modifier": "jd",
            "modified": "20180716071810229",
            "description": "{{$:/language/Buttons/Save/Hint}}",
            "creator": "jd",
            "created": "20180713010525088",
            "caption": "{{$:/plugins/jd/plainrevs/images/done-button}} {{$:/language/Buttons/Save/Caption}}"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/plugins/jd/plainrevs/Buttons/delete": {
            "created": "20180714131951888",
            "creator": "jd",
            "text": "hide",
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/plugins/jd/plainrevs/Buttons/delete",
            "tags": "",
            "modified": "20180714131955980",
            "modifier": "jd"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/save": {
            "created": "20180714131822371",
            "creator": "jd",
            "text": "show",
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/save",
            "modified": "20180714131823794",
            "modifier": "jd"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
            "created": "20180714131815374",
            "creator": "jd",
            "text": "hide",
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
            "modified": "20180714131835620",
            "modifier": "jd"
        },
        "$:/config/EditToolbarButtons/Visibility/$:/core/ui/Buttons/save": {
            "created": "20180714123039108",
            "creator": "jd",
            "text": "hide",
            "title": "$:/config/EditToolbarButtons/Visibility/$:/core/ui/Buttons/save",
            "modifier": "jd",
            "modified": "20180714131847296"
        },
        "$:/config/EditToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
            "created": "20180714123228657",
            "creator": "jd",
            "text": "hide",
            "title": "$:/config/EditToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
            "modifier": "jd",
            "modified": "20180714131847892"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
            "created": "20180714132453956",
            "creator": "jd",
            "text": "show",
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
            "modified": "20180714132453956",
            "modifier": "jd"
        },
        "$:/plugins/jd/plainrevs/images/done-button": {
            "created": "20180714141039720",
            "creator": "jd",
            "title": "$:/plugins/jd/plainrevs/images/done-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n<g fill-rule=\"evenodd\">\n        <path d=\"M67.69959179085937,124.00743809555664 C66.24911522085938,122.55796199555664 65.35028459085937,120.55468269555664 65.35028459085937,118.34177299555664 L65.35028459085937,70.35880379555664 C65.35028459085937,65.92834339555664 68.93200659085937,62.35028839555664 73.35028459085937,62.35028839555664 C77.75957228085937,62.35028839555664 81.35028458085938,65.93582289555664 81.35028458085938,70.35880379555664 L81.35028458085938,110.35028839555665 L183.3488563808594,110.35028839555665 C187.7655973808594,110.35028839555665 191.35028438085936,113.93201039555665 191.35028438085936,118.35028839555665 C191.35028438085936,122.75957609555664 187.76792338085937,126.35028839555665 183.3488563808594,126.35028839555665 L73.35171265085937,126.35028839555665 C71.14310441085938,126.35028839555665 69.14255458085938,125.45466519555664 67.69425323085937,124.00667539555664 z\" transform=\"rotate(-45 64.17514038085936,47.17514419555664) translate(-64.17514038085938,-47.17514419555664) \"/>\n    </g><g fill-rule=\"evenodd\">\n        <path d=\"M43.10235881862292,71.2176778633562 C42.18194403889733,71.21799540211612 41.26084456731168,70.86745489508218 40.55849007196121,70.1651003997317 L25.32919530323049,54.935805631000974 C23.92301330745711,53.5296236352276 23.92417717507198,51.257184971482324 25.3264926039429,49.85486954261142 C26.72595460203754,48.45540754451677 29.003620608799807,48.45376416471414 30.407428689158564,49.8575722450729 L43.1003094626259,62.55045301854023 L75.47359402234308,30.177168458823054 C76.87542162341906,28.77534085774708 79.14996521490409,28.774399797622173 80.55228064377499,30.176715226493094 C81.95174264504355,31.57617722776163 81.95439326069994,33.852835998670116 80.55182741144506,35.25540184792503 L45.63987941172413,70.16734984764594 C44.93889015498578,70.86833910438429 44.019674993638105,71.21903131094516 43.10042234223245,71.21913019367094 z\"/>\n    </g>\n</svg>",
            "modified": "20180715053654185",
            "modifier": "jd"
        },
        "$:/plugins/jd/plainrevs/readme": {
            "created": "20180714083837795",
            "creator": "jd",
            "text": "This plugin is a simple versioning system for edited tiddlers, recorded as they are saved. It works through the following buttons:\n\n* {{$:/plugins/jd/plainrevs/images/done-button}} will not just save the tiddler as usual, but will also save the previous version of that tiddler (all fields including //tags//, except //title//).\n\n* {{$:/plugins/jd/plainrevs/images/delete-button}} will not just delete the tiddler as usual, but will also delete that tiddler's revisions.\n\nA ''Revisions'' tab can be found under ''info'' {{$:/core/images/info-button}}, and from there the following actions can be done to each revision:\n\n* → / ↓ : show the revision list as horizontal or vertical tabs\n* ''(show differences)'' / ''(hide differences)'' : shows/hides the differences between the revision and the current state of the tiddler.\n* ''(restore)'' : replace the current state of the tiddler with that revision (all fields including //tags//, except //title//).\n* ''(pin)'' / ''(unpin)'' : makes it so that the revision will not be deleted when the source tiddler is deleted, nor when the user-defined limit of revisions is reached.\n* ''(delete)'' : deletes that revision, pinned or not.\n\n!!! ''Changing the source tiddler's title''\n\n* The source tiddler's title may be changed; its rev tiddlers will always follow it as long as \"//Update (oldtitle) to (newtitle) in the tags and list fields of other tiddlers//\" is checked when editing the source tiddler's title.\n\n!!! ''Filter search for rev tiddlers''\n\nFor rev tiddlers of `Tiddler title`:\n\n`[prefix[$:/rev]search:list[Tiddler title]]`\n\n!!! ''Whitelisting / Blacklisting''\n<em class=\"tc-muted\">The options below are available at ''~$:/ControlPanel'' → ''Settings'' tab </em>\n\n{{$:/plugins/jd/plainrevs/config}}\n\n!!! ''Rev tiddler structure''\n\n```\ntitle: $:/rev/<<now YYYY0MM0DD.0hh:0MM:0ss>>\nlist: [[Title of source tiddler]]\nrev-list: listItems [[inside list field]] of [[source tiddler]]\nrev-tags: [[tag 1]] tag2\nrev-someotherfield: someotherfield's value\n... and all other fields of source tiddler, to be prefixed 'rev-'\n```\n\nIf  the title already exists, it is incremented numerically. \n\nRestoring the revision will re-copy the stored rev-fields (the \"rev-\" prefix will be removed). \n\n!!! ''Notes''\n\nThe ~$:/core ''save'' and ''delete'' buttons are neither replaced nor overwritten. You can still use them alongside this plugin's buttons by setting their visibility at ~$:/ControlPanel → Appearance → Toolbars\n\n<a target=\"blank\" href=\"http://j.d.revisions.tiddlyspot.com/\">Project Homepage on Tiddlyspot</a>",
            "title": "$:/plugins/jd/plainrevs/readme",
            "tags": "",
            "modifier": "jd",
            "modified": "20180831134625577"
        },
        "$:/plugins/jd/plainrevs/images/delete-button": {
            "created": "20180715050023671",
            "creator": "jd",
            "text": "<svg class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n<g fill-rule=\"evenodd\">\n        <rect x=\"12\" y=\"11\" width=\"105\" height=\"16\" rx=\"8\" id=\"svg_2\"/>\n        <rect x=\"40\" y=\"0\" width=\"48\" height=\"16\" rx=\"8\" id=\"svg_3\"/>\n        <rect x=\"20\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\" id=\"svg_4\"/>\n        <rect x=\"20\" y=\"112\" width=\"88\" height=\"16\" rx=\"8\" id=\"svg_5\"/>\n        <rect x=\"92\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\" id=\"svg_6\"/>\n        <rect x=\"68\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\" id=\"svg_7\"/>\n        <rect x=\"44\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\" id=\"svg_8\"/>\n        <rect x=\"30\" y=\"62\" width=\"70\" height=\"10\" rx=\"8\" id=\"svg_9\"/>\n    </g>\n</svg>",
            "title": "$:/plugins/jd/plainrevs/images/delete-button",
            "tags": "$:/tags/Image",
            "modified": "20180715103423963",
            "modifier": "jd"
        },
        "$:/plugins/jd/plainrevs/macros/save": {
            "created": "20180715075800922",
            "creator": "jd",
            "text": "\\define saveRev(from source)\n<$wikify name=\"revSource\" text=\"\"\"<$text text=\"[[\"/>$source$<$text text=\"]]\"/>\"\"\">\n<$wikify name=\"revTitle\" text=\"\"\"$:/rev/<<now YYYY0MM0DD.0hh:0MM:0ss>>\"\"\">\n<$list filter=\"[$from$!is[missing]]\" variable=\"checker\">\n<$action-createtiddler $basetitle=<<revTitle>> $savetitle=\"$:/temp/saveTid\" text={{{ [$from$get[text]] }}} list=<<revSource>>/>\n<$list filter=\"[$from$fields[]] -title -text\" variable=\"field\">\n<$action-setfield $tiddler={{$:/temp/saveTid}} $field={{{ [<field>addprefix[rev-]] }}} $value={{{ [$from$get<field>] }}}/>\n</$list>\n<$action-deletetiddler $tiddler=\"$:/temp/saveTid\"/>\n</$list>\n</$wikify>\n</$wikify>\n\\end\n\n\\define keepRev(from)\n<$wikify name=\"deleteFilter\" text=\"\"\"\n<$list filter=\"[$from$keep-rev[no]]\">[$from$listed[]prefix[$:/rev]!has[pin]]</$list>\n<$list filter=\"[$from$!keep-rev[no]]\" variable=\"notNo\">\n<$list filter=\"[$from$!keep-rev[all]]\" variable=\"notAll\">\n<$list filter=\"[$from$get[keep-rev]]\" variable=\"num\"><$text text=\"[$from$listed[]prefix[$:/rev]!has[pin]] +[butlast[\"/><<num>><$text text=\"]]\"/></$list>\n</$list>\n</$list>\n<$list filter=\"[$from$keep-rev[]]\">[$from$listed[]prefix[$:/rev]!has[pin]] +[butlast[<$list filter=\"[[$:/config/plainrevs/default]!is[missing]get[text]]\" emptyMessage=\"3\"/>]]</$list>\n\"\"\">\n<$action-deletetiddler $filter=<<deleteFilter>>/>\n</$wikify>\n\\end\n\n\\define RestoreButton()\n<$button class=\"tc-btn-invisible tc-tiddlylink\">(restore checked fields)\n<$macrocall $name=\"saveRev\" from=\"<currentTiddler>\" source=\"<<currentTiddler>>\"/>\n<$list filter=\"[[$:/config/plainrevs/restorefield]get:field[text]!prefix[no]]\" variable=\"checkFieldRestore\" emptyMessage=\"\"\"<$action-setfield $tiddler=<<currentTiddler>> text={{{ [<revTitle>get[text]] }}}/>\"\"\">\n<$action-setfield $tiddler=<<currentTiddler>> text={{{ [<revTitle>get[text]] }}}/>\n</$list>\n<$list filter=\"[<currentTiddler>fields[]] -title -text\" variable=\"field\">\n<$list filter=\"[[$:/config/plainrevs/restorefield]get:field<field>!prefix[no]]\" variable=\"checkFieldRestore\" emptyMessage=\"\"\"<$action-setfield $tiddler={{$:/temp/recentTiddler}} $field={{{ [<field>addprefix[rev-]] }}} $value={{{ [<currentTiddler>get<field>] }}}/>\"\"\">\n<$action-setfield $tiddler={{$:/temp/recentTiddler}} $field={{{ [<field>addprefix[rev-]] }}} $value={{{ [<currentTiddler>get<field>] }}}/>\n<$action-deletefield $tiddler=<<currentTiddler>> $field=<<field>>/>\n</$list>\n</$list>\n<$list filter=\"[<revTitle>fields[]prefix[rev-]]\" variable=\"field\">\n<$list filter=\"[[$:/config/plainrevs/restorefield]get:field<field>!prefix[no]]\" variable=\"checkFieldRestore\" emptyMessage=\"\"\"<$action-setfield $tiddler=<<currentTiddler>> $field={{{ [<field>removeprefix[rev-]] }}} $value={{{ [<revTitle>get<field>] }}}/>\"\"\">\n<$action-setfield $tiddler=<<currentTiddler>> $field={{{ [<field>removeprefix[rev-]] }}} $value={{{ [<revTitle>get<field>] }}}/>\n</$list>\n</$list>\n<$action-deletetiddler $tiddler=\"$:/temp/recentTiddler\"/>\n</$button>\n\\end\n\n\\define PinButton()\n<$list filter=\"[<revTitle>!has[pin]]\" emptyMessage=\"\"\"\n<$button class=\"tc-btn-invisible tc-tiddlylink\">(unpin)\n<$action-deletefield $tiddler=<<revTitle>> pin/>\n</$button>\n\"\"\">\n<$button class=\"tc-btn-invisible tc-tiddlylink\">(pin)\n<$action-setfield $tiddler=<<revTitle>> pin=\"yes\"/>\n</$button>\n</$list>\n\\end\n\n\\define DeleteButton()\n<$button class=\"tc-btn-invisible tc-tiddlylink\">(delete)\n<$action-deletetiddler $tiddler=<<revTitle>>/>\n</$button>\n\\end\n\n\\define DiffTextButton()\n<$list filter=\"[[$:/state/revTab/difftext]!text[yes]]\" variable=\"stateCheck\" emptyMessage=\"\"\"\n<$button set=\"$:/state/revTab/difftext\" setTo=\"no\" class=\"tc-btn-invisible tc-tiddlylink\">\n(hide differences)\n</$button>\n\"\"\">\n<$button set=\"$:/state/revTab/difftext\" setTo=\"yes\" class=\"tc-btn-invisible tc-tiddlylink\">\n(show differences)\n</$button>\n</$list>\n\\end\n\n\\define revTabs(type)\n<div class=\"tc-tab-set $type$\">\n<div class=\"tc-tab-buttons $type$\">\n<$list filter=\"[[$:/state/revTab/tabType]!text[vertical]]\" variable=\"tabType\" emptyMessage=\"\"\"\n<$button set=\"$:/state/revTab/tabType\" setTo=\"horizontal\" style=\"width: auto; margin-left: auto;\">→\n</$button>\n\"\"\">\n<$button set=\"$:/state/revTab/tabType\" setTo=\"vertical\" style=\"width: auto; margin-left: auto;\">↓\n</$button>\n</$list>\n<$list filter=\"[<currentTiddler>listed[]has[pin]][<currentTiddler>listed[]!has[pin]] -[!prefix[$:/rev]]\" variable=\"revTitle\">\n<$button set=\"$:/state/revTab\" setTo=<<revTitle>> selectedClass=\" tc-tab-selected\">\n<$list filter=\"[<revTitle>has[pin]]\" variable=\"checkPin\">\n・<$text text={{{ [<currentTiddler>listed[]prefix[$:/rev]has[pin]allbefore:include<revTitle>count[]] }}}/></$list>\n<$list filter=\"[<revTitle>!has[pin]]\" variable=\"checkPin\">\n<$text text={{{ [<currentTiddler>listed[]prefix[$:/rev]!has[pin]allbefore:include<revTitle>count[]] }}}/></$list>\n</$button>\n</$list>\n</div>\n<div class=\"tc-tab-divider $type$\"></div>\n<div class=\"tc-tab-content $type$\" style=\"overflow: auto;\">\n<$list filter=\"[<currentTiddler>listed[]] -[!prefix[$:/rev]]\" variable=\"revTitle\">\n<$reveal type=\"match\" state=\"$:/state/revTab\" text=<<revTitle>> tag=\"div\">\n<div style=\"padding-bottom: 0.4em; float: right;\">\n<<DiffTextButton>>&nbsp;<<RestoreButton>>&nbsp;<<PinButton>>&nbsp;<<DeleteButton>>\n</div>\n<div class=\"diff-wrapper\">\n\n<b style=\"float: left;\"><$checkbox tiddler=\"$:/config/plainrevs/restorefield\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\">&nbsp;text:&nbsp;</$checkbox></b>\n<$list filter=\"[[$:/state/revTab/difftext]!text[yes]]\" variable=\"stateCheck\">\n<div><pre><$text text={{{ [<revTitle>get[text]] }}}/></pre></div>\n</$list>\n<$list filter=\"[[$:/state/revTab/difftext]text[yes]]\" variable=\"stateCheck\">\n<$diff-text source={{{ [<revTitle>get[text]] }}} dest={{{ [<currentTiddler>get[text]] }}}/>\n</$list>\n\n<$list filter=\"[<revTitle>fields[]prefix[rev-]] +[sort[]]\" variable=\"field\">\n\n<b style=\"float: left;\"><$checkbox tiddler=\"$:/config/plainrevs/restorefield\" field=<<field>> checked=\"yes\" unchecked=\"no\" default=\"yes\">&nbsp;<$text text={{{ [<field>removeprefix[rev-]] }}}/>:&nbsp;</$checkbox></b>\n<$list filter=\"[[$:/state/revTab/difftext]!text[yes]]\" variable=\"stateCheck\">\n<div><pre><$text text={{{ [<revTitle>get<field>] }}}/></pre></div>\n</$list>\n<$list filter=\"[[$:/state/revTab/difftext]text[yes]]\" variable=\"stateCheck\">\n<$list filter=\"[<field>removeprefix[rev-]]\" variable=\"currfield\">\n<$diff-text source={{{ [<revTitle>get<field>] }}} dest={{{ [<currentTiddler>get<currfield>] }}}/>\n</$list>\n</$list>\n\n</$list>\n\n<em style=\"line-height: 2.5em;\">Field/s of currentTiddler not present in this revision (or was empty):</em>\n<$list filter=\"[<currentTiddler>fields[]] -title -text -tags -type -created -creator -modified -modifier +[addprefix[rev-]] +[sort[]]\" variable=\"revField\">\n<$list filter=\"[<revTitle>!has<revField>]\" variable=\"fieldCheck\" >\n<$list filter=\"[<revField>removeprefix[rev-]]\" variable=\"field\">''<<field>>'', \n</$list>\n</$list>\n</$list>\n\n<em style=\"line-height: 2.5em;\">Field/s of this revision not present in currentTiddler (or is empty):</em>\n<$list filter=\"[<revTitle>fields[]prefix[rev-]] +[removeprefix[rev-]] +[sort[]] -tags -type\" variable=\"revField\">\n<$list filter=\"[<currentTiddler>!has<revField>]\" variable=\"fieldCheck\" >\n<$list filter=\"[<revField>]\" variable=\"field\">''<<field>>'', \n</$list>\n</$list>\n</$list>\n\n</div>\n</$reveal>\n</$list>\n</div>\n</div>\n\\end",
            "title": "$:/plugins/jd/plainrevs/macros/save",
            "tags": "$:/tags/Macro",
            "modifier": "jd",
            "modified": "20180717155443896"
        },
        "$:/plugins/jd/plainrevs/config": {
            "text": "\\define num()\n<$text text={{{ [[$:/config/plainrevs/default]!is[missing]get[text]] }}}/>\n<$text text={{{ [[$:/config/plainrevs/default]is[missing]removeprefix[$:/config/plainrevs/default]addprefix[3]] }}}/>\n\\end\n\n<style>\n.pr-config-wrapper input[type=\"number\"] { width: 3em; }\n</style>\n\n<$radio tiddler=\"$:/config/plainrevs/whitelist\" value=\"yes\"> Whitelist system</$radio>\n\n<$reveal type=\"match\" state=\"$:/config/plainrevs/whitelist\" text=\"yes\" tag=\"div\" class=\"pr-config-wrapper\" animate=\"yes\" retain=\"yes\">\n\n<<<\nIn the Whitelist system, no __future__ revision will be kept for tiddlers without the ''keep-rev'' field, nor when it exists but is empty. \n\nSelecting this will not delete currently existing revisions.\n<<<\n\n</$reveal>\n\n<$radio tiddler=\"$:/config/plainrevs/whitelist\" value=\"no\"> Blacklist system</$radio>\n\n<$reveal type=\"nomatch\" state=\"$:/config/plainrevs/whitelist\" text=\"yes\" tag=\"div\" class=\"pr-config-wrapper\" animate=\"yes\" retain=\"yes\">\n\n<<<\nIn the Blacklist system, a number of revisions will be kept for tiddlers without the ''keep-rev'' field, or when it exists but is empty.\n\nDefault number of revisions to keep when the tiddler has no ''keep-rev'' field: <$edit-text tiddler=\"$:/config/plainrevs/default\" tag=\"input\" type=\"number\" default=\"3\"/>\n<<<\n\n</$reveal>\n\n!!! ''keep-rev field''\n\nThe ''keep-rev'' field of a tiddler will define how many revisions will be kept for that tiddler. Here are possible values for the field:\n\n* `no`: no revision will be saved\n\n* `all`: all revisions will be saved / no limit\n\n* any `integer` greater than `0`: that number of revisions will be saved",
            "title": "$:/plugins/jd/plainrevs/config",
            "tags": "$:/tags/ControlPanel/Settings",
            "modifier": "jd",
            "modified": "20180716081157055",
            "creator": "jd",
            "created": "20180716065308401",
            "caption": "Plainrevs"
        },
        "$:/language/Buttons/jd/Delete/Hint": {
            "title": "$:/language/Buttons/jd/Delete/Hint",
            "created": "20180829113622274",
            "modified": "20180829115204340",
            "tags": "$:/language/Buttons/jd/Delete/Hint",
            "text": "Delete this tiddler and ALL revisions"
        },
        "$:/language/Buttons/jd/Delete/Caption": {
            "title": "$:/language/Buttons/jd/Delete/Caption",
            "created": "20180829113508656",
            "modified": "20180829115159620",
            "tags": "$:/language/Buttons/jd/Delete/Hint",
            "text": "delete this and ALL revisions"
        },
        "$:/plugins/jd/plainrevs/Buttons/delete": {
            "created": "20180713175814792",
            "creator": "jd",
            "title": "$:/plugins/jd/plainrevs/Buttons/delete",
            "caption": "{{$:/plugins/jd/plainrevs/images/delete-button}} {{$:/language/Buttons/jd/Delete/Caption}}",
            "description": "{{$:/language/Buttons/jd/Delete/Hint}}",
            "modified": "20180831122536725",
            "modifier": "jd",
            "tags": "$:/tags/EditToolbar $:/tags/ViewToolbar",
            "text": "<$button message=\"tm-delete-tiddler\" tooltip={{$:/language/Buttons/jd/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-deletetiddler $filter=\"[<currentTiddler>listed[]prefix[$:/rev]!has[pin]]\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/plugins/jd/plainrevs/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/jd/Delete/Caption}}/></span>\n</$list>\n</$button>"
        }
    }
}
{
    "tiddlers": {
        "$:/plugins/tg/ro/advanced-search-button-style": {
            "created": "20150519114003182",
            "text": "/* Hide advanced search button */\n.tc-image-advanced-search-button.tc-image-button {\n     padding-left: 15px;\n}",
            "type": "text/css",
            "title": "$:/plugins/tg/ro/advanced-search-button-style",
            "tags": "$:/tags/advanced-search-button",
            "modifier": "TonGerner",
            "modified": "20191230134649191",
            "creator": "TonGerner"
        },
        "$:/plugins/tg/ro/change-settings": {
            "created": "20161108100322449",
            "text": "!!4) Settings\nTo customise the behaviour of TiddlyWiki\n\n{{$:/snippets/viewswitcher}}\n{{$:/plugins/tg/ro/sidebar-layout}}\n{{$:/core/ui/ControlPanel/Settings}}\n",
            "title": "$:/plugins/tg/ro/change-settings",
            "tags": "",
            "modified": "20191230134715488",
            "caption": "4. Settings"
        },
        "$:/plugins/tg/ro/help": {
            "created": "20140716184603499",
            "text": "!! Help\n\nBefore you 'publish' your ~TiddlyWiki:\n\n# Make a backup of your wiki\n# Get a defined start-up situation for your TW:\n#* Define your starting tiddler(s) in [[$:/DefaultTiddlers]]\n#* If required, define the state of the sidebar tabs\n# Follow the procedure given in the following tabs (1 - 5).\n\n<<<\n''Note:''\n\n@@.RED When in readonly mode@@, search in ''~AdvancedSearch'' (click the hidden, but still active!) {{$:/core/images/advanced-search-button}} (next to the search box), tab ''Shadows'':\n\n* for ''Publish'' to have access to:\n** $:/plugins/tg/ro/publish\n\nor\n\n* for ''~ControlPanel'' to have access to:\n** ''$:/ControlPanel > Appearance > Publish''\n\nto recover tabs, unhide buttons, ...\n<<<",
            "title": "$:/plugins/tg/ro/help",
            "modifier": "TonGerner",
            "modified": "20191230134741078",
            "creator": "TonGerner",
            "caption": "Help"
        },
        "$:/plugins/tg/ro/hide-sidebar-buttons": {
            "created": "20161108100124814",
            "text": "!! Show/hide sidebar buttons\nUncheck to hide the appropriate sidebar button\n\n|Button |visible |note |h\n|Sidebar button ({{$:/core/images/chevron-left}}/{{$:/core/images/chevron-right}}) | <$checkbox tiddler=\"$:/core/ui/TopBar/menu\" tag=\"$:/tags/TopRightBar\"/> | 1 |\n|Advanced search button ({{$:/core/images/advanced-search-button}}) | <$checkbox tiddler=\"$:/plugins/tg/ro/advanced-search-button-style\" tag=\"$:/tags/Stylesheet\" invertTag=\"yes\"/> | 1 |\n|Publish button  ({{$:/plugins/tg/ro/images/publish}}) | <$checkbox tiddler=\"$:/plugins/tg/ro/publish-button\" tag=\"$:/tags/TopRightBar\"/> | 2 |\n\n<<<\n''Note:''\n\n# Although 'invisible' (`display:none;`), ''Sidebar'' and ''Advanced search'' buttons stay active!\n# The ''Publish'' button is invisible and inactive (`$:/tags/TopRightBar` removed)\n<<<",
            "title": "$:/plugins/tg/ro/hide-sidebar-buttons",
            "tags": "",
            "modified": "20191230134819484",
            "caption": "3. Sidebar buttons"
        },
        "$:/plugins/tg/ro/hide-sidebar-tabs": {
            "created": "20161108100017749",
            "text": "!! Show/hide sidebar tabs\nUncheck to hide the appropriate sidebar tab\n\n|Tab |visible |h\n|Open | <$checkbox tiddler=\"$:/core/ui/SideBar/Open\" tag=\"$:/tags/SideBar\"/> |\n|Recent | <$checkbox tiddler=\"$:/core/ui/SideBar/Recent\" tag=\"$:/tags/SideBar\"/> |\n|Tools | <$checkbox tiddler=\"$:/core/ui/SideBar/Tools\" tag=\"$:/tags/SideBar\"/> |\n|More | <$checkbox tiddler=\"$:/core/ui/SideBar/More\" tag=\"$:/tags/SideBar\"/> |\n\n",
            "title": "$:/plugins/tg/ro/hide-sidebar-tabs",
            "tags": "",
            "modified": "20191230134837792",
            "caption": "2. Sidebar tabs"
        },
        "$:/plugins/tg/ro/hide-toolbar-buttons": {
            "created": "20161108095713019",
            "text": "!! Hide toolbar buttons\n\nDisable in Control panel (Appearance > Toolbars) the buttons you do not need in read-only mode.\n\n''//Disable at least the following buttons://''\n\n* ~ViewToolbar\n** Edit button {{$:/core/images/edit-button}}\n** More button {{$:/core/images/down-arrow}}\n** Info button {{$:/core/images/info-button}} (Tools tab contains button configuration!)\n* Page control buttons\n** New tiddler button {{$:/core/images/new-button}}\n** Control panel button {{$:/core/images/options-button}}\n** Save button {{$:/core/images/save-button}}\n** More button {{$:/core/images/down-arrow}}\n\n{{$:/core/ui/ControlPanel/Toolbars}}",
            "title": "$:/plugins/tg/ro/hide-toolbar-buttons",
            "tags": "",
            "modified": "20191230134859443",
            "caption": "1. Buttons"
        },
        "$:/plugins/tg/ro/icon": {
            "created": "20170322100000766",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:svg=\"http://www.w3.org/2000/svg\">\n <metadata id=\"metadata7\">image/svg+xml</metadata>\n <g>\n  <g stroke=\"null\" id=\"layer1\">\n   <path stroke=\"#a0a0ff\" d=\"m62.98237,124.8691l-52.98313,-30.489l0,-60.97796l52.98313,-30.48897l52.98313,30.48897l0,60.97796l-52.98313,30.489z\" id=\"path4142\" stroke-miterlimit=\"4\" stroke-width=\"1.2218\" fill=\"#a0a0ff\"/>\n   <g stroke=\"null\" transform=\"matrix(3.659923335400057,0,0,3.647856469142962,20.327076261330674,1218.0946222935067) \" id=\"g4657\">\n    <path stroke=\"null\" d=\"m3.22135,-313.27808l4.72483,4.70973l10.79962,-10.7651l-4.72483,-4.70973l-10.79962,10.7651zm13.51982,-13.47661l-1.99364,1.98727l4.72409,4.70899l1.99364,-1.98727c0.6766,-0.67444 -0.00001,-1.34889 -0.00001,-1.34889l-3.37088,-3.3601c0,0 -0.6766,-0.67444 -1.3532,0zm-14.18411,14.11637l-0.99229,5.72125l5.7273,-1.00138l-4.735,-4.71987l-0.00001,0z\" id=\"editor_pencil_pen_edit_write_glyph\" fill=\"#000000\"/>\n    <rect stroke=\"null\" stroke-width=\"null\" stroke-linejoin=\"null\" stroke-linecap=\"null\" x=\"-236.34445\" y=\"-219.86093\" width=\"26.11743\" height=\"2.10315\" id=\"svg_1\" transform=\"matrix(0.69825835,0.71584585,-0.71584585,0.69825835,11.119094,-4.6050809) \"/>\n   </g>\n  </g>\n </g>\n</svg>",
            "type": "image/svg+xml",
            "title": "$:/plugins/tg/ro/icon",
            "tags": "",
            "modified": "20191230134918451"
        },
        "$:/plugins/tg/ro/image-save-button": {
            "created": "20140715185836189",
            "text": "<svg class=\"tgc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M120.78304,34.329058 C125.424287,43.1924006 128.049406,53.2778608 128.049406,63.9764502 C128.049406,99.3226742 99.3956295,127.97645 64.0494055,127.97645 C28.7031816,127.97645 0.0494055385,99.3226742 0.0494055385,63.9764502 C0.0494055385,28.6302262 28.7031816,-0.0235498012 64.0494055,-0.0235498012 C82.8568763,-0.0235498012 99.769563,8.08898558 111.479045,21.0056358 L114.159581,18.3250998 C117.289194,15.1954866 122.356036,15.1939641 125.480231,18.3181584 C128.598068,21.4359957 128.601317,26.5107804 125.473289,29.6388083 L120.78304,34.329058 Z M108.72451,46.3875877 C110.870571,51.8341374 112.049406,57.767628 112.049406,63.9764502 C112.049406,90.4861182 90.5590735,111.97645 64.0494055,111.97645 C37.5397375,111.97645 16.0494055,90.4861182 16.0494055,63.9764502 C16.0494055,37.4667822 37.5397375,15.9764502 64.0494055,15.9764502 C78.438886,15.9764502 91.3495036,22.308215 100.147097,32.3375836 L58.9411255,73.5435552 L41.975581,56.5780107 C38.8486152,53.4510448 33.7746915,53.4551552 30.6568542,56.5729924 C27.5326599,59.6971868 27.5372202,64.7670668 30.6618725,67.8917192 L53.279253,90.5090997 C54.8435723,92.073419 56.8951519,92.8541315 58.9380216,92.8558261 C60.987971,92.8559239 63.0389578,92.0731398 64.6049211,90.5071765 L108.72451,46.3875877 Z\"></path>\n    </g>\n</svg>",
            "creator": "TonGerner",
            "modified": "20191230134931683",
            "modifier": "TonGerner",
            "title": "$:/plugins/tg/ro/image-save-button"
        },
        "$:/plugins/tg/ro/images/publish": {
            "created": "20170322105731731",
            "text": "<svg class=\"tgc-publish-ro tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 486 438\">\n<style>\n  .ro {\n    fill:none;\n    stroke-width:40;\n    stroke:#FF00FF;\n  }\n</style>\n    <path class=\"ro\" d=\"m203.2 81.6l-141.6 0 0 311.7 313.3 0 0-139.5\"/>\n    <path class=\"ro\" d=\"m176.4 279.6l0-60 188-188 60.5 60.5 -189.5 189.5 -59 0\"/>\n    <path class=\"ro\" d=\"m326.9 69l61.1 61.1\"/>\n</svg>",
            "title": "$:/plugins/tg/ro/images/publish",
            "tags": "",
            "modified": "20191230134946688"
        },
        "$:/plugins/tg/ro/license": {
            "created": "20180124175202510",
            "text": "[[Readonly plugin|http://tongerner.tiddlyspot.com/#Readonly%20plugin]] &copy; Ton Gerner &mdash; 2018-2020\n\nMIT License: https://opensource.org/licenses/MIT\n",
            "title": "$:/plugins/tg/ro/license",
            "tags": "",
            "modified": "20191230135005582"
        },
        "$:/plugins/tg/ro/publish": {
            "created": "20140715185723459",
            "text": "!! Readonly plugin\n<<tabs \"$:/plugins/tg/ro/help $:/plugins/tg/ro/hide-toolbar-buttons $:/plugins/tg/ro/hide-sidebar-tabs  $:/plugins/tg/ro/hide-sidebar-buttons $:/plugins/tg/ro/change-settings $:/plugins/tg/ro/save\" \"Help\">>\n\n\n\n\n\n",
            "title": "$:/plugins/tg/ro/publish",
            "tags": "$:/tags/ControlPanel/Appearance",
            "modifier": "TonGerner",
            "modified": "20191230135048784",
            "creator": "TonGerner",
            "caption": "Publish"
        },
        "$:/plugins/tg/ro/publish-button": {
            "created": "20170506162930803",
            "text": "<$button class=\"tc-btn-invisible\" tooltip=\"Publish read-only\">\n<$action-sendmessage $message=\"tm-open-window\" $param=\"$:/plugins/tg/ro/publish\" height=\"700px\" width=\"550px\"/>\n{{$:/plugins/tg/ro/images/publish}}\n</$button>",
            "title": "$:/plugins/tg/ro/publish-button",
            "tags": "$:/tags/publish-button $:/tags/TopRightBar",
            "modifier": "TonGerner",
            "modified": "20191231184447737",
            "list-before": "$:/core/ui/TopBar/menu",
            "creator": "TonGerner"
        },
        "$:/plugins/tg/ro/readme": {
            "created": "20140821172500339",
            "text": "A plugin to make ~TiddlyWiki read-only.\n\nYou can hide:\n\n* ''All'' toolbar buttons\n* 'Sidebar' button (to switch Sidebar) and 'Advanced search' button (next to Search)\n* The standard Sidebar tabs.\n\nClick the Publish button {{$:/plugins/tg/ro/images/publish}} next to the sidebar button {{$:/core/images/chevron-left}}/{{$:/core/images/chevron-right}} to start making your TW 'publish-ready'.  A new window with four tabs opens. Follow the 5 steps.\n\n<<<\n''Note:''\n\n* [[$:/plugins/tg/ro/publish]] is also available as a tab in $:/ControlPanel (''$:/ControlPanel > Appearance > Publish'')\n* @@.RED Although you can hide the 'Sidebar' and 'Advanced Search' button, they remain 'active'!@@\n* @@.RED When in readonly mode@@, search in ''~AdvancedSearch'' (click the hidden (but still active!) {{$:/core/images/advanced-search-button}} (next to the search box), tab ''Shadows'':\n\n** for ''Publish'' to have access to:\n*** $:/plugins/tg/ro/publish\n** ''or''\n** for ''~ControlPanel'' to have access to:\n*** ''$:/ControlPanel > Appearance > Publish''\n\n:to recover tabs, unhide buttons, ...\n<<<\n\n       ",
            "title": "$:/plugins/tg/ro/readme",
            "modifier": "TonGerner",
            "modified": "20191230135209746",
            "creator": "TonGerner"
        },
        "$:/plugins/tg/ro/save": {
            "created": "20161108100434387",
            "text": "! Save\n\n{{$:/core/ui/ControlPanel/Saving}}\n\n@@.BLUE ''Save''@@ {{$:/plugins/tg/ro/save-button}}\n",
            "title": "$:/plugins/tg/ro/save",
            "tags": "",
            "modified": "20191230135228815",
            "caption": "5. Save"
        },
        "$:/plugins/tg/ro/save-button": {
            "created": "20170405200808621",
            "text": "<$button message=\"tm-save-wiki\" param={{$:/config/SaveWikiButton/Template}}>\n<span class=\"tc-dirty-indicator\">\n{{$:/plugins/tg/ro/image-save-button}}\n</span>\n</$button>",
            "title": "$:/plugins/tg/ro/save-button",
            "tags": "",
            "modifier": "TonGerner",
            "modified": "20191230135303043",
            "creator": "TonGerner"
        },
        "$:/plugins/tg/ro/sidebar-button-style": {
            "created": "20140715185800387",
            "text": "/* Hide sidebar button */\nsvg.tc-image-chevron-left {\n     display: none;\n}\n\nsvg.tc-image-chevron-right {\n     display: none;\n}\n",
            "type": "text/css",
            "title": "$:/plugins/tg/ro/sidebar-button-style",
            "tags": "$:/tags/sidebar-button",
            "modifier": "TonGerner",
            "modified": "20191230135322974",
            "creator": "TonGerner"
        },
        "$:/plugins/tg/ro/sidebar-layout": {
            "created": "20170307110734575",
            "text": "\\define lingo-base() $:/language/ThemeTweaks/\n\nSidebar layout: <$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\"fluid-fixed\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select>\n",
            "title": "$:/plugins/tg/ro/sidebar-layout",
            "tags": "",
            "modified": "20191230135338759"
        },
        "$:/plugins/tg/ro/styles": {
            "created": "20161104132710834",
            "text": "/* Slider style */\n\nhtml .tgc-slider {\n     color: #5778D8;\n     font-weight: bold;\n}\n\n.tgc-slider:hover {\n     color: #5778D8;\n     text-decoration: underline;\n}\n\n.RED {\n     color: red;\n     font-weight: bold;\n}",
            "title": "$:/plugins/tg/ro/styles",
            "tags": "$:/tags/Stylesheet",
            "modified": "20191230135353718",
            "type": "text/css"
        }
    }
}
/* Hide advanced search button */
.tc-image-advanced-search-button.tc-image-button {
     padding-left: 15px;
}
<$button class="tc-btn-invisible" tooltip="Publish read-only">
<$action-sendmessage $message="tm-open-window" $param="$:/plugins/tg/ro/publish" height="700px" width="550px"/>
{{$:/plugins/tg/ro/images/publish}}
</$button>
{
    "tiddlers": {
        "$:/plugins/tiddlywiki/github-fork-ribbon/readme": {
            "title": "$:/plugins/tiddlywiki/github-fork-ribbon/readme",
            "text": "This plugin provides a diagonal ribbon across the corner of the window. It resembles the design used by ~GitHub for their \"Fork me on ~GitHub\" ribbons.\n\nThe ribbon can be positioned over any corner, and can incorporate user defined text, colours and a link.\n\nThe CSS stylesheet is adapted from work by Simon Whitaker:\n\nhttps://github.com/simonwhitaker/github-fork-ribbon-css/\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/github-fork-ribbon]]\n"
        },
        "$:/plugins/tiddlywiki/github-fork-ribbon/styles": {
            "title": "$:/plugins/tiddlywiki/github-fork-ribbon/styles",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "/* Left will inherit from right (so we don't need to duplicate code */\n.github-fork-ribbon {\n  /* The right and left lasses determine the side we attach our banner to */\n  position: absolute;\n\n  /* Add a bit of padding to give some substance outside the \"stitching\" */\n  padding: 2px 0;\n\n  /* Set the base colour */\n  background-color: #a00;\n\n  /* Set a gradient: transparent black at the top to almost-transparent black at the bottom */\n  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.00)), to(rgba(0, 0, 0, 0.15)));\n  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\n  background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\n  background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\n  background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\n  background-image: linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\n  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#000000', EndColorStr='#000000');\n\n  /* Add a drop shadow */\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.5);\n  box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.5);\n\n  z-index: 999;\n  pointer-events: auto;\n}\n\n.github-fork-ribbon a, .github-fork-ribbon a.tc-tiddlylink,\n.github-fork-ribbon a:hover, .github-fork-ribbon a.tc-tiddlylink:hover  {\n  /* Set the font */\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 13px;\n  font-weight: 700;\n  color: white;\n\n  /* Set the text properties */\n  text-decoration: none;\n  text-shadow: 0 -1px rgba(0,0,0,0.5);\n  text-align: center;\n\n  /* Set the geometry. If you fiddle with these you'll also need to tweak the top and right values in #github-fork-ribbon. */\n  width: 200px;\n  line-height: 20px;\n\n  /* Set the layout properties */\n  display: inline-block;\n  padding: 2px 0;\n\n  /* Add \"stitching\" effect */\n  border-width: 1px 0;\n  border-style: dotted;\n  border-color: rgba(255,255,255,0.7);\n}\n\n.github-fork-ribbon-wrapper {\n  width: 150px;\n  height: 150px;\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n  z-index: 999;\n  pointer-events: none;\n}\n\n.github-fork-ribbon-wrapper.fixed {\n  position: fixed;\n}\n\n.github-fork-ribbon-wrapper.left {\n  left: 0;\n}\n\n.github-fork-ribbon-wrapper.right {\n  right: 0;\n}\n\n.github-fork-ribbon-wrapper.left-bottom {\n  position: fixed;\n  top: inherit;\n  bottom: 0;\n  left: 0;\n}\n\n.github-fork-ribbon-wrapper.right-bottom {\n  position: fixed;\n  top: inherit;\n  bottom: 0;\n  right: 0;\n}\n\n.github-fork-ribbon-wrapper.right .github-fork-ribbon {\n  top: 42px;\n  right: -43px;\n\n  /* Rotate the banner 45 degrees */\n  -webkit-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n\n.github-fork-ribbon-wrapper.left .github-fork-ribbon {\n  top: 42px;\n  left: -43px;\n\n  /* Rotate the banner -45 degrees */\n  -webkit-transform: rotate(-45deg);\n  -moz-transform: rotate(-45deg);\n  -o-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n\n\n.github-fork-ribbon-wrapper.left-bottom .github-fork-ribbon {\n  top: 80px;\n  left: -43px;\n\n  /* Rotate the banner -45 degrees */\n  -webkit-transform: rotate(45deg);\n  -moz-transform: rotate(45deg);\n  -o-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n\n.github-fork-ribbon-wrapper.right-bottom .github-fork-ribbon {\n  top: 80px;\n  right: -43px;\n\n  /* Rotate the banner -45 degrees */\n  -webkit-transform: rotate(-45deg);\n  -moz-transform: rotate(-45deg);\n  -o-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n"
        },
        "$:/plugins/tiddlywiki/github-fork-ribbon/usage": {
            "title": "$:/plugins/tiddlywiki/github-fork-ribbon/usage",
            "text": "Copy appropriate chunks on a new tiddler and tag it `$:/tags/PageControls`. Name of the new tiddler does not matter. Only the tag matters.\n\n```\n<!-- TOP RIGHT RIBBON: START COPYING HERE -->\n<div class=\"github-fork-ribbon-wrapper right\"><div class=\"github-fork-ribbon\"><a href=\"https://github.com/simonwhitaker/github-fork-ribbon-css\">Fork me on ~GitHub</a></div>\n</div>\n<!-- TOP RIGHT RIBBON: END COPYING HERE -->\n\n<!-- TOP LEFT RIBBON: START COPYING HERE -->\n<div class=\"github-fork-ribbon-wrapper left\"><div class=\"github-fork-ribbon\"><a href=\"https://github.com/simonwhitaker/github-fork-ribbon-css\">Fork me on ~GitHub</a></div>\n</div>\n<!-- TOP LEFT RIBBON: END COPYING HERE -->\n\n\n<!-- BOTTOM RIGHT RIBBON: START COPYING HERE -->\n<div class=\"github-fork-ribbon-wrapper right-bottom\"><div class=\"github-fork-ribbon\"><a href=\"https://github.com/simonwhitaker/github-fork-ribbon-css\">Fork me on ~GitHub</a></div>\n</div>\n<!-- BOTTOM RIGHT RIBBON: END COPYING HERE -->\n\n<!-- BOTTOM LEFT RIBBON: START COPYING HERE -->\n<div class=\"github-fork-ribbon-wrapper left-bottom\"><div class=\"github-fork-ribbon\"><a href=\"https://github.com/simonwhitaker/github-fork-ribbon-css\">Fork me on ~GitHub</a></div>\n</div>\n<!-- BOTTOM LEFT RIBBON: END COPYING HERE -->\n```\n"
        }
    }
}
https://discord.gg/bFcky8a
Онлайн-справочник ~DnDno
yes
no
hide
show
$:/core/ui/EditTemplate/body/preview/output
no
$:/core/ui/AdvancedSearch/Shadows
$:/plugins/tg/ro/publish
$:/core/ui/ControlPanel/Basics
Калаштар
$:/plugins/tg/ro/save
$:/core/ui/ControlPanel/Saving/GitHub
$:/core/ui/ControlPanel/Appearance
Описание людей
$:/core/ui/ControlPanel/Saving/GitHub
Человек-специалист
$:/core/ui/MoreSideBar/All
Содержание
Описание кованых
Лёгкий доспех
Благословенный боец
Описание чистокровных юань-ти
Коллегия Доблести
Описание гоблинов
Практика Астрального тела
Описание варваров
Описание дженази
Описание шифтеров
Круг Звёзд
Военная магия
Описание медвежатников
Описание перевёртышей
1. Продайте добычу
Орден Истребителей призраков
Улучшение показателей
Бледный эльф
Вставание
Описание тифлингов
Классовые умения монахов
Горный орк
Арканный трюкач
Охотник
Алхимик
Воплощающий мудрость ааракокра
Кенку покражи
Полудварфы
Домен Бури
Описание гномов
Классовые умения колдунов
Взаимодействие с предметом
Описание драконорождённых
Закалённый драконорождённый
Атака
Арканный лучник
Азартный игрок
Классовые умения паладинов
Закалённый драконорождённый
Бледный эльф
Blood Curse of Binding
Никудышный
Классовые умения волшебников
Быстроногий шифтер
По владению
Описание тритонов
Людоящер-аспид
Классовые умения чародеев
Волк
Бой вслепую
Описание табакси
Арканный лучник
Описание тортлов
Бой вслепую
Благословенный боец
Круг Звёзд
Вставание
Архифея
Захват
Классовые умения воинов
Описание ааракокр
Воровские инструменты
Договор гримуара
Воскрешение
Классовые умения плутов
Описание изобретателей
Бой вслепую
Классовые умения друидов
Бессознательный
Описание фирболгов
Алхимик
Бой вслепую
Глубинный гном
Людоящер-острозуб
Орден Истребителей призраков
Клятва Древних
Захват
Аасимар-защитник
Клятва Древних
Описание кенку
Описание
Описание бардов
Описание эльфов
Божественный канал
Домен Бури
Описание голиафов
Инструменты ремесленников
Отступление
Снятие Стресса
Путь Берсерка
Бой вслепую
Зоркий глаз
Инструменты алхимика
Описание людоящеров
Договор гримуара
Шаг 1: План
Коллегия Доблести
Описание аасимаров
Путь кенсея
Классовые умения следопытов
Волк
Описание орков
Горный орк
Хиты
Разбивка лагеря
Описание гитов
Практика Астрального тела
Аккуратное заклинание
Путь Берсерка
Долговязый полурослик
Арканный трюкач
Аберрантный разум
Описание полуросликов
Описание хобгоблинов
Охотник
12.06.21
Тифлинг Асмодея
Зоркий глаз
Описание дварфов
Архифея
Путь Кенсея
Быстроногий шифтер
Хиты
Описание кровавых охотников
Аберрантный разум
Blood Curse of Binding
Классовые умения жрецов
Дженази воды
Военная магия
Бой вслепую
Описание кобольдов
Аккуратное заклинание
Игры
Приготовление пищи
Азартные игры
Азартные игры
$:/core/ui/ControlPanel/Toolbars/ViewToolbar
close
close
close
close
close
close
close
open
close
close
close
close
close
close
close
close
close
no

control
{
    "tiddlers": {
        "$:/info/browser": {
            "title": "$:/info/browser",
            "text": "yes"
        },
        "$:/info/node": {
            "title": "$:/info/node",
            "text": "no"
        },
        "$:/info/url/full": {
            "title": "$:/info/url/full",
            "text": "file:///D:/D&D/Tiddlywiki/tiddlywiki.html"
        },
        "$:/info/url/host": {
            "title": "$:/info/url/host",
            "text": ""
        },
        "$:/info/url/hostname": {
            "title": "$:/info/url/hostname",
            "text": ""
        },
        "$:/info/url/protocol": {
            "title": "$:/info/url/protocol",
            "text": "file:"
        },
        "$:/info/url/port": {
            "title": "$:/info/url/port",
            "text": ""
        },
        "$:/info/url/pathname": {
            "title": "$:/info/url/pathname",
            "text": "/D:/D&D/Tiddlywiki/tiddlywiki.html"
        },
        "$:/info/url/search": {
            "title": "$:/info/url/search",
            "text": ""
        },
        "$:/info/url/origin": {
            "title": "$:/info/url/origin",
            "text": "file://"
        },
        "$:/info/browser/screen/width": {
            "title": "$:/info/browser/screen/width",
            "text": "2560"
        },
        "$:/info/browser/screen/height": {
            "title": "$:/info/browser/screen/height",
            "text": "1440"
        },
        "$:/info/browser/language": {
            "title": "$:/info/browser/language",
            "text": "ru"
        }
    }
}





































































































loaded
$:/themes/tiddlywiki/centralised
{
    "tiddlers": {
        "$:/themes/jd/Whitespace/template/sidebar": {
            "created": "20171201152819844",
            "creator": "JD",
            "text": "\\define wsconfig(name) $:/config/Whitespace/$name$\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\\define config-title-sidebar()\n$:/config/SideBar/Visibility/$(currentTiddler)$\n\\end\n\\define drop-actions()\n<$action-listops $tiddler=\"$:/tags/SideBar\" $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n<$fieldmangler tiddler=<<actionTiddler>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param=\"$:/tags/SideBar\"/>\n</$fieldmangler>\n\\end\n\\define drop-actions-PageControls-buttons()\n<$action-listops $tiddler=\"$:/tags/PageControls\" $subfilter=\"+[insertbefore:listItem<actionTiddler>]\"/>\n\\end\n\\define sidebar-title()\n<$list filter=\"[all[shadows+tiddlers]!has[draft.of]is[current]has[caption]]\">{{!!caption}}</$list>\n<$list filter=\"[all[shadows+tiddlers]!has[draft.of]is[current]!has[caption]]\">{{!!title}}</$list>\n\\end\n\\define control-panel-button(class)\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$action-setfield $tiddler=<<wsconfig search>> text=\"no\"/>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\\define NewTidActions()\n<$action-setfield $tiddler=<<wsconfig search>> text=\"no\"/>\n<$action-createtiddler $basetitle={{$:/temp/search}} $savetitle=\"$:/temp/NewTidTitle\"/>\n<$action-sendmessage $message=\"tm-edit-tiddler\" $param={{$:/temp/NewTidTitle}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTidTitle\"/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n\\end\n\\define ws-page-controls()\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$droppable actions=<<drop-actions-PageControls-buttons>>>\n<div class=\"tc-droppable-placeholder\">\n&nbsp;\n</div>\n<$list filter=\"[<config-title>!text[hide]]\" variable=\"checker\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$draggable tiddler=<<listItem>> tag=\"span\"><$transclude tiddler=<<listItem>>/></$draggable>\n</$set>\n</$list>\n</$droppable>\n</$list>\n\\end\n\n<div class=\"vertical-controls\">\n<<ws-page-controls>>\n</div>\n\n<div class=\"jd-sidebar\">\n<div class=\"jd-header\">\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip=\"Unfix sidebar\" class=\"tc-btn-invisible\">{{$:/core/images/menu-button}}</$button>\n</$reveal>\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip=\"Fix sidebar\" class=\"tc-btn-invisible\">{{$:/core/images/menu-button}}</$button>\n</$reveal>\n<span class=\"header-buttons\">\n<<ws-page-controls>>\n</span>\n</div>\n<$list filter=\"[[$:/config/Whitespace/show-sitetitle]!text[no]]\" variable=\"checker\">\n<div class=\"jd-sitetitle-wrapper\">\n<$list filter=\"[[$:/SiteTitle]!text[]]\" variable=\"checker\">\n<div class=\"jd-sitetitle\"><$transclude tiddler=\"$:/SiteTitle\"/></div>\n</$list>\n<$list filter=\"[[$:/SiteSubtitle]!text[]]\" variable=\"checker\">\n<div class=\"jd-sitesubtitle\"><$transclude tiddler=\"$:/SiteSubtitle\"/></div>\n</$list>\n</div>\n</$list>\n<div class=\"jd-sidebar-column\">\n<div class=\"jd-search-wrapper\">\n<div class=\"jd-search-header\">\n<$keyboard class=\"jd-searchbar-wrapper\" tag=\"div\" key=\"ctrl+space\" actions=<<NewTidActions>>>\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\" placeholder=\"Search / create\" class=\"jd-searchbar\"/>\n</$keyboard>\n<div class=\"jd-searchbar-buttons\">\n<$list filter=\"[[$:/temp/search]!text[]]\">\n<$button tooltip=\"Create new tiddler with this title\" class=\"tc-btn-invisible\" actions=<<NewTidActions>>>\n{{$:/core/images/new-button}}\n</$button>\n<$button tooltip=\"Clear searchbar\" class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=<<wsconfig search>> text=\"no\"/>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text=\"\"/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$list>\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n</div>\n</div>\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n<div class=\"jd-search-results\">\n<$scrollable fallthrough=\"no\" class=\"results\">\n<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n</$list>\n</$set>\n</$scrollable>\n</div>\n</$reveal>\n</div>\n</div>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" variable=\"currentTiddler\">\n<$droppable actions=<<drop-actions>>>\n<div class=\"tc-droppable-placeholder\">\n&nbsp;\n</div>\n<div class=\"jd-sidebar-column\">\n<div class=\"jd-sidebar-column-header\">\n<$list variable=\"checker\" filter=\"[<config-title-sidebar>!text[hide]]\" emptyMessage=\"\"\"\n<$button set=<<config-title-sidebar>> setTo=\"show\" dragTiddler=<<currentTiddler>> class=\"tc-btn-invisible\" tag=\"text\">\n<<sidebar-title>>\n</$button>\n\"\"\">\n<$button set=<<config-title-sidebar>> setTo=\"hide\" dragTiddler=<<currentTiddler>> class=\"tc-btn-invisible\" tag=\"text\">\n<<sidebar-title>>\n</$button>\n</$list>\n<div class=\"jd-sidebar-column-header-buttons\">\n<$button tooltip=\"Open in story river\" to=<<currentTiddler>> dragTiddler=<<currentTiddler>> class=\"tc-btn-invisible\">{{$:/core/images/open-window}}</$button>\n<$button tooltip=\"Edit this tiddler\" dragTiddler=<<currentTiddler>> class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-edit-tiddler\"/>{{$:/core/images/edit-button}}</$button>\n<$button tooltip=\"Remove from sidebar\" dragTiddler=<<currentTiddler>> class=\"tc-btn-invisible\">\n<$fieldmangler tiddler=<<currentTiddler>>>\n<$action-sendmessage $message=\"tm-remove-tag\" $param=\"$:/tags/SideBar\"/>\n</$fieldmangler>{{$:/core/images/close-button}}</$button>\n</div>\n</div>\n<$list variable=\"checker\" filter=\"[<config-title-sidebar>!text[hide]]\">\n<div class=\"jd-sidebar-column-header-border\"></div>\n<div class=\"jd-sidebar-column-body\">\n\n<$transclude/>\n\n</div>\n</$list>\n</div>\n</$droppable>\n</$list>\n<div style=\"height:32px;\">\n</div>\n</div>",
            "title": "$:/themes/jd/Whitespace/template/sidebar",
            "tags": "$:/tags/PageTemplate",
            "modifier": "jd",
            "modified": "20180826115839800"
        },
        "$:/themes/jd/Whitespace/Stylesheet": {
            "created": "20171127170053658",
            "creator": "JD",
            "text": "\\define wsconfig(name) $:/config/Whitespace/$name$\n\\define ws-sidebar-op() <$list filter=\"[[$:/themes/jd/Whitespace/config]text[right]]\" emptyMessage=\"right\">left</$list>\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) { \n\n<$reveal state=<<wsconfig ThemeEditFrame>> type=\"match\" text=\"yes\" default=\"yes\">\n\n\n/**  NO BOX SHADOW ON INPUTS  **/\n\n.tc-tiddler-edit-frame .tc-edit-field-add input.tc-edit-texteditor, \n.tc-tiddler-edit-frame text, \n.tc-tiddler-edit-frame textarea, \n.tc-tiddler-edit-frame .tc-edit-tags, \n.tc-tiddler-edit-frame textarea.tc-edit-texteditor {\n    -moz-box-shadow: none !important;\n    -ms-box-shadow: none !important;\n    -o-box-shadow: none !important;\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n}\n\n.tc-tiddler-edit-frame input.tc-titlebar.tc-edit-texteditor,\n.tc-tiddler-edit-frame .tc-edit-tags, \n.tc-tiddler-edit-frame text, \n.tc-tiddler-edit-frame textarea, \n.tc-tiddler-edit-frame textarea.tc-edit-texteditor { border: none !important; }\n\n\n/**  EDIT TIDDLER  **/\n\n.tc-tiddler-edit-frame input.tc-titlebar.tc-edit-texteditor {\n    -moz-box-shadow: none !important;\n    -ms-box-shadow: none !important;\n    -o-box-shadow: none !important;\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n    padding: .25em .5em !important;\n    font-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}}; \n    font-weight: normal;\n}\n\n.tc-tiddler-edit-frame .tc-edit-tags, \n.tc-tiddler-edit-frame .tc-editor-toolbar,\n.tc-tiddler-edit-frame .tc-type-selector,\n.tc-tiddler-edit-frame .tc-edit-field-add {\n    background-color: <<colour tiddler-editor-background>>;\n    padding: 8px 4px;\n}\n\n.tc-tiddler-edit-frame input.tc-edit-texteditor,\n.tc-tiddler-edit-frame .tc-edit-tags, \n.tc-tiddler-edit-frame .tc-editor-toolbar,\n.tc-tiddler-edit-frame .tc-type-selector,\n.tc-tiddler-edit-frame .tc-edit-field-add {\n    margin: 0 0 4px 0 !important;\n}\n\n.tc-tiddler-edit-frame iframe.tc-edit-texteditor,\n.tc-tiddler-edit-frame table.tc-edit-fields { margin: 0 !important; }\n\n.tc-tiddler-edit-frame .tc-editor-toolbar { background: <<colour tiddler-editor-border>>; margin-bottom: 0 !important; }\n\n.tc-tiddler-edit-frame .tc-editor-toolbar .tc-btn-invisible  { background: transparent; }\n\n.tc-tiddler-edit-frame .tc-editor-toolbar .tc-btn-invisible:hover  {\n    background: transparent;\n    fill: <<colour primary>>;\n}\n\n</$reveal>\n\n\n.borderless { border: none !important; }\n\ntextarea.large-textarea { \n    min-height: 100px;\n    width: 100%;\n    max-width: 100%;\n    border: 1px solid <<colour table-border>> !important;\n}\n\ninput.scene-textarea { \n    border: 1px solid <<colour table-border>> !important;\n}\n\n.tc-tiddler-frame {\n    width: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}} !important;\n    border-radius: {{!!box-radius}};\n    margin-left: auto;\n    margin-right: auto;\n    <<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.09)\">>\n}\n\n.tc-storyview-zoomin-tiddler {\n    position: relative !important;\n    width: calc({{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}} - 84px) !important;\n}\n\n\n/**  CARD BUTTONS  **/\n\n.jd-sidebar-column-header > .tc-btn-invisible {\n    color: <<colour foreground>>;\n    margin-top: -3px;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n<$reveal state=<<wsconfig Spacious>> type=\"match\" text=\"yes\" default=\"yes\">\n.tc-tiddler-view-frame .tc-tiddler-controls svg {\n    opacity: 0; \n    <<transition \"opacity 150ms ease-in-out\">>\n}\n\n.tc-tiddler-view-frame .tc-tiddler-controls:hover svg { opacity: 1; }\n</$reveal>\n\n/**  FONT SIZES  **/\n\n.jd-buttons .tc-btn-invisible { font-size: 18px; }\n.jd-sidebar:hover .jd-header .tc-btn-invisible, \n.jd-sidebar .header-buttons .tc-btn-invisible { font-size: 16px; }\n.jd-header .tc-btn-invisible,\n.jd-sidebar .jd-header .tc-btn-invisible,\n.vertical-controls .tc-btn-invisible { font-size: 20px; }\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">\n.jd-sidebar .jd-header .tc-btn-invisible { font-size: 16px; }\n</$reveal>\n\n\n<$reveal state=<<wsconfig Spacious>> type=\"match\" text=\"yes\" default=\"yes\">\n\n/**  AUTOHIDE VERTICAL BUTTONS  **/\n\n.vertical-controls {\n    opacity: 0;\n    <<transition \"opacity 150ms ease-in-out\">>\n}\n\n.vertical-controls:hover {\n    opacity: 1;\n}\n\n</$reveal>\n\n\n/**  STORY RIVER  **/\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">\n.tc-story-river { padding: 42px 2em !important; }\n</$reveal>\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\" default=\"yes\">\n.tc-story-river { padding: 42px 10% !important; }\n</$reveal>\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">\n.tc-story-river {\n    {{$:/themes/jd/Whitespace/config!!sidebar-position}}: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}} !important;\n    width: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}}) !important;\n}\n.jd-sidebar { opacity: 1; }\n</$reveal>\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\" default=\"yes\">\n\n.tc-story-river { width: 100% !important; }\n\n</$reveal>\n\n.tc-tiddler-body {\n    margin-top: 10px;\n    padding-right: 10px;\n    padding-bottom: 20px;\n    overflow-y: auto;\n    overflow-x: hidden;\n}\n\n\n/**  VERTICAL CONTROLS  **/\n\n.jd-header {\n    width: 50px;\n    height: 50px;\n    position: fixed;\n    top: 0;\n    overflow: hidden;\n    {{$:/themes/jd/Whitespace/config!!sidebar-position}}: 0;\n    padding: 15px;\n    z-index: 700;\n}\n\n<$reveal state=<<wsconfig Spacious>> type=\"match\" text=\"yes\" default=\"yes\">\n\n.jd-header .header-buttons {\n    opacity: 0;\n    -webkit-transition: opacity {{$:/config/AnimationDuration}}ms;\n    transition: opacity {{$:/config/AnimationDuration}}ms;\n}\n\n.jd-header:hover .header-buttons { opacity: 1; }\n\n</$reveal>\n\n.jd-header .header-buttons .tc-image-button {\n    width: 0;\n    height: 0;\n}\n\n.jd-sidebar:hover .header-buttons .tc-image-button {\n    width: 1em;\n    height: 1em;\n    margin: 0 0 0 10px;\n}\n\n.jd-header .tc-btn-invisible {\n    fill: <<colour sidebar-controls-foreground>>;\n    -webkit-transition: fill {{$:/config/AnimationDuration}}ms, font-size {{$:/config/AnimationDuration}}ms;\n    transition: fill {{$:/config/AnimationDuration}}ms, font-size {{$:/config/AnimationDuration}}ms;\n}\n\n.jd-sidebar:hover .jd-header {\n    width: calc({{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}} - 1.5em);\n    height: 39px;\n    background: <<colour page-background>>;\n    padding: 10px 20px;\n    -webkit-transition: width {{$:/config/AnimationDuration}}ms;\n    transition: width {{$:/config/AnimationDuration}}ms;\n}\n\n<$reveal state=\"$:/themes/jd/Whitespace/config!!sidebar-position\" type=\"match\" text=\"left\" default=\"right\">\n.jd-sidebar:hover .jd-header {\n    box-shadow: -5px 0 5px 0 <<colour page-background>>;\n}\n</$reveal>\n\n<$reveal state=\"$:/themes/jd/Whitespace/config!!sidebar-position\" type=\"match\" text=\"right\" default=\"right\">\n.jd-sidebar:hover .jd-header {\n    box-shadow: 5px 0 5px 0 <<colour page-background>>;\n    margin-right: calc(1.5em - 1px);\n}\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">\n.jd-header {\n    margin-right: calc(1.5em - 1px);\n}\n</$reveal>\n</$reveal>\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">\n.jd-sidebar .jd-header {\n    width: calc({{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}} - 1.5em);\n    height: 39px;\n    background: <<colour page-background>>;\n    padding: 10px 20px;\n}\n.jd-sidebar .header-buttons .tc-image-button {\n    width: 1em;\n    height: 1em;\n    margin: 0 0 0 10px;\n}\n</$reveal>\n\n.vertical-controls {\n    background: <<colour page-background>>;\n    position: fixed;\n    top: 50px;\n    {{$:/themes/jd/Whitespace/config!!sidebar-position}}: 0;\n    width: 50px;\n    height: calc(100% - 50px);\n    padding: 5px 15px;\n    z-index: 600;\n}\n\n.vertical-controls button {\n    margin-bottom: 15px;\n    outline: none;\n}\n\n.vertical-controls .tc-btn-invisible {\n    fill: <<colour sidebar-controls-foreground>>;\n    <<transition \"fill 150ms ease-in-out\">>\n}\n\n.jd-header .tc-droppable.tc-dragover > .tc-droppable-placeholder { display: inline; }\n\n\n/**  STYLED SIDEBAR  **/\n\n.jd-sitetitle-wrapper { text-align: center; }\n\n.jd-sitetitle { font-size: 2em; padding: 0.2em 0; }\n\n.jd-sitesubtitle { padding-bottom: 2em; }\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\">\n\n.jd-sitetitle-wrapper { opacity: 0; }\n\n.jd-sidebar:hover .jd-sitetitle-wrapper { opacity: 1; }\n\n</$reveal>\n\n<$reveal state=\"$:/SiteSubtitle\" type=\"match\" text=\"\">\n\n.jd-sitetitle { padding-bottom: 1em; }\n\n</$reveal>\n\n.jd-sidebar p {\n    margin: 5px 0;\n}\n\n.jd-sidebar {\n    background: <<colour page-background>>;\n    height: 50px;\n    display: inline-block;\n    position: fixed;\n    top: 0;\n    {{$:/themes/jd/Whitespace/config!!sidebar-position}}: 0;\n    justify-content: center;\n    z-index: 800;\n    -webkit-transition: width {{$:/config/AnimationDuration}}ms, height {{$:/config/AnimationDuration}}ms;\n    transition: width {{$:/config/AnimationDuration}}ms, height {{$:/config/AnimationDuration}}ms;\n}\n\n.jd-sidebar:hover {\n    width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n    border-<<ws-sidebar-op>>: 1px solid<<colour page-background>>;\n    padding: 42px 20px 0 20px;\n    height: 100%;\n    overflow-y: auto;\n}\n<$reveal state=\"$:/themes/jd/Whitespace/config!!sidebar-position\" type=\"match\" text=\"left\" default=\"right\">\n.jd-sidebar:hover {\n    <<box-shadow \"6px 0 20px 0 rgba(0, 0, 0, 0.1)\">>\n}\n</$reveal>\n<$reveal state=\"$:/themes/jd/Whitespace/config!!sidebar-position\" type=\"match\" text=\"right\" default=\"right\">\n.jd-sidebar:hover {\n    <<box-shadow \"-6px 0 20px 0 rgba(0, 0, 0, 0.1)\">>\n}\n</$reveal>\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">\n.jd-sidebar {\n    width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n    padding: 42px 20px 0 20px;\n    border-<<ws-sidebar-op>>: 1px solid<<colour page-background>>;\n    height: 100%;\n    overflow-y: auto;\n}\n.jd-sidebar-column { opacity: 1; }\n<$reveal state=\"$:/themes/jd/Whitespace/config!!sidebar-position\" type=\"match\" text=\"left\">\n.jd-sidebar {\n    <<box-shadow \"6px 0 20px 0 rgba(0, 0, 0, 0.1)\">>\n}\n</$reveal>\n<$reveal state=\"$:/themes/jd/Whitespace/config!!sidebar-position\" type=\"match\" text=\"right\" default=\"right\">\n.jd-sidebar {\n    <<box-shadow \"-6px 0 20px 0 rgba(0, 0, 0, 0.1)\">>\n}\n</$reveal>\n</$reveal>\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\" default=\"yes\">\n.jd-sidebar {\n    width: 50px;\n    overflow: hidden;\n}\n.jd-sidebar-column {\n    opacity: 0;\n}\n</$reveal>\n\n.jd-sidebar-column {\n    display: block;\n    background: <<colour background>>;\n    padding: 10px;\n    margin-bottom: 10px;\n    border: 1px solid <<colour tiddler-border>>;\n    border-radius: {{!!box-radius}};\n    <<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.09)\">>\n    overflow: hidden;\n    -webkit-transition: opacity {{$:/config/AnimationDuration}}ms;\n    transition: opacity {{$:/config/AnimationDuration}}ms;\n}\n\n.jd-sidebar-column-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 2px 0;\n    overflow: hidden;\n}\n\n.jd-sidebar-column-header-border {\n    height: 10px;\n    width: 100%;\n    border-top: 1px solid <<colour table-border>>;\n    margin-top: 8px;\n}\n\n.jd-sidebar-column-header .jd-sidebar-column-header-buttons {\n    display: flex;\n    align-items: flex-end;\n}\n\n.jd-sidebar-column-header .jd-sidebar-column-header-buttons button {\n    margin-left: 6px;\n}\n\n<$reveal state=<<wsconfig Spacious>> type=\"match\" text=\"yes\" default=\"yes\">\n.jd-sidebar-column-header .jd-sidebar-column-header-buttons {\n    opacity: 0;\n    <<transition \"opacity 150ms ease-in-out\">>\n}\n.jd-sidebar-column-header:hover .jd-sidebar-column-header-buttons { opacity: 1; }\n</$reveal>\n\n<$reveal type=\"match\" state=<<wsconfig SidebarHeight>> text=\"limit\" default=\"limit\">\n.jd-sidebar-column-body {\n    max-height: <$list filter=\"[[$:/config/Whitespace/SidebarHeight]!height[]]\" emptyMessage=\"300px\">{{$:/config/Whitespace/SidebarHeight!!height}}</$list>;\n    overflow-y: auto;\n    overflow-x: hidden;\n}\n</$reveal>\n\n.jd-sidebar:hover .jd-sidebar-column {\n    opacity: 1;\n}\n\n.tc-droppable {\n    padding: 0;\n    margin: 0;\n}\n\n.tc-sidebar-scrollable,\n.jd-config,\n.tc-topbar,\n.tc-bottombar { \n    width: 0; \n    height: 0; \n    margin: 0; \n    padding: 0; \n    display: none; \n}\n\n\n/**  POPUPS AND DROPDOWNS  **/\n\n.jd-sidebar .tc-drop-down,\n.tc-tiddler-frame .tc-drop-down,\n.tc-tiddler-frame .tc-block-dropdown {\n    overflow: auto;\n    <<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.09)\">>\n}\n\n.jd-sidebar .tc-drop-down {\n    position: fixed;\n    {{$:/themes/jd/Whitespace/config!!sidebar-position}}: 20px;\n    top: 50px;\n    min-width: calc({{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}} - 40px) !important;\n    max-width: calc({{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}} - 40px) !important;\n    max-height: 360px !important;\n}\n\n.tc-tiddler-frame .tc-drop-down,\n.tc-tiddler-frame .tc-block-dropdown {\n    min-width: 230px !important;\n    max-height: 230px !important;\n}\n\n.tc-menu-list-item {\n    -webkit-word-break: break-all !important;\n    -moz-word-break: break-all !important;\n    -ms-word-break: break-all !important;\n    -o-word-break: break-all !important;\n    word-break: break-all !important;\n}\n\n.tc-edit-type-dropdown { overflow: auto; }\n\n\n/**  BUTTONS  **/\n\n.jd-sidebar-column .tc-btn-invisible,\n.jd-edit-title-controls .tc-btn-invisible {\n    fill: <<colour sidebar-controls-foreground>>;\n    <<transition \"fill 150ms ease-in-out\">>\n}\n\n.vertical-controls .tc-btn-invisible:hover,\n.jd-edit-title-controls .tc-btn-invisible:hover,\n.jd-sidebar .tc-btn-invisible:hover,\n.jd-sidebar-column .tc-btn-invisible:hover {\n    fill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n\n/**  NOTIFICATION  **/\n\n<$reveal type=\"nomatch\" state=\"$:/themes/jd/Whitespace/config!!sidebar-position\" text=\"left\">\n.tc-notification { left: 14px; width: initial; }\n</$reveal>\n\n\n/**  SCROLLBARS  **/\n\n<$reveal state=<<wsconfig scrollbar-style>> type=\"match\" text=\"visible\" default=\"visible\">\n.tc-tiddler-frame .tc-drop-down::-webkit-scrollbar,\n.tc-tiddler-frame .tc-block-dropdown::-webkit-scrollbar,\ndiv::-webkit-scrollbar {\n    background: transparent;\n    width: 6px;\n}\n\n.tc-tiddler-frame .tc-drop-down::-webkit-scrollbar-thumb,\n.tc-tiddler-frame .tc-block-dropdown::-webkit-scrollbar-thumb,\ndiv::-webkit-scrollbar-thumb {\n    background: rgba(0, 0, 0, 0.3); \n    -webkit-border-radius: {{!!box-radius}};\n    border-radius: {{!!box-radius}};\n}\n\n.jd-sidebar::-webkit-scrollbar-thumb {\n    background: <<colour primary>>; \n}\n</$reveal>\n<$reveal state=<<wsconfig scrollbar-style>> type=\"match\" text=\"invisible\" default=\"visible\">\n.tc-tiddler-frame .tc-drop-down::-webkit-scrollbar,\n.tc-tiddler-frame .tc-block-dropdown::-webkit-scrollbar,\n.jd-sidebar::-webkit-scrollbar,\ndiv::-webkit-scrollbar {\n    background: transparent;\n    width: 0;\n}\n</$reveal>\n\n\n/**  SIDEBAR SEARCH  **/\n\n.jd-search-wrapper {\n    width: 100%;\n    display: inline-block;\n}\n\n.jd-search-header {\n    background: <<colour background>>;\n    display: flex;\n    justify-content: space-between;\n}\n\n.jd-searchbar-wrapper { width: 100%; }\n\n.jd-searchbar-buttons {\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n    width: 120px;\n}\n\n.jd-searchbar {\n    width: 100%;\n    outline: none !important;\n    border: none !important;\n    background: transparent !important;\n}\n\n.jd-search-results {\n    margin-top: 10px;\n    padding-right: 15px;\n    overflow-x: hidden;\n    overflow-y: auto;\n}\n\n<$reveal type=\"match\" state=<<wsconfig SidebarHeight>> text=\"limit\" default=\"limit\">\n.jd-search-results { max-height: <$list filter=\"[<$:/config/Whitespace/SidebarHeight>!height[]]\" emptyMessage=\"300px\">{{$:/config/Whitespace/SidebarHeight!!height}}</$list>; }\n</$reveal>\n\n.jd-searchbar-buttons button {\n    outline: none;\n    margin-left: 10px;\n}\n\n.jd-searchbar-buttons .tc-btn-invisible {\n    fill: <<colour sidebar-controls-foreground>>;\n    <<transition \"fill 150ms ease-in-out\">>\n}\n\n.jd-searchbar-buttons .tc-btn-invisible:hover {\n    fill: <<colour sidebar-controls-foreground-hover>>;\n    color: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.jd-search-results .tc-menu-list-item {\n    white-space: normal;\n    word-wrap: break-word;\n    padding-left: 5px;\n    text-indent: -5px;\n}\n\n\n/**  SIDEBAR CONTROLS**/\n\n.jd-buttons { \n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: flex-start;\n}\n\n.jd-buttons > .tc-reveal {\n    min-width: 0 !important;\n    width: 20% !important;\n    text-align: center;\n}\n\n.jd-buttons > .tc-btn-invisible {\n    margin: 5px 0;\n    outline: none;\n    fill: <<colour sidebar-controls-foreground>>;\n    <<transition \"fill 150ms ease-in-out\">>\n}\n\n.jd-buttons > .tc-btn-invisible:hover {\n    fill: <<colour sidebar-controls-foreground-hover>>;\n}\n\nbutton, button:hover { outline: none; }\n\ninput, input:focus { outline: none !important; }\n\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) { \n\n.jd-sidebar, .vertical-controls { display: none; }\n.tc-titlebar text, input.tc-titlebar.tc-edit-texteditor { font-size: 18px; }\n\n}",
            "title": "$:/themes/jd/Whitespace/Stylesheet",
            "tags": "$:/tags/Stylesheet",
            "modifier": "jd",
            "modified": "20180826124908994",
            "box-radius": "1px"
        },
        "$:/themes/jd/Whitespace/readme": {
            "text": "This theme uses an overhauled sidebar, which can be accessed via a hamburger button at the topright or topleft of the screen. I turned this into a theme just to make it easier for me to move it around my TW5's. \n\n''The hamburger button:''\n\n* When the sidebar is minimized, hovering on the hamburger button will expand the sidebar. The sidebar will minimize when it loses mouse focus. Clicking on the hamburger button will make the sidebar \"sticky\" until it is clicked again.\n\n* Below the hamburger button (when sidebar is minimized) are the usual Page Control buttons. \n\n''Changes to the sidebar:''\n\n# Minimize-able via the hamburger button\n# Movable to the left or the right of the screen\n# Sidebar tabs are turned into draggable, removable, and minimize-able \"card\"-things\n\n''Changes to the sidebar tabs:''\n\n# Draggable = click on the card title + drag above or below other \"cards\" in the sidebar\n# Removable = hover on card title + click the right-most button that appears\n# Minimize-able = click on the card title (expand by clicking again)\n* The card title is the \"caption\" of the tiddler. Otherwise, it's the tiddler title\n\n''~PageControls:''\n\n* ~PageControls appear beside the hamburger button on hover (when sidebar is expanded), or below it when sidebar is \"minimized\"\n\n//Note:// \n\nThis theme is best used with [[Very Simple Mobile Layout (plugin)|http://j.d.tiddlyspot.com/#Very%20Simple%20Mobile%20Layout%20(plugin)]].\n\n<a target=\"blank\" href=\"http://j.d.whitespace.tiddlyspot.com\">Project Homepage on Tiddlyspot</a>",
            "title": "$:/themes/jd/Whitespace/readme",
            "modifier": "jd",
            "modified": "20180826055758382",
            "creator": "JD",
            "created": "20180203113849420"
        },
        "$:/themes/jd/Whitespace/config": {
            "created": "20171203134043686",
            "creator": "JD",
            "title": "$:/themes/jd/Whitespace/config",
            "text": "\\define wsconfig(name) $:/config/Whitespace/$name$\n\\define config-base() $:/config/SideBar/Visibility/\n\\define config-title-sidebar()\n$(config-base)$$(currentTiddler)$\n\\end\n\\define drop-actions()\n<$action-listops $tiddler=\"$:/tags/SideBar\" $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n<style>\n.tc-control-panel table input[type=\"radio\"] { width: auto; }\n.ws-select-button {\n    display: inline-flex;\n    width: 1em;\n    height: 1em;\n    border-radius: 50%;\n    border: 1px solid <<colour primary>>;\n}\n.ws-disabled-btn {\n    background: <<colour muted-background>>;\n}\n.ws-enabled-btn {\n    background: <<colour primary>>;\n}\n</style>\n\n<table width=\"99%\">\n<tr>\n<td>\nSidebar width:\n</td>\n<td>\n<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" tag=\"input\"/>\n</td>\n</tr>\n<tr>\n<td>\nTiddler width:\n</td>\n<td>\n<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" tag=\"input\"/>\n</td>\n</tr>\n<tr>\n<td>\nLimit sidebar card height:\n</td>\n<td>\n<$checkbox tiddler=<<wsconfig SidebarHeight>> field=\"text\" checked=\"limit\" unchecked=\"full\" default=\"limit\"/>\n<$list filter=\"[[$:/config/Whitespace/SidebarHeight]text[limit]]\"><$edit-text tiddler=<<wsconfig SidebarHeight>> field=\"height\" tag=\"input\" placeholder=\"300px\"/></$list>\n</td>\n</tr>\n<tr>\n<td>\nVisible scrollbars:\n</td>\n<td>\n<$checkbox tiddler=<<wsconfig scrollbar-style>> field=\"text\" checked=\"visible\" unchecked=\"invisible\" default=\"visible\"/>\n</td>\n</tr>\n<tr>\n<td>\nShow Sitetitle and Subtitle:\n</td>\n<td>\n<$checkbox tiddler=<<wsconfig show-sitetitle>> field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"/>\n</td>\n</tr>\n<tr>\n<td>\nShow buttons on hover:\n</td>\n<td>\n<$checkbox tiddler=<<wsconfig Spacious>> field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"/>\n</td>\n</tr>\n<tr>\n<td>\nTheme the tiddler edit mode:\n</td>\n<td>\n<$checkbox tiddler=<<wsconfig ThemeEditFrame>> field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"/>\n</td>\n</tr>\n<tr>\n<td>\nSidebar position:\n</td>\n<td>\n<$radio tiddler=\"$:/themes/jd/Whitespace/config\" field=\"sidebar-position\" value=\"left\"> left</$radio><br>\n<$radio tiddler=\"$:/themes/jd/Whitespace/config\" field=\"sidebar-position\" value=\"right\"> right</$radio>\n</td>\n</tr>\n</table>",
            "tags": "$:/tags/ControlPanel/Appearance",
            "sidebar-position": "left",
            "modifier": "jd",
            "modified": "20180826103034713",
            "caption": "Whitespace tweaks"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/telmiger/bricks/metrics/fontsize": {
            "text": "12",
            "title": "$:/themes/telmiger/bricks/metrics/fontsize",
            "modifier": "Thomas Elmiger",
            "modified": "20190318212420615",
            "creator": "Thomas Elmiger",
            "created": "20190318212420359"
        },
        "$:/themes/telmiger/bricks/wikilogic-42-77": {
            "text": "\\define --breakpoint-not-small() min-width: 28rem\n\\define --breakpoint-medium() min-width: 42rem\n\\define --breakpoint-large() min-width: 77rem\n\\define if-editor-height-fixed(then,else)\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n$then$\n</$reveal>\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n$else$\n</$reveal>\n\\end\n\n/*\n** Styles containing Wikilogic\n** inspired by TW vanilla\n** \"\"\" \n*/\n\nhtml {\n\tfont-size: {{$:/themes/telmiger/bricks/metrics/fontsize}};\n}\n\n/*\n** from .../001-page.css\n*/\n\n@media (<<--breakpoint-medium>>) {\n\n<<if-no-sidebar \"\n\n\tbody .tc-tiddler-view-frame, body .tc-tiddler-frame.tc-tiddler-edit-frame {\n\t\tmargin-right: auto;\n\t}\n\n\">>\n}\n\n@media (<<--breakpoint-large>>) {\n\n<<if-no-sidebar \"\n\n\tbody .tc-story-river {\n\t\tmargin-right: auto;\n\t\tpadding-right: 2rem;\n\t}\n\n\tbody .tc-tiddler-frame {\n\t\tmargin-right: auto;\n\t}\n\n\">>\n}\n\n\n/*\n** from .../components/tiddler.css\n*/\n\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tmargin-right: 0rem;\n\tmargin-left: -1rem;\n\tpadding-right: 4rem;\n\tpadding-left: 1rem;\n\tmin-width: calc(100% + 2rem);\n\tz-index: 300;\n\tbackground: <<colour tiddler-background>>;\n\tborder-bottom: 1px solid <<colour tab-divider>>;\n}\n\n@media (<<--breakpoint-not-small>>) {\n\t.tc-tiddler-title {\n\t\tmargin-right: 0rem;\n\t\tmargin-left: -1rem;\n\t\tpadding-right: 2rem;\n\t\tpadding-left: 1rem;\n\t\tmin-width: calc(100% + 2rem);\n\t}\n}\n\n@media (<<--breakpoint-medium>>) {\n\t.tc-tiddler-title {\n\t\tpadding-right: 1rem;\n\t}\n}\n</$reveal>\n\n\n/*\n** from .../edit/tiddler.css\n*/\n\ntextarea.tc-edit-texteditor {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\n\n@media (<<--breakpoint-large>>) {\n\n<<if-no-sidebar \"\n\n\tbody .tc-tiddler-frame.tc-tiddler-edit-frame {\n\t\tmargin-right: 1rem;\n\t\twidth: calc(100% - 2rem);\n\t}\n\n\">>\n}\n\n<<if-editor-height-fixed then:\"\"\"\n\nbody .tc-tiddler-preview-preview {\n\toverflow-y: scroll;\n\theight: {{$:/config/TextEditor/EditorHeight/Height}};\n}\n\n\"\"\">>\n\n\n/* End \"\"\" */",
            "title": "$:/themes/telmiger/bricks/wikilogic-42-77",
            "tags": "$:/tags/Stylesheet",
            "modifier": "Thomas Elmiger",
            "modified": "20180304204301357",
            "creator": "Thomas Elmiger",
            "created": "20171231111937546"
        },
        "$:/themes/tiddlywiki/vanilla": {
            "text": "{\n    \"tiddlers\": {\n        \"$:/themes/tiddlywiki/vanilla/themetweaks\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/themetweaks\",\n            \"tags\": \"$:/tags/ControlPanel/Appearance\",\n            \"caption\": \"{{$:/language/ThemeTweaks/ThemeTweaks}}\",\n            \"text\": \"\\\\define lingo-base() $:/language/ThemeTweaks/\\n\\n\\\\define replacement-text()\\n[img[$(imageTitle)$]]\\n\\\\end\\n\\n\\\\define backgroundimage-dropdown()\\n<div class=\\\"tc-drop-down-wrapper\\\">\\n<$button popup=<<qualify \\\"$:/state/popup/themetweaks/backgroundimage\\\">> class=\\\"tc-btn-invisible tc-btn-dropdown\\\">{{$:/core/images/down-arrow}}</$button>\\n<$reveal state=<<qualify \\\"$:/state/popup/themetweaks/backgroundimage\\\">> type=\\\"popup\\\" position=\\\"belowleft\\\" text=\\\"\\\" default=\\\"\\\">\\n<div class=\\\"tc-drop-down\\\">\\n<$macrocall $name=\\\"image-picker\\\" actions=\\\"\\\"\\\"\\n\\n<$action-setfield\\n\\t$tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\"\\n\\t$value=<<imageTitle>>\\n/>\\n\\n\\\"\\\"\\\"/>\\n</div>\\n</$reveal>\\n</div>\\n\\\\end\\n\\n\\\\define backgroundimageattachment-dropdown()\\n<$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\\\" default=\\\"scroll\\\">\\n<option value=\\\"scroll\\\"><<lingo Settings/BackgroundImageAttachment/Scroll>></option>\\n<option value=\\\"fixed\\\"><<lingo Settings/BackgroundImageAttachment/Fixed>></option>\\n</$select>\\n\\\\end\\n\\n\\\\define backgroundimagesize-dropdown()\\n<$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\\\" default=\\\"scroll\\\">\\n<option value=\\\"auto\\\"><<lingo Settings/BackgroundImageSize/Auto>></option>\\n<option value=\\\"cover\\\"><<lingo Settings/BackgroundImageSize/Cover>></option>\\n<option value=\\\"contain\\\"><<lingo Settings/BackgroundImageSize/Contain>></option>\\n</$select>\\n\\\\end\\n\\n<<lingo ThemeTweaks/Hint>>\\n\\n! <<lingo Options>>\\n\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\"><<lingo Options/SidebarLayout>></$link> |<$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\"><option value=\\\"fixed-fluid\\\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\\\"fluid-fixed\\\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/options/stickytitles\\\"><<lingo Options/StickyTitles>></$link><br>//<<lingo Options/StickyTitles/Hint>>// |<$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/stickytitles\\\"><option value=\\\"no\\\">{{$:/language/No}}</option><option value=\\\"yes\\\">{{$:/language/Yes}}</option></$select> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\"><<lingo Options/CodeWrapping>></$link> |<$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\"><option value=\\\"pre\\\">{{$:/language/No}}</option><option value=\\\"pre-wrap\\\">{{$:/language/Yes}}</option></$select> |\\n\\n! <<lingo Settings>>\\n\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\\\"><<lingo Settings/FontFamily>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\\\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\\\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\"><<lingo Settings/BackgroundImage>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\" default=\\\"\\\" tag=\\\"input\\\"/> |<<backgroundimage-dropdown>> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\\\"><<lingo Settings/BackgroundImageAttachment>></$link> |<<backgroundimageattachment-dropdown>> | |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\\\"><<lingo Settings/BackgroundImageSize>></$link> |<<backgroundimagesize-dropdown>> | |\\n\\n! <<lingo Metrics>>\\n\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\"><<lingo Metrics/LineHeight>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\\\"><<lingo Metrics/BodyFontSize>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\\\"><<lingo Metrics/BodyLineHeight>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\\\"><<lingo Metrics/StoryLeft>></$link><br>//<<lingo Metrics/StoryLeft/Hint>>// |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/storytop\\\"><<lingo Metrics/StoryTop>></$link><br>//<<lingo Metrics/StoryTop/Hint>>// |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/storytop\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/storyright\\\"><<lingo Metrics/StoryRight>></$link><br>//<<lingo Metrics/StoryRight/Hint>>// |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/storyright\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\\\"><<lingo Metrics/StoryWidth>></$link><br>//<<lingo Metrics/StoryWidth/Hint>>// |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\\\"><<lingo Metrics/TiddlerWidth>></$link><br>//<<lingo Metrics/TiddlerWidth/Hint>>//<br> |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\"><<lingo Metrics/SidebarBreakpoint>></$link><br>//<<lingo Metrics/SidebarBreakpoint/Hint>>// |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\\\"><<lingo Metrics/SidebarWidth>></$link><br>//<<lingo Metrics/SidebarWidth/Hint>>// |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/base\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/base\",\n            \"tags\": \"[[$:/tags/Stylesheet]]\",\n            \"text\": \"\\\\define custom-background-datauri()\\n<$set name=\\\"background\\\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\\n<$list filter=\\\"[<background>is[image]]\\\">\\n`background: url(`\\n<$list filter=\\\"[<background>!has[_canonical_uri]]\\\">\\n`\\\"`<$macrocall $name=\\\"datauri\\\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\\\"`\\n</$list>\\n<$list filter=\\\"[<background>has[_canonical_uri]]\\\">\\n`\\\"`<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\\\"_canonical_uri\\\"/>`\\\"`\\n</$list>\\n`) center center;`\\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\\n</$list>\\n</$set>\\n\\\\end\\n\\n\\\\define if-fluid-fixed(text,hiddenSidebarText)\\n<$reveal state=\\\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\" type=\\\"match\\\" text=\\\"fluid-fixed\\\">\\n$text$\\n<$reveal state=\\\"$:/state/sidebar\\\" type=\\\"nomatch\\\" text=\\\"yes\\\" default=\\\"yes\\\">\\n$hiddenSidebarText$\\n</$reveal>\\n</$reveal>\\n\\\\end\\n\\n\\\\define if-editor-height-fixed(then,else)\\n<$reveal state=\\\"$:/config/TextEditor/EditorHeight/Mode\\\" type=\\\"match\\\" text=\\\"fixed\\\">\\n$then$\\n</$reveal>\\n<$reveal state=\\\"$:/config/TextEditor/EditorHeight/Mode\\\" type=\\\"match\\\" text=\\\"auto\\\">\\n$else$\\n</$reveal>\\n\\\\end\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\\n\\n/*\\n** Start with the normalize CSS reset, and then belay some of its effects\\n*/\\n\\n{{$:/themes/tiddlywiki/vanilla/reset}}\\n\\n*, input[type=\\\"search\\\"] {\\n\\tbox-sizing: border-box;\\n\\t-moz-box-sizing: border-box;\\n\\t-webkit-box-sizing: border-box;\\n}\\n\\nhtml button {\\n\\tline-height: 1.2;\\n\\tcolor: <<colour button-foreground>>;\\n\\tbackground: <<colour button-background>>;\\n\\tborder-color: <<colour button-border>>;\\n}\\n\\n/*\\n** Basic element styles\\n*/\\n\\nhtml {\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\\n\\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\\n\\t-webkit-font-smoothing: antialiased;\\n\\t-moz-osx-font-smoothing: grayscale;\\n}\\n\\nhtml:-webkit-full-screen {\\n\\tbackground-color: <<colour page-background>>;\\n}\\n\\nbody.tc-body {\\n\\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\\n\\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\\n\\tword-wrap: break-word;\\n\\t<<custom-background-datauri>>\\n\\tcolor: <<colour foreground>>;\\n\\tbackground-color: <<colour page-background>>;\\n\\tfill: <<colour foreground>>;\\n}\\n\\nh1, h2, h3, h4, h5, h6 {\\n\\tline-height: 1.2;\\n\\tfont-weight: 300;\\n}\\n\\npre {\\n\\tdisplay: block;\\n\\tpadding: 14px;\\n\\tmargin-top: 1em;\\n\\tmargin-bottom: 1em;\\n\\tword-break: normal;\\n\\tword-wrap: break-word;\\n\\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\\n\\tbackground-color: <<colour pre-background>>;\\n\\tborder: 1px solid <<colour pre-border>>;\\n\\tpadding: 0 3px 2px;\\n\\tborder-radius: 3px;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\ncode {\\n\\tcolor: <<colour code-foreground>>;\\n\\tbackground-color: <<colour code-background>>;\\n\\tborder: 1px solid <<colour code-border>>;\\n\\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\\n\\tpadding: 0 3px 2px;\\n\\tborder-radius: 3px;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\nblockquote {\\n\\tborder-left: 5px solid <<colour blockquote-bar>>;\\n\\tmargin-left: 25px;\\n\\tpadding-left: 10px;\\n\\tquotes: \\\"\\\\201C\\\"\\\"\\\\201D\\\"\\\"\\\\2018\\\"\\\"\\\\2019\\\";\\n}\\n\\nblockquote.tc-big-quote {\\n\\tfont-family: Georgia, serif;\\n\\tposition: relative;\\n\\tbackground: <<colour pre-background>>;\\n\\tborder-left: none;\\n\\tmargin-left: 50px;\\n\\tmargin-right: 50px;\\n\\tpadding: 10px;\\n    border-radius: 8px;\\n}\\n\\nblockquote.tc-big-quote cite:before {\\n\\tcontent: \\\"\\\\2014 \\\\2009\\\";\\n}\\n\\nblockquote.tc-big-quote:before {\\n\\tfont-family: Georgia, serif;\\n\\tcolor: <<colour blockquote-bar>>;\\n\\tcontent: open-quote;\\n\\tfont-size: 8em;\\n\\tline-height: 0.1em;\\n\\tmargin-right: 0.25em;\\n\\tvertical-align: -0.4em;\\n\\tposition: absolute;\\n    left: -50px;\\n    top: 42px;\\n}\\n\\nblockquote.tc-big-quote:after {\\n\\tfont-family: Georgia, serif;\\n\\tcolor: <<colour blockquote-bar>>;\\n\\tcontent: close-quote;\\n\\tfont-size: 8em;\\n\\tline-height: 0.1em;\\n\\tmargin-right: 0.25em;\\n\\tvertical-align: -0.4em;\\n\\tposition: absolute;\\n    right: -80px;\\n    bottom: -20px;\\n}\\n\\ndl dt {\\n\\tfont-weight: bold;\\n\\tmargin-top: 6px;\\n}\\n\\ntextarea,\\ninput[type=text],\\ninput[type=search],\\ninput[type=\\\"\\\"],\\ninput:not([type]) {\\n\\tcolor: <<colour foreground>>;\\n\\tbackground: <<colour background>>;\\n}\\n\\n.tc-muted {\\n\\tcolor: <<colour muted-foreground>>;\\n}\\n\\nsvg.tc-image-button {\\n\\tpadding: 0px 1px 1px 0px;\\n}\\n\\n.tc-icon-wrapper > svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\nkbd {\\n\\tdisplay: inline-block;\\n\\tpadding: 3px 5px;\\n\\tfont-size: 0.8em;\\n\\tline-height: 1.2;\\n\\tcolor: <<colour foreground>>;\\n\\tvertical-align: middle;\\n\\tbackground-color: <<colour background>>;\\n\\tborder: solid 1px <<colour muted-foreground>>;\\n\\tborder-bottom-color: <<colour muted-foreground>>;\\n\\tborder-radius: 3px;\\n\\tbox-shadow: inset 0 -1px 0 <<colour muted-foreground>>;\\n}\\n\\n/*\\nMarkdown likes putting code elements inside pre elements\\n*/\\npre > code {\\n\\tpadding: 0;\\n\\tborder: none;\\n\\tbackground-color: inherit;\\n\\tcolor: inherit;\\n}\\n\\ntable {\\n\\tborder: 1px solid <<colour table-border>>;\\n\\twidth: auto;\\n\\tmax-width: 100%;\\n\\tcaption-side: bottom;\\n\\tmargin-top: 1em;\\n\\tmargin-bottom: 1em;\\n}\\n\\ntable th, table td {\\n\\tpadding: 0 7px 0 7px;\\n\\tborder-top: 1px solid <<colour table-border>>;\\n\\tborder-left: 1px solid <<colour table-border>>;\\n}\\n\\ntable thead tr td, table th {\\n\\tbackground-color: <<colour table-header-background>>;\\n\\tfont-weight: bold;\\n}\\n\\ntable tfoot tr td {\\n\\tbackground-color: <<colour table-footer-background>>;\\n}\\n\\n.tc-csv-table {\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-tiddler-frame img,\\n.tc-tiddler-frame svg,\\n.tc-tiddler-frame canvas,\\n.tc-tiddler-frame embed,\\n.tc-tiddler-frame iframe {\\n\\tmax-width: 100%;\\n}\\n\\n.tc-tiddler-body > embed,\\n.tc-tiddler-body > iframe {\\n\\twidth: 100%;\\n\\theight: 600px;\\n}\\n\\n/*\\n** Links\\n*/\\n\\nbutton.tc-tiddlylink,\\na.tc-tiddlylink {\\n\\ttext-decoration: none;\\n\\tfont-weight: normal;\\n\\tcolor: <<colour tiddler-link-foreground>>;\\n\\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\\n}\\n\\n.tc-sidebar-lists a.tc-tiddlylink {\\n\\tcolor: <<colour sidebar-tiddler-link-foreground>>;\\n}\\n\\n.tc-sidebar-lists a.tc-tiddlylink:hover {\\n\\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\\n}\\n\\nbutton.tc-tiddlylink:hover,\\na.tc-tiddlylink:hover {\\n\\ttext-decoration: underline;\\n}\\n\\na.tc-tiddlylink-resolves {\\n}\\n\\na.tc-tiddlylink-shadow {\\n\\tfont-weight: bold;\\n}\\n\\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\\n\\tfont-weight: normal;\\n}\\n\\na.tc-tiddlylink-missing {\\n\\tfont-style: italic;\\n}\\n\\na.tc-tiddlylink-external {\\n\\ttext-decoration: underline;\\n\\tcolor: <<colour external-link-foreground>>;\\n\\tbackground-color: <<colour external-link-background>>;\\n}\\n\\na.tc-tiddlylink-external:visited {\\n\\tcolor: <<colour external-link-foreground-visited>>;\\n\\tbackground-color: <<colour external-link-background-visited>>;\\n}\\n\\na.tc-tiddlylink-external:hover {\\n\\tcolor: <<colour external-link-foreground-hover>>;\\n\\tbackground-color: <<colour external-link-background-hover>>;\\n}\\n\\n/*\\n** Drag and drop styles\\n*/\\n\\n.tc-tiddler-dragger {\\n\\tposition: relative;\\n\\tz-index: -10000;\\n}\\n\\n.tc-tiddler-dragger-inner {\\n\\tposition: absolute;\\n\\ttop: -1000px;\\n\\tleft: -1000px;\\n\\tdisplay: inline-block;\\n\\tpadding: 8px 20px;\\n\\tfont-size: 16.9px;\\n\\tfont-weight: bold;\\n\\tline-height: 20px;\\n\\tcolor: <<colour dragger-foreground>>;\\n\\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\\n\\twhite-space: nowrap;\\n\\tvertical-align: baseline;\\n\\tbackground-color: <<colour dragger-background>>;\\n\\tborder-radius: 20px;\\n}\\n\\n.tc-tiddler-dragger-cover {\\n\\tposition: absolute;\\n\\tbackground-color: <<colour page-background>>;\\n}\\n\\n.tc-dropzone {\\n\\tposition: relative;\\n}\\n\\n.tc-dropzone.tc-dragover:before {\\n\\tz-index: 10000;\\n\\tdisplay: block;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbackground: <<colour dropzone-background>>;\\n\\ttext-align: center;\\n\\tcontent: \\\"<<lingo DropMessage>>\\\";\\n}\\n\\n.tc-droppable > .tc-droppable-placeholder {\\n\\tdisplay: none;\\n}\\n\\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\\n\\tdisplay: block;\\n\\tborder: 2px dashed <<colour dropzone-background>>;\\n}\\n\\n.tc-draggable {\\n\\tcursor: move;\\n}\\n\\n/*\\n** Plugin reload warning\\n*/\\n\\n.tc-plugin-reload-warning {\\n\\tz-index: 1000;\\n\\tdisplay: block;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbackground: <<colour alert-background>>;\\n\\ttext-align: center;\\n}\\n\\n/*\\n** Buttons\\n*/\\n\\nbutton svg, button img, label svg, label img {\\n\\tvertical-align: middle;\\n}\\n\\n.tc-btn-invisible {\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n    cursor: pointer;\\n}\\n\\n.tc-btn-boxed {\\n\\tfont-size: 0.6em;\\n\\tpadding: 0.2em;\\n\\tmargin: 1px;\\n\\tbackground: none;\\n\\tborder: 1px solid <<colour tiddler-controls-foreground>>;\\n\\tborder-radius: 0.25em;\\n}\\n\\nhtml body.tc-body .tc-btn-boxed svg {\\n\\tfont-size: 1.6666em;\\n}\\n\\n.tc-btn-boxed:hover {\\n\\tbackground: <<colour muted-foreground>>;\\n\\tcolor: <<colour background>>;\\n}\\n\\nhtml body.tc-body .tc-btn-boxed:hover svg {\\n\\tfill: <<colour background>>;\\n}\\n\\n.tc-btn-rounded {\\n\\tfont-size: 0.5em;\\n\\tline-height: 2;\\n\\tpadding: 0em 0.3em 0.2em 0.4em;\\n\\tmargin: 1px;\\n\\tborder: 1px solid <<colour muted-foreground>>;\\n\\tbackground: <<colour muted-foreground>>;\\n\\tcolor: <<colour background>>;\\n\\tborder-radius: 2em;\\n}\\n\\nhtml body.tc-body .tc-btn-rounded svg {\\n\\tfont-size: 1.6666em;\\n\\tfill: <<colour background>>;\\n}\\n\\n.tc-btn-rounded:hover {\\n\\tborder: 1px solid <<colour muted-foreground>>;\\n\\tbackground: <<colour background>>;\\n\\tcolor: <<colour muted-foreground>>;\\n}\\n\\nhtml body.tc-body .tc-btn-rounded:hover svg {\\n\\tfill: <<colour muted-foreground>>;\\n}\\n\\n.tc-btn-icon svg {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: <<colour muted-foreground>>;\\n}\\n\\n.tc-btn-text {\\n\\tpadding: 0;\\n\\tmargin: 0;\\n}\\n\\n.tc-btn-big-green {\\n\\tdisplay: inline-block;\\n\\tpadding: 8px;\\n\\tmargin: 4px 8px 4px 8px;\\n\\tbackground: <<colour download-background>>;\\n\\tcolor: <<colour download-foreground>>;\\n\\tfill: <<colour download-foreground>>;\\n\\tborder: none;\\n\\tfont-size: 1.2em;\\n\\tline-height: 1.4em;\\n\\ttext-decoration: none;\\n}\\n\\n.tc-btn-big-green svg,\\n.tc-btn-big-green img {\\n\\theight: 2em;\\n\\twidth: 2em;\\n\\tvertical-align: middle;\\n\\tfill: <<colour download-foreground>>;\\n}\\n\\n.tc-sidebar-lists input {\\n\\tcolor: <<colour foreground>>;\\n}\\n\\n.tc-sidebar-lists button {\\n\\tcolor: <<colour sidebar-button-foreground>>;\\n\\tfill: <<colour sidebar-button-foreground>>;\\n}\\n\\n.tc-sidebar-lists button.tc-btn-mini {\\n\\tcolor: <<colour sidebar-muted-foreground>>;\\n}\\n\\n.tc-sidebar-lists button.tc-btn-mini:hover {\\n\\tcolor: <<colour sidebar-muted-foreground-hover>>;\\n}\\n\\nbutton svg.tc-image-button, button .tc-image-button img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n}\\n\\n.tc-unfold-banner {\\n\\tposition: absolute;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n\\twidth: 100%;\\n\\twidth: calc(100% + 2px);\\n\\tmargin-left: -43px;\\n\\ttext-align: center;\\n\\tborder-top: 2px solid <<colour tiddler-info-background>>;\\n\\tmargin-top: 4px;\\n}\\n\\n.tc-unfold-banner:hover {\\n\\tbackground: <<colour tiddler-info-background>>;\\n\\tborder-top: 2px solid <<colour tiddler-info-border>>;\\n}\\n\\n.tc-unfold-banner svg, .tc-fold-banner svg {\\n\\theight: 0.75em;\\n\\tfill: <<colour tiddler-controls-foreground>>;\\n}\\n\\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\\n\\tfill: <<colour tiddler-controls-foreground-hover>>;\\n}\\n\\n.tc-fold-banner {\\n\\tposition: absolute;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n\\twidth: 23px;\\n\\ttext-align: center;\\n\\tmargin-left: -35px;\\n\\ttop: 6px;\\n\\tbottom: 6px;\\n}\\n\\n.tc-fold-banner:hover {\\n\\tbackground: <<colour tiddler-info-background>>;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\t.tc-unfold-banner {\\n\\t\\tposition: static;\\n\\t\\twidth: calc(100% + 59px);\\n\\t}\\n\\n\\t.tc-fold-banner {\\n\\t\\twidth: 16px;\\n\\t\\tmargin-left: -16px;\\n\\t\\tfont-size: 0.75em;\\n\\t}\\n\\n}\\n\\n/*\\n** Tags and missing tiddlers\\n*/\\n\\n.tc-tag-list-item {\\n\\tposition: relative;\\n\\tdisplay: inline-block;\\n\\tmargin-right: 7px;\\n}\\n\\n.tc-tags-wrapper {\\n\\tmargin: 4px 0 14px 0;\\n}\\n\\n.tc-missing-tiddler-label {\\n\\tfont-style: italic;\\n\\tfont-weight: normal;\\n\\tdisplay: inline-block;\\n\\tfont-size: 11.844px;\\n\\tline-height: 14px;\\n\\twhite-space: nowrap;\\n\\tvertical-align: baseline;\\n}\\n\\nbutton.tc-tag-label, span.tc-tag-label {\\n\\tdisplay: inline-block;\\n\\tpadding: 0.16em 0.7em;\\n\\tfont-size: 0.9em;\\n\\tfont-weight: 400;\\n\\tline-height: 1.2em;\\n\\tcolor: <<colour tag-foreground>>;\\n\\twhite-space: nowrap;\\n\\tvertical-align: baseline;\\n\\tbackground-color: <<colour tag-background>>;\\n\\tborder-radius: 1em;\\n}\\n\\n.tc-untagged-separator {\\n\\twidth: 10em;\\n\\tleft: 0;\\n\\tmargin-left: 0;\\n\\tborder: 0;\\n\\theight: 1px;\\n\\tbackground: <<colour tab-divider>>;\\n}\\n\\nbutton.tc-untagged-label {\\n\\tbackground-color: <<colour untagged-background>>;\\n}\\n\\n.tc-tag-label svg, .tc-tag-label img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: <<colour tag-foreground>>;\\n\\tvertical-align: text-bottom;\\n}\\n\\n.tc-tag-manager-table .tc-tag-label {\\n\\twhite-space: normal;\\n}\\n\\n.tc-tag-manager-tag {\\n\\twidth: 100%;\\n}\\n\\n/*\\n** Page layout\\n*/\\n\\n.tc-topbar {\\n\\tposition: fixed;\\n\\tz-index: 1200;\\n}\\n\\n.tc-topbar-left {\\n\\tleft: 29px;\\n\\ttop: 5px;\\n}\\n\\n.tc-topbar-right {\\n\\ttop: 5px;\\n\\tright: 29px;\\n}\\n\\n.tc-topbar button {\\n\\tpadding: 8px;\\n}\\n\\n.tc-topbar svg {\\n\\tfill: <<colour muted-foreground>>;\\n}\\n\\n.tc-topbar button:hover svg {\\n\\tfill: <<colour foreground>>;\\n}\\n\\n.tc-sidebar-header {\\n\\tcolor: <<colour sidebar-foreground>>;\\n\\tfill: <<colour sidebar-foreground>>;\\n}\\n\\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\\n\\tfont-weight: 300;\\n}\\n\\n.tc-sidebar-header .tc-sidebar-lists p {\\n\\tmargin-top: 3px;\\n\\tmargin-bottom: 3px;\\n}\\n\\n.tc-sidebar-header .tc-missing-tiddler-label {\\n\\tcolor: <<colour sidebar-foreground>>;\\n}\\n\\n.tc-advanced-search input {\\n\\twidth: 60%;\\n}\\n\\n.tc-search a svg {\\n\\twidth: 1.2em;\\n\\theight: 1.2em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-page-controls {\\n\\tmargin-top: 14px;\\n\\tfont-size: 1.5em;\\n}\\n\\n.tc-page-controls button {\\n\\tmargin-right: 0.5em;\\n}\\n\\n.tc-page-controls a.tc-tiddlylink:hover {\\n\\ttext-decoration: none;\\n}\\n\\n.tc-page-controls img {\\n\\twidth: 1em;\\n}\\n\\n.tc-page-controls svg {\\n\\tfill: <<colour sidebar-controls-foreground>>;\\n}\\n\\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\\n\\tfill: <<colour sidebar-controls-foreground-hover>>;\\n}\\n\\n.tc-menu-list-item {\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-menu-list-count {\\n\\tfont-weight: bold;\\n}\\n\\n.tc-menu-list-subitem {\\n\\tpadding-left: 7px;\\n}\\n\\n.tc-story-river {\\n\\tposition: relative;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\t.tc-sidebar-header {\\n\\t\\tpadding: 14px;\\n\\t\\tmin-height: 32px;\\n\\t\\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\\n\\t}\\n\\n\\t.tc-story-river {\\n\\t\\tposition: relative;\\n\\t\\tpadding: 0;\\n\\t}\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\t.tc-message-box {\\n\\t\\tmargin: 21px -21px 21px -21px;\\n\\t}\\n\\n\\t.tc-sidebar-scrollable {\\n\\t\\tposition: fixed;\\n\\t\\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\\n\\t\\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t\\toverflow-y: auto;\\n\\t\\toverflow-x: auto;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t\\tmargin: 0 0 0 -42px;\\n\\t\\tpadding: 71px 0 28px 42px;\\n\\t}\\n\\n\\thtml[dir=\\\"rtl\\\"] .tc-sidebar-scrollable {\\n\\t\\tleft: auto;\\n\\t\\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\\n\\t}\\n\\n\\t.tc-story-river {\\n\\t\\tposition: relative;\\n\\t\\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\\n\\t\\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\\n\\t\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\\n\\t\\tpadding: 42px 42px 42px 42px;\\n\\t}\\n\\n<<if-no-sidebar \\\"\\n\\n\\t.tc-story-river {\\n\\t\\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\\n\\t}\\n\\n\\\">>\\n\\n}\\n\\n@media print {\\n\\n\\tbody.tc-body {\\n\\t\\tbackground-color: transparent;\\n\\t}\\n\\n\\t.tc-sidebar-header, .tc-topbar {\\n\\t\\tdisplay: none;\\n\\t}\\n\\n\\t.tc-story-river {\\n\\t\\tmargin: 0;\\n\\t\\tpadding: 0;\\n\\t}\\n\\n\\t.tc-story-river .tc-tiddler-frame {\\n\\t\\tmargin: 0;\\n\\t\\tborder: none;\\n\\t\\tpadding: 0;\\n\\t}\\n}\\n\\n/*\\n** Tiddler styles\\n*/\\n\\n.tc-tiddler-frame {\\n\\tposition: relative;\\n\\tmargin-bottom: 28px;\\n\\tbackground-color: <<colour tiddler-background>>;\\n\\tborder: 1px solid <<colour tiddler-border>>;\\n}\\n\\n{{$:/themes/tiddlywiki/vanilla/sticky}}\\n\\n.tc-tiddler-info {\\n\\tpadding: 14px 42px 14px 42px;\\n\\tbackground-color: <<colour tiddler-info-background>>;\\n\\tborder-top: 1px solid <<colour tiddler-info-border>>;\\n\\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\\n}\\n\\n.tc-tiddler-info p {\\n\\tmargin-top: 3px;\\n\\tmargin-bottom: 3px;\\n}\\n\\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: <<colour tiddler-info-tab-background>>;\\n\\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\\n}\\n\\n.tc-view-field-table {\\n\\twidth: 100%;\\n}\\n\\n.tc-view-field-name {\\n\\twidth: 1%; /* Makes this column be as narrow as possible */\\n\\ttext-align: right;\\n\\tfont-style: italic;\\n\\tfont-weight: 200;\\n}\\n\\n.tc-view-field-value {\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\t.tc-tiddler-frame {\\n\\t\\tpadding: 14px 14px 14px 14px;\\n\\t}\\n\\n\\t.tc-tiddler-info {\\n\\t\\tmargin: 0 -14px 0 -14px;\\n\\t}\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\t.tc-tiddler-frame {\\n\\t\\tpadding: 28px 42px 42px 42px;\\n\\t\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\\n\\t\\tborder-radius: 2px;\\n\\t}\\n\\n<<if-no-sidebar \\\"\\n\\n\\t.tc-tiddler-frame {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\\">>\\n\\n\\t.tc-tiddler-info {\\n\\t\\tmargin: 0 -42px 0 -42px;\\n\\t}\\n}\\n\\n.tc-site-title,\\n.tc-titlebar {\\n\\tfont-weight: 300;\\n\\tfont-size: 2.35em;\\n\\tline-height: 1.2em;\\n\\tcolor: <<colour tiddler-title-foreground>>;\\n\\tmargin: 0;\\n}\\n\\n.tc-site-title {\\n\\tcolor: <<colour site-title-foreground>>;\\n}\\n\\n.tc-tiddler-title-icon {\\n\\tvertical-align: middle;\\n}\\n\\n.tc-system-title-prefix {\\n\\tcolor: <<colour muted-foreground>>;\\n}\\n\\n.tc-titlebar h2 {\\n\\tfont-size: 1em;\\n\\tdisplay: inline;\\n}\\n\\n.tc-titlebar img {\\n\\theight: 1em;\\n}\\n\\n.tc-subtitle {\\n\\tfont-size: 0.9em;\\n\\tcolor: <<colour tiddler-subtitle-foreground>>;\\n\\tfont-weight: 300;\\n}\\n\\n.tc-tiddler-missing .tc-title {\\n  font-style: italic;\\n  font-weight: normal;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-controls {\\n\\tfloat: right;\\n}\\n\\n.tc-tiddler-controls .tc-drop-down {\\n\\tfont-size: 0.6em;\\n}\\n\\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\\n\\tfont-size: 1em;\\n}\\n\\n.tc-tiddler-controls > span > button,\\n.tc-tiddler-controls > span > span > button,\\n.tc-tiddler-controls > span > span > span > button {\\n\\tvertical-align: baseline;\\n\\tmargin-left:5px;\\n}\\n\\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\\n.tc-search button svg, .tc-search a svg {\\n\\tfill: <<colour tiddler-controls-foreground>>;\\n}\\n\\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\\n\\theight: 0.75em;\\n}\\n\\n.tc-search button svg, .tc-search a svg {\\n    height: 1.2em;\\n    width: 1.2em;\\n    margin: 0 0.25em;\\n}\\n\\n.tc-tiddler-controls button.tc-selected svg,\\n.tc-page-controls button.tc-selected svg  {\\n\\tfill: <<colour tiddler-controls-foreground-selected>>;\\n}\\n\\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\\n.tc-search button:hover svg, .tc-search a:hover svg {\\n\\tfill: <<colour tiddler-controls-foreground-hover>>;\\n}\\n\\n@media print {\\n\\t.tc-tiddler-controls {\\n\\t\\tdisplay: none;\\n\\t}\\n}\\n\\n.tc-tiddler-help { /* Help prompts within tiddler template */\\n\\tcolor: <<colour muted-foreground>>;\\n\\tmargin-top: 14px;\\n}\\n\\n.tc-tiddler-help a.tc-tiddlylink {\\n\\tcolor: <<colour very-muted-foreground>>;\\n}\\n\\n.tc-tiddler-frame .tc-edit-texteditor {\\n\\twidth: 100%;\\n\\tmargin: 4px 0 4px 0;\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor,\\n.tc-tiddler-frame iframe.tc-edit-texteditor {\\n\\tpadding: 3px 3px 3px 3px;\\n\\tborder: 1px solid <<colour tiddler-editor-border>>;\\n\\tbackground-color: <<colour tiddler-editor-background>>;\\n\\tline-height: 1.3em;\\n\\t-webkit-appearance: none;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\\n}\\n\\n.tc-tiddler-frame .tc-binary-warning {\\n\\twidth: 100%;\\n\\theight: 5em;\\n\\ttext-align: center;\\n\\tpadding: 3em 3em 6em 3em;\\n\\tbackground: <<colour alert-background>>;\\n\\tborder: 1px solid <<colour alert-border>>;\\n}\\n\\ncanvas.tc-edit-bitmapeditor  {\\n\\tborder: 6px solid <<colour tiddler-editor-border-image>>;\\n\\tcursor: crosshair;\\n\\t-moz-user-select: none;\\n\\t-webkit-user-select: none;\\n\\t-ms-user-select: none;\\n\\tmargin-top: 6px;\\n\\tmargin-bottom: 6px;\\n}\\n\\n.tc-edit-bitmapeditor-width {\\n\\tdisplay: block;\\n}\\n\\n.tc-edit-bitmapeditor-height {\\n\\tdisplay: block;\\n}\\n\\n.tc-tiddler-body {\\n\\tclear: both;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-body {\\n\\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\\n\\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\\n}\\n\\n.tc-titlebar, .tc-tiddler-edit-title {\\n\\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\\n}\\n\\nhtml body.tc-body.tc-single-tiddler-window {\\n\\tmargin: 1em;\\n\\tbackground: <<colour tiddler-background>>;\\n}\\n\\n.tc-single-tiddler-window img,\\n.tc-single-tiddler-window svg,\\n.tc-single-tiddler-window canvas,\\n.tc-single-tiddler-window embed,\\n.tc-single-tiddler-window iframe {\\n\\tmax-width: 100%;\\n}\\n\\n/*\\n** Editor\\n*/\\n\\n.tc-editor-toolbar {\\n\\tmargin-top: 8px;\\n}\\n\\n.tc-editor-toolbar button {\\n\\tvertical-align: middle;\\n\\tbackground-color: <<colour tiddler-controls-foreground>>;\\n\\tfill: <<colour tiddler-controls-foreground-selected>>;\\n\\tborder-radius: 4px;\\n\\tpadding: 3px;\\n\\tmargin: 2px 0 2px 4px;\\n}\\n\\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\\n\\tmargin-left: 1px;\\n\\twidth: 1em;\\n\\tborder-radius: 8px;\\n}\\n\\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\\n\\tmargin-left: 11px;\\n}\\n\\n.tc-editor-toolbar button.tc-selected {\\n\\tbackground-color: <<colour primary>>;\\n}\\n\\n.tc-editor-toolbar button svg {\\n\\twidth: 1.6em;\\n\\theight: 1.2em;\\n}\\n\\n.tc-editor-toolbar button:hover {\\n\\tbackground-color: <<colour tiddler-controls-foreground-selected>>;\\n\\tfill: <<colour background>>;\\n}\\n\\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\\n\\twhite-space: normal;\\n}\\n\\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\\n\\tdisplay: inline-block;\\n\\tpadding: 3px;\\n\\twidth: auto;\\n}\\n\\n.tc-editor-toolbar .tc-search-results {\\n\\tpadding: 0;\\n}\\n\\n/*\\n** Adjustments for fluid-fixed mode\\n*/\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n<<if-fluid-fixed text:\\\"\\\"\\\"\\n\\n\\t.tc-story-river {\\n\\t\\tpadding-right: 0;\\n\\t\\tposition: relative;\\n\\t\\twidth: auto;\\n\\t\\tleft: 0;\\n\\t\\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\\n\\t\\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\\n\\t}\\n\\n\\t.tc-tiddler-frame {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.tc-sidebar-scrollable {\\n\\t\\tleft: auto;\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\\n\\t}\\n\\n\\tbody.tc-body .tc-storyview-zoomin-tiddler {\\n\\t\\twidth: 100%;\\n\\t\\twidth: calc(100% - 42px);\\n\\t}\\n\\n\\\"\\\"\\\" hiddenSidebarText:\\\"\\\"\\\"\\n\\n\\t.tc-story-river {\\n\\t\\tpadding-right: 3em;\\n\\t\\tmargin-right: 0;\\n\\t}\\n\\n\\tbody.tc-body .tc-storyview-zoomin-tiddler {\\n\\t\\twidth: 100%;\\n\\t\\twidth: calc(100% - 84px);\\n\\t}\\n\\n\\\"\\\"\\\">>\\n\\n}\\n\\n/*\\n** Toolbar buttons\\n*/\\n\\n.tc-page-controls svg.tc-image-new-button {\\n  fill: <<colour toolbar-new-button>>;\\n}\\n\\n.tc-page-controls svg.tc-image-options-button {\\n  fill: <<colour toolbar-options-button>>;\\n}\\n\\n.tc-page-controls svg.tc-image-save-button {\\n  fill: <<colour toolbar-save-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-info-button {\\n  fill: <<colour toolbar-info-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-edit-button {\\n  fill: <<colour toolbar-edit-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-close-button {\\n  fill: <<colour toolbar-close-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-delete-button {\\n  fill: <<colour toolbar-delete-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-cancel-button {\\n  fill: <<colour toolbar-cancel-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-done-button {\\n  fill: <<colour toolbar-done-button>>;\\n}\\n\\n/*\\n** Tiddler edit mode\\n*/\\n\\n.tc-tiddler-edit-frame em.tc-edit {\\n\\tcolor: <<colour muted-foreground>>;\\n\\tfont-style: normal;\\n}\\n\\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\\n\\tfont-style: normal;\\n}\\n\\n.tc-edit-tags {\\n\\tborder: 1px solid <<colour tiddler-editor-border>>;\\n\\tpadding: 4px 8px 4px 8px;\\n}\\n\\n.tc-edit-add-tag {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-edit-add-tag .tc-add-tag-name input {\\n\\twidth: 50%;\\n}\\n\\n.tc-edit-add-tag .tc-keyboard {\\n\\tdisplay:inline;\\n}\\n\\n.tc-edit-tags .tc-tag-label {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-edit-tags-list {\\n\\tmargin: 14px 0 14px 0;\\n}\\n\\n.tc-remove-tag-button {\\n\\tpadding-left: 4px;\\n}\\n\\n.tc-tiddler-preview {\\n\\toverflow: auto;\\n}\\n\\n.tc-tiddler-preview-preview {\\n\\tfloat: right;\\n\\twidth: 49%;\\n\\tborder: 1px solid <<colour tiddler-editor-border>>;\\n\\tmargin: 4px 0 3px 3px;\\n\\tpadding: 3px 3px 3px 3px;\\n}\\n\\n<<if-editor-height-fixed then:\\\"\\\"\\\"\\n\\n.tc-tiddler-preview-preview {\\n\\toverflow-y: scroll;\\n\\theight: {{$:/config/TextEditor/EditorHeight/Height}};\\n}\\n\\n\\\"\\\"\\\">>\\n\\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {\\n\\twidth: 49%;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\\n\\tmax-width: 49%;\\n}\\n\\n.tc-edit-fields {\\n\\twidth: 100%;\\n}\\n\\n\\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\\n\\tborder: none;\\n\\tpadding: 4px;\\n}\\n\\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\\n\\tbackground-color: <<colour tiddler-editor-fields-odd>>;\\n}\\n\\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\\n\\tbackground-color: <<colour tiddler-editor-fields-even>>;\\n}\\n\\n.tc-edit-field-name {\\n\\ttext-align: right;\\n}\\n\\n.tc-edit-field-value input {\\n\\twidth: 100%;\\n}\\n\\n.tc-edit-field-remove {\\n}\\n\\n.tc-edit-field-remove svg {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: <<colour muted-foreground>>;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-edit-field-add-name {\\n\\tdisplay: inline-block;\\n\\twidth: 15%;\\n}\\n\\n.tc-edit-field-add-value {\\n\\tdisplay: inline-block;\\n\\twidth: 40%;\\n}\\n\\n.tc-edit-field-add-button {\\n\\tdisplay: inline-block;\\n\\twidth: 10%;\\n}\\n\\n/*\\n** Storyview Classes\\n*/\\n\\n.tc-storyview-zoomin-tiddler {\\n\\tposition: absolute;\\n\\tdisplay: block;\\n\\twidth: 100%;\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\t.tc-storyview-zoomin-tiddler {\\n\\t\\twidth: calc(100% - 84px);\\n\\t}\\n\\n}\\n\\n/*\\n** Dropdowns\\n*/\\n\\n.tc-btn-dropdown {\\n\\ttext-align: left;\\n}\\n\\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: <<colour muted-foreground>>;\\n}\\n\\n.tc-drop-down-wrapper {\\n\\tposition: relative;\\n}\\n\\n.tc-drop-down {\\n\\tmin-width: 380px;\\n\\tborder: 1px solid <<colour dropdown-border>>;\\n\\tbackground-color: <<colour dropdown-background>>;\\n\\tpadding: 7px 0 7px 0;\\n\\tmargin: 4px 0 0 0;\\n\\twhite-space: nowrap;\\n\\ttext-shadow: none;\\n\\tline-height: 1.4;\\n}\\n\\n.tc-drop-down .tc-drop-down {\\n\\tmargin-left: 14px;\\n}\\n\\n.tc-drop-down button svg, .tc-drop-down a svg  {\\n\\tfill: <<colour foreground>>;\\n}\\n\\n.tc-drop-down button.tc-btn-invisible:hover svg {\\n\\tfill: <<colour foreground>>;\\n}\\n\\n.tc-drop-down p {\\n\\tpadding: 0 14px 0 14px;\\n}\\n\\n.tc-drop-down svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\n.tc-drop-down img {\\n\\twidth: 1em;\\n}\\n\\n.tc-drop-down-language-chooser img {\\n\\twidth: 2em;\\n\\tvertical-align: baseline;\\n}\\n\\n.tc-drop-down a, .tc-drop-down button {\\n\\tdisplay: block;\\n\\tpadding: 0 14px 0 14px;\\n\\twidth: 100%;\\n\\ttext-align: left;\\n\\tcolor: <<colour foreground>>;\\n\\tline-height: 1.4;\\n}\\n\\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\\n\\tdisplay: inline-block;\\n    width: auto;\\n    margin-bottom: 0px;\\n    border-bottom-left-radius: 0;\\n    border-bottom-right-radius: 0;\\n}\\n\\n.tc-drop-down .tc-prompt {\\n\\tpadding: 0 14px;\\n}\\n\\n.tc-drop-down .tc-chooser {\\n\\tborder: none;\\n}\\n\\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\\n\\tfont-size: 0.4em;\\n\\tpadding-left: 1.2em;\\n}\\n\\n.tc-drop-down .tc-file-input-wrapper {\\n\\twidth: 100%;\\n}\\n\\n.tc-drop-down .tc-file-input-wrapper button {\\n\\tcolor: <<colour foreground>>;\\n}\\n\\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\\n\\tcolor: <<colour tiddler-link-background>>;\\n\\tbackground-color: <<colour tiddler-link-foreground>>;\\n\\ttext-decoration: none;\\n}\\n\\n.tc-drop-down .tc-tab-buttons button {\\n\\tbackground-color: <<colour dropdown-tab-background>>;\\n}\\n\\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: <<colour dropdown-tab-background-selected>>;\\n\\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\\n}\\n\\n.tc-drop-down-bullet {\\n\\tdisplay: inline-block;\\n\\twidth: 0.5em;\\n}\\n\\n.tc-drop-down .tc-tab-contents a {\\n\\tpadding: 0 0.5em 0 0.5em;\\n}\\n\\n.tc-block-dropdown-wrapper {\\n\\tposition: relative;\\n}\\n\\n.tc-block-dropdown {\\n\\tposition: absolute;\\n\\tmin-width: 220px;\\n\\tborder: 1px solid <<colour dropdown-border>>;\\n\\tbackground-color: <<colour dropdown-background>>;\\n\\tpadding: 7px 0;\\n\\tmargin: 4px 0 0 0;\\n\\twhite-space: nowrap;\\n\\tz-index: 1000;\\n\\ttext-shadow: none;\\n}\\n\\n.tc-block-dropdown.tc-search-drop-down {\\n\\tmargin-left: -12px;\\n}\\n\\n.tc-block-dropdown a {\\n\\tdisplay: block;\\n\\tpadding: 4px 14px 4px 14px;\\n}\\n\\n.tc-block-dropdown.tc-search-drop-down a {\\n\\tdisplay: block;\\n\\tpadding: 0px 10px 0px 10px;\\n}\\n\\n.tc-drop-down .tc-dropdown-item-plain,\\n.tc-block-dropdown .tc-dropdown-item-plain {\\n\\tpadding: 4px 14px 4px 7px;\\n}\\n\\n.tc-drop-down .tc-dropdown-item,\\n.tc-block-dropdown .tc-dropdown-item {\\n\\tpadding: 4px 14px 4px 7px;\\n\\tcolor: <<colour muted-foreground>>;\\n}\\n\\n.tc-block-dropdown a:hover {\\n\\tcolor: <<colour tiddler-link-background>>;\\n\\tbackground-color: <<colour tiddler-link-foreground>>;\\n\\ttext-decoration: none;\\n}\\n\\n.tc-search-results {\\n\\tpadding: 0 7px 0 7px;\\n}\\n\\n.tc-image-chooser, .tc-colour-chooser {\\n\\twhite-space: normal;\\n}\\n\\n.tc-image-chooser a,\\n.tc-colour-chooser a {\\n\\tdisplay: inline-block;\\n\\tvertical-align: top;\\n\\ttext-align: center;\\n\\tposition: relative;\\n}\\n\\n.tc-image-chooser a {\\n\\tborder: 1px solid <<colour muted-foreground>>;\\n\\tpadding: 2px;\\n\\tmargin: 2px;\\n\\twidth: 4em;\\n\\theight: 4em;\\n}\\n\\n.tc-colour-chooser a {\\n\\tpadding: 3px;\\n\\twidth: 2em;\\n\\theight: 2em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-image-chooser a:hover,\\n.tc-colour-chooser a:hover {\\n\\tbackground: <<colour primary>>;\\n\\tpadding: 0px;\\n\\tborder: 3px solid <<colour primary>>;\\n}\\n\\n.tc-image-chooser a svg,\\n.tc-image-chooser a img {\\n\\tdisplay: inline-block;\\n\\twidth: auto;\\n\\theight: auto;\\n\\tmax-width: 3.5em;\\n\\tmax-height: 3.5em;\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tmargin: auto;\\n}\\n\\n/*\\n** Modals\\n*/\\n\\n.tc-modal-wrapper {\\n\\tposition: fixed;\\n\\toverflow: auto;\\n\\toverflow-y: scroll;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tz-index: 900;\\n}\\n\\n.tc-modal-backdrop {\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tz-index: 1000;\\n\\tbackground-color: <<colour modal-backdrop>>;\\n}\\n\\n.tc-modal {\\n\\tz-index: 1100;\\n\\tbackground-color: <<colour modal-background>>;\\n\\tborder: 1px solid <<colour modal-border>>;\\n}\\n\\n@media (max-width: 55em) {\\n\\t.tc-modal {\\n\\t\\tposition: fixed;\\n\\t\\ttop: 1em;\\n\\t\\tleft: 1em;\\n\\t\\tright: 1em;\\n\\t}\\n\\n\\t.tc-modal-body {\\n\\t\\toverflow-y: auto;\\n\\t\\tmax-height: 400px;\\n\\t\\tmax-height: 60vh;\\n\\t}\\n}\\n\\n@media (min-width: 55em) {\\n\\t.tc-modal {\\n\\t\\tposition: fixed;\\n\\t\\ttop: 2em;\\n\\t\\tleft: 25%;\\n\\t\\twidth: 50%;\\n\\t}\\n\\n\\t.tc-modal-body {\\n\\t\\toverflow-y: auto;\\n\\t\\tmax-height: 400px;\\n\\t\\tmax-height: 60vh;\\n\\t}\\n}\\n\\n.tc-modal-header {\\n\\tpadding: 9px 15px;\\n\\tborder-bottom: 1px solid <<colour modal-header-border>>;\\n}\\n\\n.tc-modal-header h3 {\\n\\tmargin: 0;\\n\\tline-height: 30px;\\n}\\n\\n.tc-modal-header img, .tc-modal-header svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\n.tc-modal-body {\\n\\tpadding: 15px;\\n}\\n\\n.tc-modal-footer {\\n\\tpadding: 14px 15px 15px;\\n\\tmargin-bottom: 0;\\n\\ttext-align: right;\\n\\tbackground-color: <<colour modal-footer-background>>;\\n\\tborder-top: 1px solid <<colour modal-footer-border>>;\\n}\\n\\n/*\\n** Notifications\\n*/\\n\\n.tc-notification {\\n\\tposition: fixed;\\n\\ttop: 14px;\\n\\tright: 42px;\\n\\tz-index: 1300;\\n\\tmax-width: 280px;\\n\\tpadding: 0 14px 0 14px;\\n\\tbackground-color: <<colour notification-background>>;\\n\\tborder: 1px solid <<colour notification-border>>;\\n}\\n\\n/*\\n** Tabs\\n*/\\n\\n.tc-tab-set.tc-vertical {\\n\\tdisplay: -webkit-flex;\\n\\tdisplay: flex;\\n}\\n\\n.tc-tab-buttons {\\n\\tfont-size: 0.85em;\\n\\tpadding-top: 1em;\\n\\tmargin-bottom: -2px;\\n}\\n\\n.tc-tab-buttons.tc-vertical  {\\n\\tz-index: 100;\\n\\tdisplay: block;\\n\\tpadding-top: 14px;\\n\\tvertical-align: top;\\n\\ttext-align: right;\\n\\tmargin-bottom: inherit;\\n\\tmargin-right: -1px;\\n\\tmax-width: 33%;\\n\\t-webkit-flex: 0 0 auto;\\n\\tflex: 0 0 auto;\\n}\\n\\n.tc-tab-buttons button.tc-tab-selected {\\n\\tcolor: <<colour tab-foreground-selected>>;\\n\\tbackground-color: <<colour tab-background-selected>>;\\n\\tborder-left: 1px solid <<colour tab-border-selected>>;\\n\\tborder-top: 1px solid <<colour tab-border-selected>>;\\n\\tborder-right: 1px solid <<colour tab-border-selected>>;\\n}\\n\\n.tc-tab-buttons button {\\n\\tcolor: <<colour tab-foreground>>;\\n\\tpadding: 3px 5px 3px 5px;\\n\\tmargin-right: 0.3em;\\n\\tfont-weight: 300;\\n\\tborder: none;\\n\\tbackground: inherit;\\n\\tbackground-color: <<colour tab-background>>;\\n\\tborder-left: 1px solid <<colour tab-border>>;\\n\\tborder-top: 1px solid <<colour tab-border>>;\\n\\tborder-right: 1px solid <<colour tab-border>>;\\n\\tborder-top-left-radius: 2px;\\n\\tborder-top-right-radius: 2px;\\n\\tborder-bottom-left-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n}\\n\\n.tc-tab-buttons.tc-vertical button {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\tmargin-top: 3px;\\n\\tmargin-right: 0;\\n\\ttext-align: right;\\n\\tbackground-color: <<colour tab-background>>;\\n\\tborder-left: 1px solid <<colour tab-border>>;\\n\\tborder-bottom: 1px solid <<colour tab-border>>;\\n\\tborder-right: none;\\n\\tborder-top-left-radius: 2px;\\n\\tborder-bottom-left-radius: 2px;\\n\\tborder-top-right-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n}\\n\\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\\n\\tbackground-color: <<colour tab-background-selected>>;\\n\\tborder-right: 1px solid <<colour tab-background-selected>>;\\n}\\n\\n.tc-tab-divider {\\n\\tborder-top: 1px solid <<colour tab-divider>>;\\n}\\n\\n.tc-tab-divider.tc-vertical  {\\n\\tdisplay: none;\\n}\\n\\n.tc-tab-content {\\n\\tmargin-top: 14px;\\n}\\n\\n.tc-tab-content.tc-vertical  {\\n\\tdisplay: inline-block;\\n\\tvertical-align: top;\\n\\tpadding-top: 0;\\n\\tpadding-left: 14px;\\n\\tborder-left: 1px solid <<colour tab-border>>;\\n\\t-webkit-flex: 1 0 70%;\\n\\tflex: 1 0 70%;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons {\\n\\tmargin-bottom: -1px;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: <<colour sidebar-tab-background-selected>>;\\n\\tcolor: <<colour sidebar-tab-foreground-selected>>;\\n\\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\\n\\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\\n\\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons button {\\n\\tbackground-color: <<colour sidebar-tab-background>>;\\n\\tcolor: <<colour sidebar-tab-foreground>>;\\n\\tborder-left: 1px solid <<colour sidebar-tab-border>>;\\n\\tborder-top: 1px solid <<colour sidebar-tab-border>>;\\n\\tborder-right: 1px solid <<colour sidebar-tab-border>>;\\n}\\n\\n.tc-sidebar-lists .tc-tab-divider {\\n\\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\tbackground-color: <<colour sidebar-tab-background>>;\\n\\tborder-top: none;\\n\\tborder-left: none;\\n\\tborder-bottom: none;\\n\\tborder-right: 1px solid #ccc;\\n\\tmargin-bottom: inherit;\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\\n\\tbackground-color: <<colour sidebar-tab-background-selected>>;\\n\\tborder: none;\\n}\\n\\n/*\\n** Manager\\n*/\\n\\n.tc-manager-wrapper {\\n\\t\\n}\\n\\n.tc-manager-controls {\\n\\t\\n}\\n\\n.tc-manager-control {\\n\\tmargin: 0.5em 0;\\n}\\n\\n.tc-manager-list {\\n\\twidth: 100%;\\n\\tborder-top: 1px solid <<colour muted-foreground>>;\\n\\tborder-left: 1px solid <<colour muted-foreground>>;\\n\\tborder-right: 1px solid <<colour muted-foreground>>;\\n}\\n\\n.tc-manager-list-item {\\n\\n}\\n\\n.tc-manager-list-item-heading {\\n    display: block;\\n    width: 100%;\\n    text-align: left;\\t\\n\\tborder-bottom: 1px solid <<colour muted-foreground>>;\\n\\tpadding: 3px;\\n}\\n\\n.tc-manager-list-item-heading-selected {\\n\\tfont-weight: bold;\\n\\tcolor: <<colour background>>;\\n\\tfill: <<colour background>>;\\n\\tbackground-color: <<colour foreground>>;\\n}\\n\\n.tc-manager-list-item-heading:hover {\\n\\tbackground: <<colour primary>>;\\n\\tcolor: <<colour background>>;\\n}\\n\\n.tc-manager-list-item-content {\\n\\tdisplay: flex;\\n}\\n\\n.tc-manager-list-item-content-sidebar {\\n    flex: 1 0;\\n    background: <<colour tiddler-editor-background>>;\\n    border-right: 0.5em solid <<colour muted-foreground>>;\\n    border-bottom: 0.5em solid <<colour muted-foreground>>;\\n    white-space: nowrap;\\n}\\n\\n.tc-manager-list-item-content-item-heading {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\ttext-align: left;\\n    background: <<colour muted-foreground>>;\\n\\ttext-transform: uppercase;\\n\\tfont-size: 0.6em;\\n\\tfont-weight: bold;\\n    padding: 0.5em 0 0.5em 0;\\n}\\n\\n.tc-manager-list-item-content-item-body {\\n\\tpadding: 0 0.5em 0 0.5em;\\n}\\n\\n.tc-manager-list-item-content-item-body > pre {\\n\\tmargin: 0.5em 0 0.5em 0;\\n\\tborder: none;\\n\\tbackground: inherit;\\n}\\n\\n.tc-manager-list-item-content-tiddler {\\n    flex: 3 1;\\n    border-left: 0.5em solid <<colour muted-foreground>>;\\n    border-right: 0.5em solid <<colour muted-foreground>>;\\n    border-bottom: 0.5em solid <<colour muted-foreground>>;\\n}\\n\\n.tc-manager-list-item-content-item-body > table {\\n\\tborder: none;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n}\\n\\n.tc-manager-list-item-content-item-body > table td {\\n\\tborder: none;\\n}\\n\\n.tc-manager-icon-editor > button {\\n\\twidth: 100%;\\n}\\n\\n.tc-manager-icon-editor > button > svg,\\n.tc-manager-icon-editor > button > button {\\n\\twidth: 100%;\\n\\theight: auto;\\n}\\n\\n/*\\n** Alerts\\n*/\\n\\n.tc-alerts {\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tmax-width: 500px;\\n\\tz-index: 20000;\\n}\\n\\n.tc-alert {\\n\\tposition: relative;\\n\\tmargin: 28px;\\n\\tpadding: 14px 14px 14px 14px;\\n\\tborder: 2px solid <<colour alert-border>>;\\n\\tbackground-color: <<colour alert-background>>;\\n}\\n\\n.tc-alert-toolbar {\\n\\tposition: absolute;\\n\\ttop: 14px;\\n\\tright: 14px;\\n}\\n\\n.tc-alert-toolbar svg {\\n\\tfill: <<colour alert-muted-foreground>>;\\n}\\n\\n.tc-alert-subtitle {\\n\\tcolor: <<colour alert-muted-foreground>>;\\n\\tfont-weight: bold;\\n}\\n\\n.tc-alert-highlight {\\n\\tcolor: <<colour alert-highlight>>;\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\t.tc-static-alert {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t.tc-static-alert-inner {\\n\\t\\tposition: absolute;\\n\\t\\tz-index: 100;\\n\\t}\\n\\n}\\n\\n.tc-static-alert-inner {\\n\\tpadding: 0 2px 2px 42px;\\n\\tcolor: <<colour static-alert-foreground>>;\\n}\\n\\n/*\\n** Control panel\\n*/\\n\\n.tc-control-panel td {\\n\\tpadding: 4px;\\n}\\n\\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\\n\\twidth: 100%;\\n}\\n\\n.tc-plugin-info {\\n\\tdisplay: block;\\n\\tborder: 1px solid <<colour muted-foreground>>;\\n\\tbackground-colour: <<colour background>>;\\n\\tmargin: 0.5em 0 0.5em 0;\\n\\tpadding: 4px;\\n}\\n\\n.tc-plugin-info-disabled {\\n\\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\\n\\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\\n}\\n\\n.tc-plugin-info-disabled:hover {\\n\\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\\n\\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\\n}\\n\\na.tc-tiddlylink.tc-plugin-info:hover {\\n\\ttext-decoration: none;\\n\\tbackground-color: <<colour primary>>;\\n\\tcolor: <<colour background>>;\\n\\tfill: <<colour foreground>>;\\n}\\n\\na.tc-tiddlylink.tc-plugin-info:hover .tc-plugin-info > .tc-plugin-info-chunk > svg {\\n\\tfill: <<colour foreground>>;\\n}\\n\\n.tc-plugin-info-chunk {\\n\\tdisplay: inline-block;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-plugin-info-chunk h1 {\\n\\tfont-size: 1em;\\n\\tmargin: 2px 0 2px 0;\\n}\\n\\n.tc-plugin-info-chunk h2 {\\n\\tfont-size: 0.8em;\\n\\tmargin: 2px 0 2px 0;\\n}\\n\\n.tc-plugin-info-chunk div {\\n\\tfont-size: 0.7em;\\n\\tmargin: 2px 0 2px 0;\\n}\\n\\n.tc-plugin-info:hover > .tc-plugin-info-chunk > img, .tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\\n\\twidth: 2em;\\n\\theight: 2em;\\n\\tfill: <<colour foreground>>;\\n}\\n\\n.tc-plugin-info > .tc-plugin-info-chunk > img, .tc-plugin-info > .tc-plugin-info-chunk > svg {\\n\\twidth: 2em;\\n\\theight: 2em;\\n\\tfill: <<colour muted-foreground>>;\\n}\\n\\n.tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > img, .tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\n.tc-plugin-info-dropdown {\\n\\tborder: 1px solid <<colour muted-foreground>>;\\n\\tmargin-top: -8px;\\n}\\n\\n.tc-plugin-info-dropdown-message {\\n\\tbackground: <<colour message-background>>;\\n\\tpadding: 0.5em 1em 0.5em 1em;\\n\\tfont-weight: bold;\\n\\tfont-size: 0.8em;\\n}\\n\\n.tc-plugin-info-dropdown-body {\\n\\tpadding: 1em 1em 1em 1em;\\n}\\n\\n/*\\n** Message boxes\\n*/\\n\\n.tc-message-box {\\n\\tborder: 1px solid <<colour message-border>>;\\n\\tbackground: <<colour message-background>>;\\n\\tpadding: 0px 21px 0px 21px;\\n\\tfont-size: 12px;\\n\\tline-height: 18px;\\n\\tcolor: <<colour message-foreground>>;\\n}\\n\\n.tc-message-box svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n    vertical-align: text-bottom;\\n}\\n\\n/*\\n** Pictures\\n*/\\n\\n.tc-bordered-image {\\n\\tborder: 1px solid <<colour muted-foreground>>;\\n\\tpadding: 5px;\\n\\tmargin: 5px;\\n}\\n\\n/*\\n** Floats\\n*/\\n\\n.tc-float-right {\\n\\tfloat: right;\\n}\\n\\n/*\\n** Chooser\\n*/\\n\\n.tc-chooser {\\n\\tborder: 1px solid <<colour table-border>>;\\n}\\n\\n.tc-chooser-item {\\n\\tborder: 8px;\\n\\tpadding: 2px 4px;\\n}\\n\\n.tc-chooser-item a.tc-tiddlylink {\\n\\tdisplay: block;\\n\\ttext-decoration: none;\\n\\tcolor: <<colour tiddler-link-foreground>>;\\n\\tbackground-color: <<colour tiddler-link-background>>;\\n}\\n\\n.tc-chooser-item a.tc-tiddlylink:hover {\\n\\ttext-decoration: none;\\n\\tcolor: <<colour tiddler-link-background>>;\\n\\tbackground-color: <<colour tiddler-link-foreground>>;\\n}\\n\\n/*\\n** Palette swatches\\n*/\\n\\n.tc-swatches-horiz {\\n}\\n\\n.tc-swatches-horiz .tc-swatch {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-swatch {\\n\\twidth: 2em;\\n\\theight: 2em;\\n\\tmargin: 0.4em;\\n\\tborder: 1px solid #888;\\n}\\n\\n/*\\n** Table of contents\\n*/\\n\\n.tc-sidebar-lists .tc-table-of-contents {\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-table-of-contents button {\\n\\tcolor: <<colour sidebar-foreground>>;\\n}\\n\\n.tc-table-of-contents svg {\\n\\twidth: 0.7em;\\n\\theight: 0.7em;\\n\\tvertical-align: middle;\\n\\tfill: <<colour sidebar-foreground>>;\\n}\\n\\n.tc-table-of-contents ol {\\n\\tlist-style-type: none;\\n\\tpadding-left: 0;\\n}\\n\\n.tc-table-of-contents ol ol {\\n\\tpadding-left: 1em;\\n}\\n\\n.tc-table-of-contents li {\\n\\tfont-size: 1.0em;\\n\\tfont-weight: bold;\\n}\\n\\n.tc-table-of-contents li a {\\n\\tfont-weight: bold;\\n}\\n\\n.tc-table-of-contents li li {\\n\\tfont-size: 0.95em;\\n\\tfont-weight: normal;\\n\\tline-height: 1.4;\\n}\\n\\n.tc-table-of-contents li li a {\\n\\tfont-weight: normal;\\n}\\n\\n.tc-table-of-contents li li li {\\n\\tfont-size: 0.95em;\\n\\tfont-weight: 200;\\n\\tline-height: 1.5;\\n}\\n\\n.tc-table-of-contents li li li a {\\n\\tfont-weight: bold;\\n}\\n\\n.tc-table-of-contents li li li li {\\n\\tfont-size: 0.95em;\\n\\tfont-weight: 200;\\n}\\n\\n.tc-tabbed-table-of-contents {\\n\\tdisplay: -webkit-flex;\\n\\tdisplay: flex;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents {\\n\\tz-index: 100;\\n\\tdisplay: inline-block;\\n\\tpadding-left: 1em;\\n\\tmax-width: 50%;\\n\\t-webkit-flex: 0 0 auto;\\n\\tflex: 0 0 auto;\\n\\tbackground: <<colour tab-background>>;\\n\\tborder-left: 1px solid <<colour tab-border>>;\\n\\tborder-top: 1px solid <<colour tab-border>>;\\n\\tborder-bottom: 1px solid <<colour tab-border>>;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\\n\\tdisplay: block;\\n\\tpadding: 0.12em 1em 0.12em 0.25em;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\\n\\tborder-top: 1px solid <<colour tab-background>>;\\n\\tborder-left: 1px solid <<colour tab-background>>;\\n\\tborder-bottom: 1px solid <<colour tab-background>>;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\\n\\ttext-decoration: none;\\n\\tborder-top: 1px solid <<colour tab-border>>;\\n\\tborder-left: 1px solid <<colour tab-border>>;\\n\\tborder-bottom: 1px solid <<colour tab-border>>;\\n\\tbackground: <<colour tab-border>>;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\\n\\tborder-top: 1px solid <<colour tab-border>>;\\n\\tborder-left: 1px solid <<colour tab-border>>;\\n\\tborder-bottom: 1px solid <<colour tab-border>>;\\n\\tbackground: <<colour background>>;\\n\\tmargin-right: -1px;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\\n\\ttext-decoration: none;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\\n\\tdisplay: inline-block;\\n\\tvertical-align: top;\\n\\tpadding-left: 1.5em;\\n\\tpadding-right: 1.5em;\\n\\tborder: 1px solid <<colour tab-border>>;\\n\\t-webkit-flex: 1 0 50%;\\n\\tflex: 1 0 50%;\\n}\\n\\n/*\\n** Dirty indicator\\n*/\\n\\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\\n\\tfill: <<colour dirty-indicator>>;\\n\\tcolor: <<colour dirty-indicator>>;\\n}\\n\\n/*\\n** File inputs\\n*/\\n\\n.tc-file-input-wrapper {\\n\\tposition: relative;\\n\\toverflow: hidden;\\n\\tdisplay: inline-block;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-file-input-wrapper input[type=file] {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tfont-size: 999px;\\n\\tmax-width: 100%;\\n\\tmax-height: 100%;\\n\\tfilter: alpha(opacity=0);\\n\\topacity: 0;\\n\\toutline: none;\\n\\tbackground: white;\\n\\tcursor: pointer;\\n\\tdisplay: inline-block;\\n}\\n\\n/*\\n** Thumbnail macros\\n*/\\n\\n.tc-thumbnail-wrapper {\\n\\tposition: relative;\\n\\tdisplay: inline-block;\\n\\tmargin: 6px;\\n\\tvertical-align: top;\\n}\\n\\n.tc-thumbnail-right-wrapper {\\n\\tfloat:right;\\n\\tmargin: 0.5em 0 0.5em 0.5em;\\n}\\n\\n.tc-thumbnail-image {\\n\\ttext-align: center;\\n\\toverflow: hidden;\\n\\tborder-radius: 3px;\\n}\\n\\n.tc-thumbnail-image svg,\\n.tc-thumbnail-image img {\\n\\tfilter: alpha(opacity=1);\\n\\topacity: 1;\\n\\tmin-width: 100%;\\n\\tmin-height: 100%;\\n\\tmax-width: 100%;\\n}\\n\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\\n\\tfilter: alpha(opacity=0.8);\\n\\topacity: 0.8;\\n}\\n\\n.tc-thumbnail-background {\\n\\tposition: absolute;\\n\\tborder-radius: 3px;\\n}\\n\\n.tc-thumbnail-icon svg,\\n.tc-thumbnail-icon img {\\n\\twidth: 3em;\\n\\theight: 3em;\\n\\t<<filter \\\"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\\\">>\\n}\\n\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\\n\\tfill: #fff;\\n\\t<<filter \\\"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\\\">>\\n}\\n\\n.tc-thumbnail-icon {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tdisplay: -webkit-flex;\\n\\t-webkit-align-items: center;\\n\\t-webkit-justify-content: center;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n}\\n\\n.tc-thumbnail-caption {\\n\\tposition: absolute;\\n\\tbackground-color: #777;\\n\\tcolor: #fff;\\n\\ttext-align: center;\\n\\tbottom: 0;\\n\\twidth: 100%;\\n\\tfilter: alpha(opacity=0.9);\\n\\topacity: 0.9;\\n\\tline-height: 1.4;\\n\\tborder-bottom-left-radius: 3px;\\n\\tborder-bottom-right-radius: 3px;\\n}\\n\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\\n\\tfilter: alpha(opacity=1);\\n\\topacity: 1;\\n}\\n\\n/*\\n** Errors\\n*/\\n\\n.tc-error {\\n\\tbackground: #f00;\\n\\tcolor: #fff;\\n}\\n\\n/*\\n** Tree macro\\n*/\\n\\n.tc-tree div {\\n    \\tpadding-left: 14px;\\n}\\n\\n.tc-tree ol {\\n    \\tlist-style-type: none;\\n    \\tpadding-left: 0;\\n    \\tmargin-top: 0;\\n}\\n\\n.tc-tree ol ol {\\n    \\tpadding-left: 1em;    \\n}\\n\\n.tc-tree button { \\n    \\tcolor: #acacac;\\n}\\n\\n.tc-tree svg {\\n     \\tfill: #acacac;\\n}\\n\\n.tc-tree span svg {\\n    \\twidth: 1em;\\n    \\theight: 1em;\\n    \\tvertical-align: baseline;\\n}\\n\\n.tc-tree li span {\\n    \\tcolor: lightgray;\\n}\\n\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\",\n            \"text\": \"15px\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\",\n            \"text\": \"22px\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n            \"text\": \"14px\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n            \"text\": \"20px\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n            \"text\": \"0px\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/metrics/storytop\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n            \"text\": \"0px\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/metrics/storyright\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n            \"text\": \"770px\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n            \"text\": \"770px\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\",\n            \"text\": \"686px\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\",\n            \"text\": \"960px\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\",\n            \"text\": \"350px\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/options/stickytitles\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/options/stickytitles\",\n            \"text\": \"no\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\",\n            \"text\": \"fixed-fluid\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/options/codewrapping\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/options/codewrapping\",\n            \"text\": \"pre-wrap\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/reset\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/reset\",\n            \"type\": \"text/plain\",\n            \"text\": \"/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\\n\\n/**\\n * 1. Set default font family to sans-serif.\\n * 2. Prevent iOS text size adjust after orientation change, without disabling\\n *    user zoom.\\n */\\n\\nhtml {\\n  font-family: sans-serif; /* 1 */\\n  -ms-text-size-adjust: 100%; /* 2 */\\n  -webkit-text-size-adjust: 100%; /* 2 */\\n}\\n\\n/**\\n * Remove default margin.\\n */\\n\\nbody {\\n  margin: 0;\\n}\\n\\n/* HTML5 display definitions\\n   ========================================================================== */\\n\\n/**\\n * Correct `block` display not defined in IE 8/9.\\n */\\n\\narticle,\\naside,\\ndetails,\\nfigcaption,\\nfigure,\\nfooter,\\nheader,\\nhgroup,\\nmain,\\nnav,\\nsection,\\nsummary {\\n  display: block;\\n}\\n\\n/**\\n * 1. Correct `inline-block` display not defined in IE 8/9.\\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\\n */\\n\\naudio,\\ncanvas,\\nprogress,\\nvideo {\\n  display: inline-block; /* 1 */\\n  vertical-align: baseline; /* 2 */\\n}\\n\\n/**\\n * Prevent modern browsers from displaying `audio` without controls.\\n * Remove excess height in iOS 5 devices.\\n */\\n\\naudio:not([controls]) {\\n  display: none;\\n  height: 0;\\n}\\n\\n/**\\n * Address `[hidden]` styling not present in IE 8/9.\\n * Hide the `template` element in IE, Safari, and Firefox < 22.\\n */\\n\\n[hidden],\\ntemplate {\\n  display: none;\\n}\\n\\n/* Links\\n   ========================================================================== */\\n\\n/**\\n * Remove the gray background color from active links in IE 10.\\n */\\n\\na {\\n  background: transparent;\\n}\\n\\n/**\\n * Improve readability when focused and also mouse hovered in all browsers.\\n */\\n\\na:active,\\na:hover {\\n  outline: 0;\\n}\\n\\n/* Text-level semantics\\n   ========================================================================== */\\n\\n/**\\n * Address styling not present in IE 8/9, Safari 5, and Chrome.\\n */\\n\\nabbr[title] {\\n  border-bottom: 1px dotted;\\n}\\n\\n/**\\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\\n */\\n\\nb,\\nstrong {\\n  font-weight: bold;\\n}\\n\\n/**\\n * Address styling not present in Safari 5 and Chrome.\\n */\\n\\ndfn {\\n  font-style: italic;\\n}\\n\\n/**\\n * Address variable `h1` font-size and margin within `section` and `article`\\n * contexts in Firefox 4+, Safari 5, and Chrome.\\n */\\n\\nh1 {\\n  font-size: 2em;\\n  margin: 0.67em 0;\\n}\\n\\n/**\\n * Address styling not present in IE 8/9.\\n */\\n\\nmark {\\n  background: #ff0;\\n  color: #000;\\n}\\n\\n/**\\n * Address inconsistent and variable font size in all browsers.\\n */\\n\\nsmall {\\n  font-size: 80%;\\n}\\n\\n/**\\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\\n */\\n\\nsub,\\nsup {\\n  font-size: 75%;\\n  line-height: 0;\\n  position: relative;\\n  vertical-align: baseline;\\n}\\n\\nsup {\\n  top: -0.5em;\\n}\\n\\nsub {\\n  bottom: -0.25em;\\n}\\n\\n/* Embedded content\\n   ========================================================================== */\\n\\n/**\\n * Remove border when inside `a` element in IE 8/9.\\n */\\n\\nimg {\\n  border: 0;\\n}\\n\\n/**\\n * Correct overflow displayed oddly in IE 9.\\n */\\n\\nsvg:not(:root) {\\n  overflow: hidden;\\n}\\n\\n/* Grouping content\\n   ========================================================================== */\\n\\n/**\\n * Address margin not present in IE 8/9 and Safari 5.\\n */\\n\\nfigure {\\n  margin: 1em 40px;\\n}\\n\\n/**\\n * Address differences between Firefox and other browsers.\\n */\\n\\nhr {\\n  -moz-box-sizing: content-box;\\n  box-sizing: content-box;\\n  height: 0;\\n}\\n\\n/**\\n * Contain overflow in all browsers.\\n */\\n\\npre {\\n  overflow: auto;\\n}\\n\\n/**\\n * Address odd `em`-unit font size rendering in all browsers.\\n */\\n\\ncode,\\nkbd,\\npre,\\nsamp {\\n  font-family: monospace, monospace;\\n  font-size: 1em;\\n}\\n\\n/* Forms\\n   ========================================================================== */\\n\\n/**\\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\\n * styling of `select`, unless a `border` property is set.\\n */\\n\\n/**\\n * 1. Correct color not being inherited.\\n *    Known issue: affects color of disabled elements.\\n * 2. Correct font properties not being inherited.\\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\\n */\\n\\nbutton,\\ninput,\\noptgroup,\\nselect,\\ntextarea {\\n  color: inherit; /* 1 */\\n  font: inherit; /* 2 */\\n  margin: 0; /* 3 */\\n}\\n\\n/**\\n * Address `overflow` set to `hidden` in IE 8/9/10.\\n */\\n\\nbutton {\\n  overflow: visible;\\n}\\n\\n/**\\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\\n * All other form control elements do not inherit `text-transform` values.\\n * Correct `button` style inheritance in Firefox, IE 8+, and Opera\\n * Correct `select` style inheritance in Firefox.\\n */\\n\\nbutton,\\nselect {\\n  text-transform: none;\\n}\\n\\n/**\\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\\n *    and `video` controls.\\n * 2. Correct inability to style clickable `input` types in iOS.\\n * 3. Improve usability and consistency of cursor style between image-type\\n *    `input` and others.\\n */\\n\\nbutton,\\nhtml input[type=\\\"button\\\"], /* 1 */\\ninput[type=\\\"reset\\\"],\\ninput[type=\\\"submit\\\"] {\\n  -webkit-appearance: button; /* 2 */\\n  cursor: pointer; /* 3 */\\n}\\n\\n/**\\n * Re-set default cursor for disabled elements.\\n */\\n\\nbutton[disabled],\\nhtml input[disabled] {\\n  cursor: default;\\n}\\n\\n/**\\n * Remove inner padding and border in Firefox 4+.\\n */\\n\\nbutton::-moz-focus-inner,\\ninput::-moz-focus-inner {\\n  border: 0;\\n  padding: 0;\\n}\\n\\n/**\\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\\n * the UA stylesheet.\\n */\\n\\ninput {\\n  line-height: normal;\\n}\\n\\n/**\\n * It's recommended that you don't attempt to style these elements.\\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\\n *\\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\\n * 2. Remove excess padding in IE 8/9/10.\\n */\\n\\ninput[type=\\\"checkbox\\\"],\\ninput[type=\\\"radio\\\"] {\\n  box-sizing: border-box; /* 1 */\\n  padding: 0; /* 2 */\\n}\\n\\n/**\\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\\n * `font-size` values of the `input`, it causes the cursor style of the\\n * decrement button to change from `default` to `text`.\\n */\\n\\ninput[type=\\\"number\\\"]::-webkit-inner-spin-button,\\ninput[type=\\\"number\\\"]::-webkit-outer-spin-button {\\n  height: auto;\\n}\\n\\n/**\\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\\n *    (include `-moz` to future-proof).\\n */\\n\\ninput[type=\\\"search\\\"] {\\n  -webkit-appearance: textfield; /* 1 */\\n  -moz-box-sizing: content-box;\\n  -webkit-box-sizing: content-box; /* 2 */\\n  box-sizing: content-box;\\n}\\n\\n/**\\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\\n * Safari (but not Chrome) clips the cancel button when the search input has\\n * padding (and `textfield` appearance).\\n */\\n\\ninput[type=\\\"search\\\"]::-webkit-search-cancel-button,\\ninput[type=\\\"search\\\"]::-webkit-search-decoration {\\n  -webkit-appearance: none;\\n}\\n\\n/**\\n * Define consistent border, margin, and padding.\\n */\\n\\nfieldset {\\n  border: 1px solid #c0c0c0;\\n  margin: 0 2px;\\n  padding: 0.35em 0.625em 0.75em;\\n}\\n\\n/**\\n * 1. Correct `color` not being inherited in IE 8/9.\\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\\n */\\n\\nlegend {\\n  border: 0; /* 1 */\\n  padding: 0; /* 2 */\\n}\\n\\n/**\\n * Remove default vertical scrollbar in IE 8/9.\\n */\\n\\ntextarea {\\n  overflow: auto;\\n}\\n\\n/**\\n * Don't inherit the `font-weight` (applied by a rule above).\\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\\n */\\n\\noptgroup {\\n  font-weight: bold;\\n}\\n\\n/* Tables\\n   ========================================================================== */\\n\\n/**\\n * Remove most spacing between table cells.\\n */\\n\\ntable {\\n  border-collapse: collapse;\\n  border-spacing: 0;\\n}\\n\\ntd,\\nth {\\n  padding: 0;\\n}\\n\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\",\n            \"text\": \"\\\"Helvetica Neue\\\", Helvetica, Arial, \\\"Lucida Grande\\\", \\\"DejaVu Sans\\\", sans-serif\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\",\n            \"text\": \"Monaco, Consolas, \\\"Lucida Console\\\", \\\"DejaVu Sans Mono\\\", monospace\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\",\n            \"text\": \"fixed\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\",\n            \"text\": \"auto\"\n        },\n        \"$:/themes/tiddlywiki/vanilla/sticky\": {\n            \"title\": \"$:/themes/tiddlywiki/vanilla/sticky\",\n            \"text\": \"<$reveal state=\\\"$:/themes/tiddlywiki/vanilla/options/stickytitles\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n``\\n.tc-tiddler-title {\\n\\tposition: -webkit-sticky;\\n\\tposition: -moz-sticky;\\n\\tposition: -o-sticky;\\n\\tposition: -ms-sticky;\\n\\tposition: sticky;\\n\\ttop: 0px;\\n\\tbackground: ``<<colour tiddler-background>>``;\\n\\tz-index: 500;\\n}\\n``\\n</$reveal>\\n\"\n        }\n    }\n}",
            "version": "5.1.15",
            "type": "application/json",
            "title": "$:/themes/tiddlywiki/vanilla",
            "plugin-type": "theme",
            "name": "Vanilla",
            "description": "Basic theme",
            "dependents": "",
            "core-version": ">=5.0.0",
            "author": "JeremyRuston"
        },
        "$:/themes/tiddlywiki/vanilla/base": {
            "text": "",
            "title": "$:/themes/tiddlywiki/vanilla/base",
            "tags": "$:/tagremoved/Stylesheet",
            "modified": "20171215070431949",
            "created": "20171215070431949"
        },
        "$:/themes/telmiger/bricks-004/themetweaks": {
            "created": "20180115165842484",
            "text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n!! Bricks: <<lingo Settings>>\n\n|<$link to=\"$:/themes/telmiger/bricks/metrics/fontsize\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\"$:/themes/telmiger/bricks/metrics/fontsize\" default=\"\" tag=\"input\"/> | default: 12pt |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\" default=\"\" tag=\"input\"/> | |\n\n{{$:/plugins/telmiger/bricks/paletteeditor}}",
            "title": "$:/themes/telmiger/bricks-004/themetweaks",
            "tags": "$:/tags/ControlPanel/Appearance",
            "modifier": "Thomas Elmiger",
            "modified": "20180130182849607",
            "creator": "Thomas Elmiger",
            "caption": "Bricks Tweaks"
        },
        "$:/themes/telmiger/bricks-004/icon": {
            "created": "20170224212130411",
            "text": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64.003\" height=\"64.003\" viewBox=\"-500.5 395.5 64.003 64.003\"><path d=\"M-468.5 396.5l26.426 15.5v31l-26.425 15.5-26.426-15.5v-31l26.427-15.5z\"/><path fill=\"#FFF\" d=\"M-485.996 419.088h34.99v16.824h-34.99z\"/><path fill=\"#E2001A\" d=\"M-468.5 405.5c-12.15 0-22 9.85-22 22s9.85 22 22 22 22-9.85 22-22-9.85-22-22-22zm13.11 21.637c-1.022.682-2.674 1.023-4.954 1.023h-2.838c-1.505 0-2.598.3-3.28.9-.68.6-1.22 1.804-1.622 3.615 0 0-.063.526-.178.526s-.13-.31-.184-.562c-.056-.263-.14-.59-.256-.977-.224-.758-.447-1.332-.67-1.72-.27-.482-.613-.87-1.024-1.165-.412-.294-.883-.47-1.413-.528l-.74-.088h-3.637c-2.178 0-3.796-.343-4.855-1.024-1.764-1.12-2.71-3.24-2.842-6.357-.01-.25 0-.48.047-.772h.208c.142 1.41 1.304 2.502 2.158 3.274.853.77 2.222 1.155 4.104 1.155h3.3c1.896 0 3.28.436 4.158 1.306.79.786 1.31 2.017 1.56 3.69.028.183.012.263.064.263.053 0 .04-.09.06-.278.253-2.173 1.094-3.627 2.522-4.363.88-.46 2.28-.676 4.196-.652l2.257.035c1.527.023 2.814-.278 3.86-.908 1.046-.63 2.285-1.803 2.425-3.52h.21c.065.17.057.56.045.828-.13 3.105-1.023 5.206-2.68 6.3z\"/></svg>",
            "type": "image/svg+xml",
            "title": "$:/themes/telmiger/bricks-004/icon",
            "tags": "",
            "modified": "20180130183129726"
        },
        "$:/themes/telmiger/bricks/frozen-004.css": {
            "created": "20180129222846381",
            "text": "/* ** $:/themes/telmiger/bricks/000-base.css ** */\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock html { -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; } html, body, div, article, section, main, footer, header, form, fieldset, legend, pre, code, p, a, h1, h2, h3, h4, h5, h6, ul, ol, li, dl, dt, dd, textarea, input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"search\"], input[type=\"tel\"], input[type=\"text\"], input[type=\"url\"], .border-box { box-sizing: border-box; max-width: 100%; } html { text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } html:-webkit-full-screen { background-color: rgb(26, 26, 26); } body { line-height: 1.5; font-family: 'helvetica neue', helvetica, sans-serif; -moz-tab-size: 3; tab-size: 3; } body.tc-body { word-wrap: break-word; overflow-wrap: break-word; color: rgb(179, 179, 179); fill: rgb(179, 179, 179); background-color: rgb(26, 26, 26); } a { overflow-wrap: break-word; word-wrap: break-word; display: inline-block; vertical-align: top; } @media (min-width: 28rem) { a { display: unset; vertical-align: unset; } } .te-list .te-flex-item a.tc-tiddlylink-resolves { word-break: break-all; } @media (min-width: 28rem) { .te-list .te-flex-item a.tc-tiddlylink-resolves { word-break: inherit; } } pre { overflow-x: auto; overflow-y: hidden; overflow: scroll; } pre, code { font-family: monaco, Consolas, monospace; border-radius: .25rem; white-space: pre-wrap; } pre { display: block; word-break: normal; word-wrap: break-word; padding-top: .25rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; border-style: solid; border-width: 1px; border-color: rgba(0,0,0,.2); background-color: rgb(25, 25, 25); } code { padding-left: .25rem; padding-right: .25rem; border-style: solid; border-width: 1px; border-color: rgba(0,0,0,0.08); color: rgb(255, 94, 94); background-color: rgba(0,0,0,0.03); } pre > code { border-style: none; border-width: 0; padding: 0; background-color: transparent; color: inherit; } dl dt { font-weight: bold; margin-top: 6px; } hr { height: 1px; margin-top: 2rem; margin-bottom: 2rem; border: none; background-color: rgb(255, 201, 102); } .tc-drop-down hr { margin-bottom: 0.5em; margin-top: 0.5em; } .tc-float-right { float: right; } .tc-muted { color: rgb(255, 255, 255); } .tc-icon-wrapper > svg, .tc-image-button, .tc-image-button svg { height: 1em; width: 1em; } .tc-tiddler-frame img, .tc-tiddler-frame svg, .tc-tiddler-frame canvas, .tc-tiddler-frame embed, .tc-tiddler-frame iframe { max-width: 100%; } .tc-tiddler-body > embed, .tc-tiddler-body > iframe { width: 100%; height: 600px; } .tc-file-input-wrapper { position: relative; overflow: hidden; display: inline-block; vertical-align: middle; } .tc-file-input-wrapper input[type=file] { position: absolute; top: 0; left: 0; right: 0; bottom: 0; font-size: 999px; max-width: 100%; max-height: 100%; filter: alpha(opacity=0); opacity: 0; outline: none; background: white; cursor: pointer; display: inline-block; } .tc-droppable > .tc-droppable-placeholder { display: none; }\n\n/* ** $:/themes/telmiger/bricks/001-page.css ** */\n\nbody { margin: 0; } .tc-page-container { width: 100%; padding-top: 1rem; padding-bottom: 1rem; } .tc-story-river { position: relative; padding: 0; } @media (min-width: 28rem) { .tc-story-river { padding: 1rem; } } @media (min-width: 42rem) { .tc-story-river { padding: 2rem; } } @media (min-width: 77rem) { .tc-story-river { padding-right: 1rem; margin-right: 26rem; margin-left: auto; display: flex; flex-wrap: wrap; } } .tc-sidebar-header .tc-site-title { margin: 0; margin-top: 2rem; } .tc-site-subtitle { margin-bottom: 2rem; } .tc-sidebar-scrollable { position: fixed; top: 0; right: 0; bottom: auto; left: 15%; z-index: 400; width: auto; max-width: 100%; max-height: 100%; animation: inherit; box-shadow: -4px 4px 8px 0px rgba( 0, 0, 0, 0.4 ); } .tc-sidebar-header { margin-top: 0; overflow-y: auto; overflow-x: hidden; -webkit-overflow-scrolling: touch; } .tc-sidebar-header > .tc-reveal { width: calc(26rem - 3rem); max-width: 100%; padding-top: .5rem; padding-bottom: 2rem; padding-left: 1rem; margin-bottom: 2rem; } @media (min-width: 28rem) { .tc-sidebar-scrollable { bottom: 0; left: auto; } .tc-sidebar-header > .tc-reveal { width: 100%; padding-top: 1rem; padding-bottom: 2rem; padding-left: 1rem; margin-left: 1rem; } } @media (min-width: 42rem) { html[dir=\"rtl\"] .tc-sidebar-scrollable { left: auto; right: auto; } .tc-sidebar-header > .tc-reveal { width: 26rem; } .tc-sidebar-lists .tc-tab-set { margin-right: .5rem; } .tc-tiddler-frame { margin-right: calc(66vw - 26rem); } } @media (min-width: 77rem) { .tc-sidebar-scrollable { box-shadow: none; left: auto; } .tc-sidebar-header > .tc-reveal { padding-bottom: 4rem; margin-bottom: 4rem; } .tc-tiddler-frame { margin-right: .5rem; margin-left: auto; } }\n\n/* ** $:/themes/telmiger/bricks/010-fonts.css ** */\n\n.tc-site-title, .tc-site-title a.tc-tiddlylink-resolves { font-weight: 500; font-size: 2.25rem; font-variant: small-caps; color: rgb(255, 201, 102); } .tc-subtitle { font-size: .875rem; font-weight: 300; color: rgb(255, 255, 255); } .tc-tiddler-controls { font-size: 2.25rem; } .tc-tiddler-controls .tc-drop-down, .tc-tiddler-controls .tc-drop-down .tc-drop-down { font-size: 1.25rem; } .tc-titlebar { font-weight: 300; color: rgb(255, 192, 76); } .tc-tiddler-missing .tc-title { font-style: italic; font-weight: normal; } .tc-titlebar .tc-title, .tc-tiddler-title-icon { font-weight: 300; font-size: 1.5rem; line-height: 1.25; vertical-align: bottom; } .tc-system-title-prefix,.tc-tiddler-title-icon svg { color: rgb(255, 255, 255); fill: rgba(240, 196, 117, 0.7); } .tc-titlebar.tc-edit-texteditor { font-size: 1.5rem; line-height: 1.25; } h1, h2, h3, h4, h5, h6 { margin-top: 0; line-height: 1.25; } .tc-tiddler-body h1 { font-size: 1.875rem; margin-bottom: 2rem; } .tc-tiddler-body h2 { font-size: 1.5rem; margin-bottom: 2rem; } .tc-tiddler-body h3 { font-size: 1.25rem; margin-bottom: 1rem; } .tc-tiddler-body h4 { font-size: 1rem; margin-bottom: 1rem; } .tc-tiddler-body h5 { font-size: .875rem; margin-bottom: 1rem; font-family: georgia, times, serif; } .tc-tiddler-body h6 { font-size: .75rem; margin-bottom: .5rem; font-family: georgia, times, serif; } .tc-tiddler-body * + h1, section > h1:first-child { margin-top: 4rem; } .tc-tiddler-body *:not(h1) + h2, section > h2:first-child { margin-top: 4rem; } .tc-tiddler-body *:not(h2) + h3, section > h3:first-child { margin-top: 2rem; } .tc-tiddler-body *:not(h3) + h4, section > h4:first-child { margin-top: 2rem; } .tc-tiddler-body *:not(h4) + h5, section > h5:first-child { margin-top: 2rem; } .tc-tiddler-body *:not(h5) + h6, section > h6:first-child { margin-top: 2rem; } p { font-size: 1rem; line-height: 1.5; margin-top: 0; margin-bottom: .5rem; } @media (min-width: 28rem) { .tc-tiddler-body h1 { font-size: 2.25rem; } } @media (min-width: 42rem) { .tc-titlebar .tc-title, .tc-tiddler-title-icon { font-size: 2.25rem; vertical-align: baseline; } .tc-tiddler-title-icon { vertical-align: text-top; } .tc-tiddler-body h1 { font-size: 3rem; } .tc-tiddler-body h2 { font-size: 2.25rem; } .tc-tiddler-body h3 { font-size: 1.5rem; } .tc-tiddler-body h4 { font-size: 1.25rem; } .tc-tiddler-body h5 { font-size: 1rem; } .tc-tiddler-body h6 { font-size: .875rem; } } .tc-menu-list-count { font-weight: bold; } .tc-menu-list-subitem { padding-left: .5rem; } pre, code { font-family: Monaco, Consolas, \"Lucida Console\", \"DejaVu Sans Mono\", monospace; }\n\n/* ** $:/themes/telmiger/bricks/components/chooser.css ** */\n\n.tc-chooser { padding: 0; border-bottom-style: solid; border-bottom-width: 1px; border-color: rgb(204, 204, 255); } .tc-chooser-item { line-height: 1; border-top-style: solid; border-top-width: 1px; border-color: rgb(204, 204, 255); } .tc-chooser-item a.tc-tiddlylink { display: block; padding-top: .5rem; padding-bottom: .5rem; width: 100%; height: 100%; text-decoration: none; font-weight: 400; color: rgb(204, 204, 255); background-color: rgb(38, 38, 38); } .tc-chooser-item a.tc-tiddlylink.tc-tiddlylink-resolves { font-weight: 300; background-color: rgba(0,0,0,.1); } .tc-chooser-item a.tc-tiddlylink:hover { text-decoration: none; color: rgb(38, 38, 38); background-color: rgb(204, 204, 255); } .tc-chooser-item a.tc-tiddlylink > div { display: inline-block; vertical-align: bottom; } .tc-chooser-item a.tc-tiddlylink > div:first-child { width: 97%; padding-left: 3em; text-indent: -2.5em; padding-bottom: .5rem; } .tc-chooser-item a.tc-tiddlylink > div:first-child > span:first-child { display: inline-block; width: .6em; height: .6em; text-align: center; vertical-align: top; position: relative; top: .15rem; left: -.25em; text-indent: 0; font-variant: super; font-stretch: condensed; border-style: solid; border-width: 1px; border-color: rgb(255, 201, 102); color: rgb(179, 179, 179); background-color: rgb(38, 38, 38); } .tc-image-chooser, .tc-colour-chooser { white-space: normal; } .tc-swatches-horiz { width: 97%; text-align: right; } .tc-swatches-horiz .tc-swatch { display: inline-block; } .tc-swatch { width: 2rem; height: 2rem; margin-right: .25rem; border-style: solid; border-width: 1px; border-color: #888; } @media (min-width: 42rem) { .tc-chooser-item a.tc-tiddlylink > div:first-child { margin-right: 1rem; width: calc(100% - 22rem); min-width: 20rem; } .tc-swatches-horiz { width: 20.75rem; } .tc-swatch { margin-right: .5rem; } } .tc-image-chooser a, .tc-colour-chooser a { display: inline-block; vertical-align: top; text-align: center; position: relative; } .tc-image-chooser a { padding: 2px; margin: 2px; width: 4em; height: 4em; border-style: solid; border-width: 1px; border-color: rgb(255, 255, 255); } .tc-colour-chooser a { padding: 3px; width: 2em; height: 2em; vertical-align: middle; } .tc-image-chooser a:hover, .tc-colour-chooser a:hover { padding: 0; border-width: .125rem; border-style: solid; border-color: rgb(255, 201, 102); background: rgb(255, 201, 102); } .tc-image-chooser a svg, .tc-image-chooser a img { display: inline-block; width: auto; height: auto; max-width: 3.5em; max-height: 3.5em; position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; } .tc-drop-down-language-chooser img { width: 2em; vertical-align: baseline; } .tc-drop-down .tc-chooser { border: none; } .tc-drop-down .tc-chooser .tc-swatches-horiz { font-size: 0.4em; padding-left: 1.2em; }\n\n/* ** $:/themes/telmiger/bricks/components/control-panel.css ** */\n\n.tc-control-panel table { width: 100%; } .tc-control-panel table input, .tc-control-panel table textarea { padding-left: .5rem; padding-right: .5rem; } .tc-control-panel td input + br { position: absolute; } .tc-control-panel td input + br + input[type=color] { margin-top: .25rem; vertical-align: bottom; } kbd { display: inline-block; padding-top: .25rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; font-size: 0.8em; line-height: 1.2; vertical-align: middle; border-radius: .125rem; box-shadow: inset 0 -1px 0 rgb(255, 255, 255); border-style: solid; border-width: 1px; border-color: rgb(255, 255, 255); color: rgb(179, 179, 179); background-color: rgb(38, 38, 38); }\n\n/* ** $:/themes/telmiger/bricks/components/dropdown.css ** */\n\n.tc-btn-dropdown { text-align: left; } .tc-btn-dropdown svg, .tc-btn-dropdown img { height: 1em; width: 1em; } .tc-drop-down-wrapper { position: relative; } .tc-drop-down { width: 22rem; border-style: solid; border-width: 1px; padding: .5rem; border-radius: .125rem; margin-top: .25rem; line-height: 1.5; text-shadow: none; border-color: rgb(255, 255, 255); background-color: rgb(38, 38, 38); } .tc-drop-down .tc-drop-down { margin-left: 1rem; } .tc-drop-down p { padding-left: .25rem; padding-right: .25rem; } .tc-drop-down svg { fill: rgb(255, 255, 255); height: 1em; width: 1em; margin-right: .5rem; } .tc-drop-down img { width: 1em; margin-right: .5rem; } .tc-drop-down .tc-prompt { padding-left: 1rem; padding-right: 1rem; } .tc-drop-down a, .tc-drop-down button { display: block; padding-left: 1rem; padding-right: 1rem; width: 100%; text-align: left; line-height: 1.4; color: rgb(179, 179, 179); } .tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button { color: rgb(38, 38, 38); background-color: rgb(204, 204, 255); text-decoration: none; } .tc-drop-down button svg.tc-image-button, .tc-drop-down a svg.tc-image-button { fill: rgb(179, 179, 179); } .tc-drop-down button.tc-btn-invisible:hover svg.tc-image-button { fill: rgb(38, 38, 38); } .tc-drop-down .tc-file-input-wrapper { width: 100%; } .tc-drop-down .tc-file-input-wrapper button { color: rgb(179, 179, 179); } .tc-block-dropdown-wrapper { position: relative; } .tc-block-dropdown { position: absolute; min-width: 220px; border-radius: .25rem; font-size: .875rem; padding-top: .25rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; margin-left: .5rem; z-index: 1000; text-shadow: none; border-style: solid; border-width: 1px; border-color: rgb(255, 255, 255); background-color: rgb(38, 38, 38); } .tc-block-dropdown a { display: block; padding-top: .25rem; padding-bottom: .25rem; } .tc-block-dropdown a:hover { color: rgb(38, 38, 38); background-color: rgb(255, 255, 158); text-decoration: none; } .tc-drop-down .tc-dropdown-item, .tc-block-dropdown .tc-dropdown-item { color: rgb(255, 255, 255); } .tc-drop-down .tc-dropdown-item-plain, .tc-block-dropdown .tc-dropdown-item-plain .tc-drop-down .tc-dropdown-item, .tc-block-dropdown .tc-dropdown-item { padding-top: .25rem; padding-bottom: .25rem; padding-right: 1rem; padding-left: .5rem; }\n\n/* ** $:/themes/telmiger/bricks/components/forms.css ** */\n\ntextarea, input[type=text], input[type=search], input[type=\"\"], input:not([type]) { -webkit-appearance: none; -moz-appearance: none; font-size: 1rem; padding-left: .25rem; padding-right: .25rem; padding-bottom: .25rem; color: rgb(179, 179, 179); border-style: solid; border-width: 1px; border-color: rgb(63, 63, 63); background: rgb(38, 38, 38); } textarea:focus, input[type=text]:focus, input[type=search]:focus, input[type=\"\"]:focus, input:not([type]):focus { background: rgb(43, 43, 43); } td textarea, td input[type=text], td input[type=search], td input[type=\"\"], td input:not([type]) { width: 100%; max-width: calc(100% - .5rem); }\n\n/* ** $:/themes/telmiger/bricks/components/messages.css ** */\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg { fill: rgb(255, 94, 94); color: rgb(255, 94, 94); } .tc-error { background: #f00; color: #fff; } .tc-body .tc-error-form { color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); background-color: rgb(255, 75, 75); border: 8px solid rgb(255, 0, 0); margin-left: -33vw; width: 66vw; max-height: 80vh; overflow-y: scroll; } .tc-alerts { position: fixed; top: 0; left: 0; max-width: 500px; z-index: 20000; } .tc-alert { position: relative; margin: 2rem; padding: 1rem; border-style: solid; border-width: 1px; border-width: .25rem; border-color: rgb(232, 232, 125); background-color: rgb(255, 255, 102); } .tc-alert-toolbar { position: absolute; top: .5rem; right: .5rem; } .tc-alert-toolbar svg { fill: rgb(224, 82, 82); } .tc-alert-subtitle { color: rgb(224, 82, 82); font-weight: bold; } .tc-alert-highlight { color: rgb(255, 51, 51); } @media (min-width: 77rem) { .tc-static-alert { position: relative; } .tc-static-alert-inner { position: absolute; z-index: 100; } } .tc-static-alert-inner { padding: 0 .125rem .125rem 4rem; color: rgba(0,0,0,.3); } .tc-message-box { font-size: 1rem; line-height: 1.5; color: #00449e; padding-top: 1rem; padding-left: 1rem; padding-right: 1rem; padding-bottom: .5rem; margin-left: -1rem; margin-right: -1rem; margin-bottom: 1rem; max-width: calc(100% + 2rem); border-style: solid; border-width: 1px; border-color: #96ccff; background: #cdecff; } .tc-message-box svg { height: 1em; width: 1em; vertical-align: text-bottom; } .tc-notification { position: fixed; top: 1rem; right: 2rem; min-width: 12rem; max-width: 24rem; padding-top: .5rem; padding-bottom: .5rem; padding-left: 1rem; padding-right: 1rem; z-index: 1300; border-style: solid; border-width: 1px; border-radius: .25rem; color: rgba(51, 51, 51, 0.9); border-color: rgba(51, 51, 51, 0.9); background-color: rgb(230, 230, 230); } .tc-plugin-reload-warning { position: fixed; top: 0; right: 0; left: 0; padding-top: .5rem; background: rgb(255, 255, 102); text-align: center; z-index: 1300; } .tc-plugin-reload-warning button.tc-btn-invisible { position: relative; margin-left: 2rem; }\n\n/* ** $:/themes/telmiger/bricks/components/modal.css ** */\n\n.tc-modal-wrapper { position: fixed; overflow: auto; overflow-y: scroll; top: 0; right: 0; bottom: 0; left: 0; z-index: 1300; } .tc-modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; background-color: rgb(179, 179, 179); } .tc-modal { position: fixed; top: 1rem; left: 1rem; right: 1rem; border-style: solid; border-width: 1px; border-radius: .25rem; border-color: rgba(0,0,0,.5); background-color: rgb(38, 38, 38); } .tc-modal-header { padding-top: .5rem; padding-bottom: .5rem; padding-left: 1rem; padding-right: 1rem; border-bottom-style: solid; border-bottom-width: 1px; border-radius: .25rem; border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-bottom-color: rgba(0,0,0,.1); background-color: #f4f4f4; } .tc-modal-header h3 { margin: 0; line-height: 30px; } .tc-modal-header img, .tc-modal-header svg { height: 1em; width: 1em; } .tc-modal-body { overflow-y: auto; max-height: 60vh; padding: 1rem; } .tc-modal-footer { text-align: right; padding-top: .5rem; padding-bottom: .5rem; padding-left: 1rem; padding-right: 1rem; margin-bottom: 0; border-top-style: solid; border-top-width: 1px; border-radius: .25rem; border-top-left-radius: 0; border-top-right-radius: 0; border-top-color: rgba(0,0,0,.1); background-color: #f4f4f4; } @media (min-width: 42rem) { .tc-modal { top: 4rem; right: 20%; left: auto; width: 60%; } } @media (min-width: 77rem) { .tc-modal { top: 8rem; right: 25%; left: auto; width: 50%; border-radius: .5rem; } .tc-modal-header { padding-left: 2rem; padding-right: 2rem; border-radius: .5rem; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .tc-modal-body { padding: 2rem; } .tc-modal-footer { padding-left: 2rem; padding-right: 2rem; border-radius: .5rem; border-top-left-radius: 0; border-top-right-radius: 0; } }\n\n/* ** $:/themes/telmiger/bricks/components/plugin-info.css ** */\n\n.tc-tiddler-body:empty + span.tc-reveal { flex-basis: 100%; order: 110; } .tc-tiddler-body:empty + span + span.tc-reveal { flex-basis: 100%; order: 111; } .tc-tiddler-body:empty + span + span + span.tc-reveal { flex-basis: 100%; order: 112; } .tc-plugin-info { display: block; border-style: solid; border-width: 1px; border-color: rgb(255, 255, 255); margin-bottom: 1rem; padding: .25rem; background-colour: rgb(38, 38, 38); } .tc-plugin-info-disabled { background: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px); background: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px); } .tc-plugin-info-disabled:hover { background: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px); background: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px); } a.tc-tiddlylink.tc-plugin-info:hover { text-decoration: none; background-color: rgb(255, 201, 102); color: rgb(38, 38, 38); fill: rgb(179, 179, 179); } a.tc-tiddlylink.tc-plugin-info:hover .tc-plugin-info > .tc-plugin-info-chunk > svg { fill: rgb(179, 179, 179); } .tc-plugin-info-chunk { display: inline-block; vertical-align: middle; } .tc-plugin-info .tc-plugin-info-chunk h1 { font-size: 1rem; margin-top: .25rem; margin-bottom: .25rem; } .tc-plugin-info .tc-plugin-info-chunk h2 { font-size: .875rem; margin-top: 0; margin-bottom: .25rem; } .tc-plugin-info .tc-plugin-info-chunk h2 div { font-size: .875rem; margin-bottom: .25rem; } .tc-plugin-info .tc-btn-dropdown { margin-left: .5rem; margin-right: .5rem; } .tc-plugin-info:hover .tc-btn-dropdown svg { fill: rgb(38, 38, 38); } .tc-plugin-info > .tc-plugin-info-chunk > img, .tc-plugin-info > .tc-plugin-info-chunk > svg { width: 2em; height: 2em; fill: rgb(255, 255, 255); padding-right: 1rem; } .tc-plugin-info:hover > .tc-plugin-info-chunk > img, .tc-plugin-info:hover > .tc-plugin-info-chunk > svg { width: 2em; height: 2em; fill: rgb(179, 179, 179); } .tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > img, .tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > svg { height: 1em; width: 1em; } .tc-plugin-info-dropdown { margin-top: -1rem; border-style: solid; border-width: 1px; border-color: rgb(255, 255, 255); } .tc-control-panel .tc-plugin-info-dropdown { margin-bottom: 1rem; } .tc-plugin-info-dropdown-message { background: #cdecff; padding-top: 1rem; padding-bottom: 1rem; padding-left: 2rem; padding-right: 2rem; font-size: 2.25rem; font-weight: bold; } .tc-plugin-info-dropdown-body { padding: 1rem; }\n\n/* ** $:/themes/telmiger/bricks/components/search.css ** */\n\n.tc-search a svg { width: 1.2em; height: 1.2em; vertical-align: middle; } .tc-search button:hover svg, .tc-search a:hover svg { fill: rgb(230, 230, 230); } .tc-search button svg, .tc-search a svg { padding-left: .25rem; padding-right: .25rem; } .tc-search + .tc-block-dropdown-wrapper { margin-left: -1rem; } .tc-block-dropdown.tc-search-drop-down { position: relative; padding-left: .5rem; padding-right: .5rem; margin-right: 1rem; max-width: 100%; } .tc-search-drop-down .tc-search-results a.tc-tiddlylink { padding-top: .125rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; margin-bottom: 0; width: 100%; } .tc-search-drop-down .tc-search-results a.tc-tiddlylink:hover { color: rgb(38, 38, 38); } .tc-advanced-search input { width: calc( 100% / 1.5 ); margin-right: .5rem; } .tc-advanced-search .tc-search button { border-radius: .25rem; border-style: none; border-width: 0; padding-top: .25rem; padding-bottom: .25rem; min-width: 2rem; text-decoration: none; font-weight: 600; } .tc-advanced-search .tc-block-dropdown-wrapper { display: flex; flex-direction: row; align-content: flex-end; position: absolute; margin-top: .25rem; left: calc(10rem - 50vw); width: calc(50vw - 10rem); max-width: 20rem; min-width: 10rem; } .tc-advanced-search .tc-block-dropdown button:hover { color: ; border-color: ; } .tc-advanced-search .tc-block-dropdown button:hover svg, .tc-advanced-search .tc-block-dropdown a:hover svg { fill: #555; } .tc-advanced-search .tc-block-dropdown-wrapper .tc-block-dropdown { right: 0; } .tc-advanced-search .tc-block-dropdown .tc-btn { margin: .5rem; border-style: solid; border-width: 1px; } .tc-advanced-search .tc-edit-type-dropdown a.tc-tiddlylink-missing { padding-left: .5rem; padding-right: .5rem; }\n\n/* ** $:/themes/telmiger/bricks/components/sidebar.css ** */\n\n.tc-sidebar-scrollable { background-color: rgb(26, 26, 26); } @media (min-width: 77rem) { .tc-sidebar-scrollable { background-color: transparent; } .tc-sidebar-header > .tc-reveal { background-color: rgb(26, 26, 26); } } .tc-page-controls { font-size: 1.5rem; line-height: 1.5; margin-bottom: 1rem; } .tc-page-controls button { margin-right: 1rem; } .tc-page-controls button.tc-selected svg { fill: rgb(141, 141, 141); } .tc-page-controls a.tc-tiddlylink:hover { text-decoration: none; } .tc-page-controls img { width: 1em; } .tc-page-controls svg { fill: rgb(153, 153, 153); } .tc-page-controls button:hover svg, .tc-page-controls a:hover svg { fill: rgb(115, 115, 115); } @media (min-width: 42rem) { .tc-page-controls { margin-top: 2rem; margin-right: 0;\tposition: fixed; z-index: 1; right: 1rem; top: 9.66rem;; width: 40px; text-align: right; } .tc-page-controls button { margin-bottom: .5rem; margin-right: .25rem; } .tc-sidebar-lists { margin-right: 4rem; } .tc-page-controls .tc-drop-down { margin-left: -20rem; } } .tc-sidebar-scrollable input[type=search] { width: 12rem; } .tc-sidebar-header { color: rgb(141, 141, 141); fill: rgb(141, 141, 141); } .tc-sidebar-header .tc-sidebar-lists p { margin-bottom: .25rem; } .a11y-label { color: rgba(0,0,0,.3); } .tc-sidebar-lists .tc-tab-set { margin-right: .5rem; } .tc-sidebar-lists .tc-tab-content { padding-top: 1rem; } .tc-sidebar-lists .tc-tab-content p { font-size: .875rem; } .tc-sidebar-lists .tc-tab-buttons button { font-size: .875rem; margin-top: .125rem; padding-top: .125rem; padding-bottom: .125rem; background-color: rgba(141, 141, 141, 0.2); color: rgb(179, 179, 179); border-color: rgb(127, 127, 127); }\n\n.tc-sidebar-lists .tc-tab-buttons button:not(.tc-tab-selected) { position: relative; }\n\n.tc-sidebar-lists .tc-tab-buttons button:not(.tc-tab-selected)::before { background-color: rgb(26, 26, 26); content: \"\"; position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; border-radius: .25rem; border-bottom-left-radius: 0; border-bottom-right-radius: 0; }\n\n.tc-sidebar-lists .tc-tab-buttons button:not(.tc-tab-selected):hover::before, .tc-sidebar-lists .tc-tab-buttons button:not(.tc-tab-selected):focus::before { opacity: .35; } .tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected { background-color: rgb(26, 26, 26); color: rgb(179, 179, 179); border-color: rgb(127, 127, 127); border-bottom-color: rgb(26, 26, 26); } .tc-sidebar-lists .tc-tab-divider { border-top-style: solid; border-top-width: 1px; border-color: rgb(127, 127, 127); } .tc-sidebar-lists .tc-tab-buttons.tc-vertical button.tc-tab-selected, .tc-sidebar-lists .tc-tab-buttons.tc-vertical button { margin-bottom: .125rem; } .tc-sidebar-lists .tc-tab-buttons.tc-vertical button { border-color: rgb(127, 127, 127); background-color: rgba(141, 141, 141, 0.2); } .tc-sidebar-lists .tc-tab-buttons.tc-vertical button.tc-tab-selected { border-color: rgb(127, 127, 127); background-color: rgb(26, 26, 26); } .tc-sidebar-lists .tc-tab-content.tc-vertical { border-color: rgb(127, 127, 127); } .tc-sidebar-lists .tc-tab-content label { width: 1.25rem; float: left; padding-top: .2rem; margin-right: .25rem; margin-left: -.25rem; } .tc-sidebar-lists .tc-tab-content div div p i { line-height: 1.25; display: inline-block; width: calc(100% - 1.5rem); margin-left: 1.5rem; } .tc-menu-list-item { margin: 0; } .tc-menu-list-item a, .tc-menu-list-item .tc-btn-invisible { padding-bottom: .25rem; } .tc-menu-list-item button { font-style: italic; }\n\n/* ** $:/themes/telmiger/bricks/components/tabs.css ** */\n\n.tc-tab-buttons { padding-top: 1rem; } .tc-tab-buttons button { font-size: .875rem; cursor: pointer; color: rgb(179, 179, 179); line-height: 1.5; padding-top: .25rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; margin-bottom: 0; margin-left: 0; margin-right: .25rem; font-weight: 300; background: inherit; background-color: rgba(0,0,0,0.125); border-style: solid; border-width: 1px; border-radius: .25rem; border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-color: rgb(255, 201, 102); }\n\n.tc-tab-buttons button:not(.tc-tab-selected) { position: relative; }\n\n.tc-tab-buttons button:not(.tc-tab-selected)::before { background-color: rgb(38, 38, 38); content: \"\"; position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; border-radius: .25rem; border-bottom-left-radius: 0; border-bottom-right-radius: 0; }\n\n.tc-tab-buttons button:not(.tc-tab-selected):hover::before, .tc-tab-buttons button:not(.tc-tab-selected):focus::before { opacity: .35; } .tc-sidebar-lists .tc-tab-buttons button { margin-right: .125rem; } .tc-tab-divider, .tc-sidebar-lists .tc-tab-divider { border-top-style: solid; border-top-width: 1px; height: 1px; margin-top: -1px; } .tc-tab-divider { border-color: rgb(255, 201, 102); } .tc-tab-content { padding-top: 2rem; } .tc-tab-set:not(.tc-vertical) { margin-left: -.5rem; } .tc-tab-set:not(.tc-vertical) > .tc-tab-buttons:first-of-type { margin-left: .5rem; } .tc-tab-set:not(.tc-vertical) > .tc-tab-content { padding-left: .5rem; } .tc-tab-set:not(.tc-vertical) > button { margin-top: .125rem; } .tc-tab-content.tc-vertical { display: inline-block; vertical-align: top; padding-top: 1rem; padding-left: 1rem; border-left-style: solid; border-left-width: 1px; border-color: rgb(255, 201, 102); -webkit-flex: 1 0 70%; flex: 1 0 70%; max-width: 75%; } .tc-tab-divider.tc-vertical { display: none; } .tc-tab-set.tc-vertical { display: -webkit-flex; display: flex; } .tc-tab-buttons.tc-vertical { z-index: 100; display: block; vertical-align: top; text-align: right; margin-left: 0; margin-right: -1px; max-width: 33%; -webkit-flex: 0 0 auto; flex: 0 0 auto; } .tc-tab-buttons.tc-vertical button, .tc-tab-buttons.tc-vertical button.tc-tab-selected { display: block; width: 100%; margin-top: 0; margin-right: 0; margin-bottom: .25rem; text-align: right; border-style: solid; border-width: 1px; border-right-width: 0; border-radius: .25rem; border-top-right-radius: 0; border-bottom-right-radius: 0; border-color: rgb(255, 201, 102); background-color: rgba(0,0,0,0.125); } .tc-tab-buttons button.tc-tab-selected { color: rgb(179, 179, 179); border-style: solid; border-width: 1px; border-color: rgb(255, 201, 102); background-color: rgb(38, 38, 38); border-bottom-color: rgb(38, 38, 38); } .tc-tab-buttons.tc-vertical button.tc-tab-selected { border-right-color: rgb(255, 201, 102); background-color: rgb(38, 38, 38); } .tc-tiddler-info .tc-tab-buttons button.tc-tab-selected { border-bottom-style: solid; border-bottom-width: 1px; border-bottom-color: rgb(43, 43, 43); background-color: rgb(43, 43, 43); } .tc-tab-buttons button.tc-tab-selected { cursor: default; pointer-events: none; } .tc-drop-down-bullet { display: inline-block; width: 0.5em; } .tc-drop-down .tc-tab-contents a { padding: 0 0.5em 0 0.5em; } .tc-drop-down .tc-tab-buttons button { background-color: rgba(0,0,0,.1); } .tc-drop-down .tc-tab-set .tc-tab-buttons button { display: inline-block; width: auto; margin-bottom: 0px; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .tc-drop-down .tc-tab-buttons button.tc-tab-selected { border-bottom-style: solid; border-bottom-width: 1px; border-bottom-color: rgba(255,255,255,1); background-color: rgba(255,255,255,1); }\n\n/* ** $:/themes/telmiger/bricks/components/tags.css ** */\n\n.tc-tag-manager-table td { padding-top: .25rem; padding-bottom: .25rem; }\n\n.tc-tag-label { position: relative; }\n\n.tc-tag-label::before { background-color: #000; content: \"\"; position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; border-radius: 1rem; }\n\n.tc-tag-label:hover::before, .tc-tag-label:focus::before { opacity: .075; }\n\n.tc-edit-tags > .tc-tag-label { position: relative; }\n\n.tc-edit-tags > .tc-tag-label::before { background-color: #000; content: \"\"; position: absolute; top: 0; left: 0; width: calc(100% - 1.25rem); height: 100%; opacity: 0; border-top-right-radius: 0; border-bottom-right-radius: 0; }\n\n.tc-edit-tags > .tc-tag-label:hover::before, .tc-edit-tags > .tc-tag-label:focus::before { opacity: .075; } .tc-tags-wrapper { margin-bottom: .5rem; } .tc-tags-wrapper:empty { height: 33%; width: 4rem; border-bottom-style: solid; border-bottom-width: 1px; border-width: .25rem; border-bottom-color: rgb(255, 201, 102); } .tc-tags-wrapper:empty:before { content: \"\\00a0\"; } .tc-tag-list-item { position: relative; display: inline-block; } button.tc-tag-label, span.tc-tag-label, .tc-tab-content button.tc-tag-label.tc-untagged-label { display: inline-block; padding-top: .25rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; font-size: .75rem; font-weight: 400; color: rgb(25, 25, 25); white-space: nowrap; line-height: 1; vertical-align: baseline; background-color: rgb(255, 201, 102); border-style: none; border-width: 0; border-radius: 1rem; } .tc-untagged-separator { width: 10rem; height: 1px; left: 0; margin-left: 0; border-style: none; border-width: 0; background: rgb(127, 127, 127); } button.tc-tag-label.tc-untagged-label, .tc-tab-content button.tc-tag-label.tc-untagged-label { background-color: rgb(255, 255, 255); color: rgb(25, 25, 25); font-style: italic; } .tc-tag-label svg, .tc-tag-label img { vertical-align: text-bottom; height: 1em; width: 1em; } .tc-tag-manager-table .tc-tag-label { white-space: normal; } .tc-tag-manager-tag { width: 100%; }\n\n/* ** $:/themes/telmiger/bricks/components/tiddler-controls.css ** */\n\n.tc-tiddler-frame .tc-tiddler-controls { float: right; font-size: 1.75rem; } .tc-tiddler-controls > span > button { vertical-align: baseline; margin-left: 1rem; } @media (min-width: 42rem) { .tc-tiddler-frame .tc-tiddler-controls { font-size: 2.25rem; } .tc-tiddler-controls > span > button { margin-left: .5rem; } } .tc-tiddler-controls button svg, .tc-tiddler-controls button img { fill: rgb(128, 128, 128); } .tc-tiddler-controls button.tc-selected svg { fill: rgb(141, 141, 141); } .tc-tiddler-controls button.tc-btn-invisible:hover svg { fill: rgb(230, 230, 230); } .tc-tiddler-controls button svg.tc-image-info-button { fill: ; } .tc-tiddler-controls button svg.tc-image-edit-button { fill: ; } .tc-tiddler-controls button svg.tc-image-close-button { fill: ; } .tc-tiddler-controls button svg.tc-image-delete-button { fill: ; } .tc-tiddler-controls button svg.tc-image-cancel-button { fill: ; } .tc-tiddler-controls button svg.tc-image-done-button { fill: ; } .tc-tiddler-controls button svg.tc-image-button { height: 0.75em; width: 0.75em; }\n\n/* ** $:/themes/telmiger/bricks/components/tiddler-info-panel.css ** */\n\n.tc-tiddler-info { padding-top: 1rem; padding-bottom: 1rem; border-top-style: solid; border-top-width: 1px; border-bottom-style: solid; border-bottom-width: 1px; border-color: rgb(25, 25, 25); background-color: rgb(43, 43, 43); } .tc-tiddler-info p { margin-top: .25rem; margin-bottom: .25rem; } .tc-tiddler-frame .tc-tiddler-info .tc-tab-set { margin-left: 0; } .tc-tiddler-info .tc-tab-content { padding-left: .5rem; padding-right: .5rem; } .tc-tiddler-info .tc-tab-content p > label { padding-bottom: 1rem; display: inline-block; } .tc-tiddler-info .tc-tab-content p > label + button, .tc-tiddler-info .tc-tab-content p > label + span > button { position: absolute; margin-left: 1rem; } .tc-tiddler-info .tc-tab-content p > label + button .tc-btn-text, .tc-tiddler-info .tc-tab-content p > label + span > button .tc-btn-text { display: none; } .tc-tiddler-info .tc-tab-content p > i { position: absolute; margin-left: 4rem; line-height: 1; max-width: 20em; } .tc-view-field-table { width: 100%; } .tc-view-field-name { width: 1%; text-align: right; font-style: italic; font-weight: 200; } .tc-view-field-value { } @media (min-width: 28rem) { .tc-tiddler-info { margin-top: 0; margin-bottom: .25rem; padding-right: 1rem; padding-left: 2rem; } .tc-tiddler-frame .tc-tiddler-info .tc-tab-set { margin-left: -1rem; margin-right: 0; } } @media (min-width: 42rem) { .tc-tiddler-info { margin-top: 0; margin-bottom: 1rem; } }\n\n/* ** $:/themes/telmiger/bricks/components/tiddler.css ** */\n\n.tc-tiddler-frame { position: relative; padding: 1rem; margin-bottom: 2rem; border-bottom-style: solid; border-bottom-width: 1px; border-width: .5rem; border-color: rgba(240, 196, 117, 0.7); background-color: rgb(38, 38, 38); display: flex; flex-direction: row; flex-wrap: wrap; } @media (min-width: 28rem) { .tc-tiddler-frame { padding: 2rem; } } @media (min-width: 42rem) { .tc-tiddler-frame { padding-left: 2rem; padding-right: 2rem; border-radius: .125rem; } .tc-tiddler-view-frame { max-width: 54rem; } } @media (min-width: 77rem) { .tc-tiddler-frame { padding-left: 4rem; padding-right: 4rem; align-content: flex-start; height: 100%; } .tc-tiddler-view-frame { width: 54rem; } } .tc-tiddler-title { margin-bottom: 1rem; flex-basis: 100%; } .tc-tiddler-frame > .tc-reveal.tc-tiddler-body { flex-basis: 100%; order: 100; padding-top: 2rem; } .tc-titlebar .tc-title { display: inline-block; max-width: 75%; margin: .5rem; margin-left: 0; } .tc-tiddler-title-icon { vertical-align: middle; } .tc-tiddler-title-icon svg { margin-right: .25rem; } .tc-titlebar img { height: 1em; } .tc-tiddler-frame > .tc-reveal { flex-grow: 1; flex-basis: 100%; } @media (min-width: 28rem) { .tc-tiddler-frame > .tc-reveal { flex-basis: unset; } } .tc-tiddler-frame > .tc-reveal:nth-of-type(1) { order: 70; } .tc-tiddler-frame > .tc-reveal:nth-of-type(2) { order: 60; flex-grow: 2; } .tc-tiddler-frame > .tc-reveal:nth-of-type(3) { order: 50; } @media (min-width: 28rem) { .tc-subtitle { float: right; white-space: unset; } } .tc-subtitle a { color: #000; } .tc-tiddler-help { color: rgb(255, 255, 255); margin-top: .5rem; } .tc-tiddler-help a.tc-tiddlylink { color: rgba(240, 196, 117, 0.7); } .tc-titlebar, .tc-tiddler-edit-title { overflow: hidden; } html body.tc-body.tc-single-tiddler-window { margin: 1em; background: rgb(38, 38, 38); } .tc-single-tiddler-window img, .tc-single-tiddler-window svg, .tc-single-tiddler-window canvas, .tc-single-tiddler-window embed, .tc-single-tiddler-window iframe { max-width: 100%; }\n\n/* ** $:/themes/telmiger/bricks/components/topbar.css ** */\n\n.tc-topbar { position: fixed; z-index: 1200; } .tc-topbar-left { top: .5rem; left: .5rem; } .tc-topbar-right { top: .5rem; right: .5rem; width: 4rem; text-align: right; } .tc-topbar button { height: 2.25rem; width: 2.25rem; background-color: rgba(255, 255, 255, 0.66); text-align: center; margin-bottom: .25rem; } .tc-topbar button[title=\"Show sidebar\"] { background-color: rgba(0, 0, 0, 0.15); } .tc-topbar button svg { fill: rgb(255, 255, 255); } .tc-topbar button:hover { background-color: rgb(255, 255, 255); } .tc-topbar button:hover svg { fill: rgb(179, 179, 179); } @media (min-width: 42rem) { .tc-topbar-left { top: 1rem; left: 1rem; } .tc-topbar-right { top: 1rem; right: 1rem; } }\n\n/* ** $:/themes/telmiger/bricks/components/tree-macro.css ** */\n\n.tc-tree div { padding-left: .5rem; } .tc-tree ol { list-style-type: none; padding-left: 0; margin-top: 0; } .tc-tree ol ol { padding-left: 1em; } .tc-tree button { color: #acacac; } .tc-tree svg { fill: #acacac; } .tc-tree span svg { width: 1em; height: 1em; vertical-align: baseline; } .tc-tree li span { color: lightgray; }\n\n/* ** $:/themes/telmiger/bricks/edit/editor-toolbar.css ** */\n\n.tc-editor-toolbar { margin-top: .5rem; margin-bottom: .5rem; } .tc-editor-toolbar button { vertical-align: middle; background-color: rgb(63, 63, 63); fill: rgb(179, 179, 179); border-radius: .25rem; padding: .25rem; margin-top: .125rem; margin-bottom: .125rem; margin-right: 0; margin-left: .25rem; } .tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct { margin-left: .125rem; border-radius: .5rem; width: 1em; } .tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group { box-shadow: 1px 1px 2px rgb(141, 141, 141); } .tc-editor-toolbar button.tc-selected { background-color: rgb(255, 201, 102); } .tc-editor-toolbar button svg { width: 1.6em; height: 1.2em; } .tc-editor-toolbar button:hover, .tc-editor-toolbar .tc-text-editor-toolbar-more button:hover svg { background-color: rgb(141, 141, 141); fill: rgb(38, 38, 38); } .tc-editor-toolbar .tc-text-editor-toolbar-more { font-size: .875rem; padding-left: 1rem; margin-left: 2rem; } .tc-editor-toolbar .tc-text-editor-toolbar-more .tc-reveal { line-height: 1.25; margin-bottom: .5rem; } .tc-editor-toolbar .tc-text-editor-toolbar-more button { display: inline-block; position: absolute; left: 1rem; padding: .25rem; width: auto; } .tc-editor-toolbar .tc-search-results { padding: 0; }\n\n/* ** $:/themes/telmiger/bricks/edit/editor.css ** */\n\niframe.tc-edit-texteditor { background-color: transparent; } .tc-tiddler-frame .tc-edit-texteditor { width: 100%; margin: 4px 0 0 0; } .tc-tiddler-frame textarea.tc-edit-texteditor, .tc-tiddler-frame iframe.tc-edit-texteditor { padding: .5rem; background-color: rgb(33, 33, 33); line-height: 1.3em; -webkit-appearance: none; -moz-appearance: none; } .tc-tiddler-frame input.tc-edit-texteditor { border-style: none; border-width: 0; border-left-style: solid; border-left-width: 1px; border-width: .5rem; border-bottom-style: solid; border-bottom-width: 1px; padding: .25rem; line-height: 1.25; background-color: rgb(33, 33, 33); border-color: rgb(63, 63, 63); }\n\n/* ** $:/themes/telmiger/bricks/edit/preview-fonts.css ** */\n\n.tc-tiddler-preview-preview h1 { font-size: 1.875rem; margin-bottom: 2rem; } .tc-tiddler-preview-preview h2 { font-size: 1.5rem; margin-bottom: 2rem; } .tc-tiddler-preview-preview h3 { font-size: 1.25rem; margin-bottom: 1rem; } .tc-tiddler-preview-preview h4 { font-size: 1rem; margin-bottom: 1rem; } .tc-tiddler-preview-preview h5 { font-size: .875rem; margin-bottom: 1rem; font-family: georgia, times, serif; } .tc-tiddler-preview-preview h6 { font-size: .75rem; margin-bottom: .5rem; font-family: georgia, times, serif; } .tc-tiddler-preview-preview * + h1, section > h1:first-child { margin-top: 4rem; } .tc-tiddler-preview-preview *:not(h1) + h2, section > h2:first-child { margin-top: 4rem; } .tc-tiddler-preview-preview *:not(h2) + h3, section > h3:first-child { margin-top: 2rem; } .tc-tiddler-preview-preview *:not(h3) + h4, section > h4:first-child { margin-top: 2rem; } .tc-tiddler-preview-preview *:not(h4) + h5, section > h5:first-child { margin-top: 2rem; } .tc-tiddler-preview-preview *:not(h5) + h6, section > h6:first-child { margin-top: 2rem; }\n\n/* ** $:/themes/telmiger/bricks/edit/tiddler-manager.css ** */\n\n.tc-manager-wrapper { } .tc-manager-controls { } .tc-manager-control { margin-top: .5rem; margin-bottom: .5rem; } .tc-manager-list { width: 100%; border-top-style: solid; border-top-width: 1px; border-right-style: solid; border-right-width: 1px; border-left-style: solid; border-left-width: 1px; border-color: rgb(255, 255, 255); } .tc-manager-list-item { } .tc-manager-list-item-heading { display: block; width: 100%; text-align: left; border-bottom-style: solid; border-bottom-width: 1px; border-color: rgb(255, 255, 255); padding: 3px; } .tc-manager-list-item-heading-selected { font-weight: bold; color: rgb(38, 38, 38); fill: rgb(38, 38, 38); background-color: rgb(179, 179, 179); } .tc-manager-list-item-heading:hover { background: rgb(255, 201, 102); color: rgb(38, 38, 38); } .tc-manager-list-item-content { display: flex; } .tc-manager-list-item-content-sidebar { flex: 1 0; background: rgb(33, 33, 33); border-right-style: solid; border-right-width: 1px; border-bottom-style: solid; border-bottom-width: 1px; border-width: .25rem; border-color: rgb(255, 255, 255); white-space: nowrap; } .tc-manager-list-item-content-item-heading { display: block; width: 100%; text-align: left; background: rgb(255, 255, 255); text-transform: uppercase; font-size: .875rem; font-weight: bold; padding-top: .5rem; padding-bottom: .5rem; } .tc-manager-list-item-content-item-body { padding-left: .5rem; padding-right: .5rem; } .tc-manager-list-item-content-item-body > pre { margin-top: .5rem; margin-bottom: .5rem; border: none; background: inherit; } .tc-manager-list-item-content-tiddler { flex: 3 1; border-right-style: solid; border-right-width: 1px; border-bottom-style: solid; border-bottom-width: 1px; <.bl> border-width: .25rem; border-color: rgb(255, 255, 255); } .tc-manager-list-item-content-item-body > table { border: none; padding: 0; margin: 0; } .tc-manager-list-item-content-item-body > table td { border: none; } .tc-manager-icon-editor > button { width: 100%; } .tc-manager-icon-editor > button > svg, .tc-manager-icon-editor > button > button { width: 100%; height: auto; }\n\n/* ** $:/themes/telmiger/bricks/edit/tiddler.css ** */\n\n.tc-tiddler-frame.tc-tiddler-edit-frame { border-style: solid; border-width: 1px; margin-left: .25rem; margin-right: .25rem; width: auto; border-color: rgb(255, 94, 94); } @media (min-width: 28rem) { .tc-tiddler-frame.tc-tiddler-edit-frame { margin-right: 0; margin-left: auto; } } @media (min-width: 42rem) { .tc-tiddler-frame.tc-tiddler-edit-frame { margin-right: calc(66vw - 26rem); } } @media (min-width: 77rem) { .tc-tiddler-frame.tc-tiddler-edit-frame { width: calc(100% - 1.5rem); max-width: calc(54rem + 54rem); margin-right: .5rem; margin-left: 1rem; } .tc-keyboard { width: 100%; } } .tc-tiddler-edit-frame em.tc-edit { color: rgb(179, 179, 179); font-style: normal; } .tc-edit-type-dropdown a.tc-tiddlylink-missing { font-style: normal; } input.tc-titlebar.tc-edit-texteditor { margin-bottom: 1rem; } .tc-edit-tags { margin-bottom: 1rem; background-color: rgb(33, 33, 33); } .tc-edit-add-tag { display: inline-block; margin-left: .5rem; padding-left: .5rem; } .tc-edit-add-tag .tc-add-tag-name input { width: 50%; } .tc-edit-add-tag .tc-keyboard { display:inline; } .tc-edit-tags .tc-tag-label { display: inline-block; } .tc-edit-tags-list { margin-top: 1rem; margin-bottom: 1rem; margin-left: 0; margin-right: 0; } .tc-tag-label .tc-remove-tag-button { padding-left: .25rem; color: rgb(25, 25, 25); } .tc-tiddler-preview { } .tc-tiddler-preview-preview { float: right; width: 49%; border: 1px solid rgb(63, 63, 63); margin: 4px 0 0 3px; padding: .5rem; } .tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor { width: 49%; } .tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor { max-width: 49%; } .tc-type-selector { margin-bottom: .5rem; fill: rgb(128, 128, 128); } .tc-type-selector button:hover svg { fill: rgb(230, 230, 230); } .tc-edit-fields { width: 100%; } .tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td { border-style: none; border-width: 0; padding: .25rem; } .tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) { background-color: rgb(28, 28, 28); } .tc-edit-fields > tbody > .tc-edit-field:nth-child(even) { background-color: rgb(33, 33, 33); } .tc-edit-field-name { text-align: right; } .tc-edit-field-value input { width: 100%; } .tc-edit-field-remove svg { height: 1em; width: 1em; vertical-align: middle; fill: rgb(128, 128, 128); } .tc-edit-field-remove button:hover svg { fill: rgb(230, 230, 230); } .tc-edit-field-add-name { display: inline-block; min-width: 15%; max-width: 30%; margin-right: 1rem; } .tc-edit-field-add-value { display: inline-block; min-width: 38%; max-width: 50%; margin-right: 1rem; } .tc-edit-field-add-button { display: inline-block; } .tc-tiddler-frame .tc-binary-warning { width: 100%; height: 5em; text-align: center; padding: 3em 3em 6em 3em; background: rgb(255, 255, 102); border: 1px solid rgb(232, 232, 125); } canvas.tc-edit-bitmapeditor { border: 6px solid rgb(25, 25, 25); cursor: crosshair; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; margin-top: 6px; margin-bottom: 6px; } .tc-edit-bitmapeditor-width { display: block; } .tc-edit-bitmapeditor-height { display: block; }\n\n/* ** $:/themes/telmiger/bricks/elements/blockquotes-swiss.css ** */\n\nblockquote, q { quotes: \"\\00AB\"\"\\00BB\"\"\\2039\"\"\\203A\"; } blockquote { border-left-style: solid; border-left-width: 1px; border-width: .5rem; border-color: rgba(240, 196, 117, 0.7); padding-left: 1rem; margin-left: 1rem; } blockquote cite { display: inline-block; padding-top: .5rem; } blockquote.tc-big-quote { font-family: Georgia, serif; position: relative; background: rgb(25, 25, 25); border-style: none; border-width: 0; border-radius: 1rem; margin-top: 2rem; margin-bottom: 2rem; margin-left: 1rem; margin-right: 1rem; padding: 1rem; padding-left: 2rem; max-width: 38rem; min-height: 6.5rem; } blockquote.tc-big-quote p { font-size: 1rem; max-width: 30em; } blockquote.tc-big-quote cite:before { content: \"\\2014 \\2009\"; } blockquote.tc-big-quote:before { position: absolute; top: 1.5rem; left: -1.75rem; color: rgba(240, 196, 117, 0.7); content: open-quote; font-size: 6rem; line-height: 0.1em; } blockquote.tc-big-quote:after { position: absolute; right: -1.75rem; bottom: 3.75rem; font-family: Georgia, serif; color: rgba(240, 196, 117, 0.7); content: close-quote; font-size: 6rem; line-height: 0.1em; } @media (min-width: 28rem) { blockquote.tc-big-quote { border-style: none; border-width: 0; border-radius: 1rem; margin-top: 2rem; margin-bottom: 2rem; margin-left: 4rem; margin-right: 4rem; padding: 1rem; padding-left: 2rem; } blockquote.tc-big-quote p { font-size: 1.25rem; } blockquote.tc-big-quote:before { font-size: 9.5rem; left: -4rem; top: 2rem; } blockquote.tc-big-quote:after { font-size: 9.5rem; right: -4rem; bottom: 5.5rem; } }\n\n/* ** $:/themes/telmiger/bricks/elements/buttons.css ** */\n\nhtml button { cursor: pointer; font-size: 1em; color: rgb(179, 179, 179); background: rgb(63, 63, 63); border-color: rgb(127, 127, 127); border-style: solid; border-width: 1px; border-radius: .25rem; } button:not([class]), button[class=\"\"] { line-height: 1.5; padding-left: .5rem; padding-right: .5rem; border-style: solid; border-width: 1px; opacity: 1; -webkit-transition: opacity .15s ease-in; transition: opacity .15s ease-in; transition: color .15s ease-in, text-decoration .15s ease-in, background-color .15s ease-in; } button:not([class]):hover, button:not([class]):focus { opacity: .5; -webkit-transition: opacity .15s ease-in; transition: opacity .15s ease-in; } button:not([class]):active { opacity: .8; -webkit-transition: opacity .15s ease-out; transition: opacity .15s ease-out; } .tc-tiddler-info .tc-tab-content button, .tc-sidebar-lists .tc-tab-content p > button, .tc-sidebar-lists .tc-tab-content p > span:not(.tc-tag-list-item) > button, .tc-sidebar-lists .tc-file-input-wrapper button, .tc-sidebar-lists .tc-popup-keep button, .tc-add-tag-button button, .tc-edit-field-add-button button { border-radius: .25rem; border-style: none; border-width: 0; color: ; background: linear-gradient(to bottom,rgba(99,99,99,.1) 0,rgba(0,0,0,.125) 100%); text-decoration: none; font-weight: 700; padding-top: .25rem; padding-bottom: .25rem; padding-left: 1rem; padding-right: 1rem; margin-right: 1rem; min-width: 5rem; } .tc-tiddler-info .tc-tab-content button:hover, .tc-tab-content p > button:hover, .tc-sidebar-lists .tc-tab-content p > span:not(.tc-tag-list-item) > button:hover, .tc-sidebar-lists .tc-file-input-wrapper:hover button, .tc-sidebar-lists .tc-popup-keep:hover button, .tc-add-tag-button button:hover, .tc-edit-field-add-button button:hover { background: linear-gradient(to bottom,rgba(99,99,99,.3) 0,rgba(99,99,99,.3) 100%); } .tc-add-tag-button button, .tc-edit-field-add-button button { font-size: .875rem; padding-top: .25rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; margin-right: .5rem; min-width: 3rem; } .tc-sidebar-lists .tc-tab-content p > button, .tc-sidebar-lists .tc-tab-content p > span:not(.tc-tag-list-item) > button, .tc-sidebar-lists .tc-file-input-wrapper button, .tc-sidebar-lists .tc-popup-keep button, .tc-tiddler-info .tc-tab-content button { border-style: solid; border-width: 1px; border-radius: .25rem; font-size: .75rem; padding-left: .5rem; padding-right: .5rem; margin-right: .25rem; min-width: 2rem; } button svg, button img, label svg, label img { vertical-align: middle; } .tc-btn-invisible { border: none; border-radius: 0; margin: 0; padding: 0; background: none; cursor: pointer; text-align: left; } .tc-btn-boxed { font-size: 0.6em; padding: 0.2em; margin: 1px; border-style: solid; border-width: 1px; border-color: rgb(128, 128, 128); border-radius: 0.25em; } html body.tc-body .tc-btn-boxed svg { font-size: 1.6666em; } .tc-btn-boxed:hover { background: rgb(255, 255, 255); color: rgb(38, 38, 38); } html body.tc-body .tc-btn-boxed:hover svg { fill: rgb(38, 38, 38); } .tc-btn-rounded { font-size: 0.5em; line-height: 2; padding: 0em 0.3em 0.2em 0.4em; margin: 1px; border-style: solid; border-width: 1px; border-color: rgb(255, 255, 255); background: rgb(255, 255, 255); color: rgb(38, 38, 38); border-radius: 2em; } .tc-btn-rounded:hover { border-style: solid; border-width: 1px; border-color: rgb(255, 255, 255); background: rgb(38, 38, 38); color: rgb(255, 255, 255); } .tc-btn-text { padding: 0; margin: 0; } button.tc-btn-big-green, a.tc-btn-big-green { display: inline-block; font-size: 1.25rem; line-height: 1.5; padding-top: .5rem; padding-bottom: .5rem; padding-left: 1.25rem; padding-right: 1.25rem; margin-top: .5rem; margin-bottom: .5rem; margin-right: .5rem; margin-left: 0; border-style: none; border-width: 0; background: #19a974; color: rgb(38, 38, 38); fill: rgb(38, 38, 38); font-weight: 400; text-decoration: none; } body.tc-body button.tc-btn-big-green:hover { background-color: #19a719; } .tc-btn-big-green svg, .tc-btn-big-green img { margin-top: 0; vertical-align: middle; fill: rgb(38, 38, 38); } .tc-sidebar-lists input { color: rgb(179, 179, 179); } .tc-sidebar-lists button { color: rgb(179, 179, 179); fill: rgb(179, 179, 179); } .tc-sidebar-lists .tc-droppable { display: inline-block; position: relative; padding-left: 1rem; width: 100%; } .tc-sidebar-lists button.tc-btn-mini { font-size: 1rem; position: absolute; width: 1rem; margin-left: -1rem; } .tc-sidebar-lists button.tc-btn-mini + a { display: inline-block; margin-left: .25rem; } .tc-sidebar-lists button.tc-btn-mini { color: rgb(153, 153, 153); } .tc-sidebar-lists button.tc-btn-mini:hover { color: rgb(115, 115, 115); } .tc-sidebar-lists .tc-tab-set .tc-tab-content p .tc-droppable > button.tc-btn-mini { width: auto; font-size: .875rem; margin-top: 1rem; margin-left: -1rem; color: rgb(141, 141, 141); } .tc-unfold-banner svg, .tc-fold-banner svg { height: 0.75em; fill: rgb(128, 128, 128); } .tc-unfold-banner:hover svg, .tc-fold-banner:hover svg { fill: rgb(230, 230, 230); } html body.tc-body .tc-btn-rounded svg { font-size: 1.6666em; fill: rgb(38, 38, 38); } html body.tc-body .tc-btn-rounded:hover svg { fill: rgb(255, 255, 255); } .tc-btn-icon svg { height: 1em; width: 1em; fill: rgb(128, 128, 128); } svg.tc-image-button { padding: 0px 1px 1px 0px; } svg.tc-image-button, .tc-image-button img { height: 1em; width: 1em; max-width: 100%; max-height: 100%; } .tc-page-controls svg.tc-image-new-button { fill: ; } .tc-page-controls svg.tc-image-options-button { fill: ; } .tc-page-controls svg.tc-image-save-button { fill: ; } .tc-fold-banner, .tc-unfold-banner { position: relative; padding: 0; margin: 0; background: none; border: none; right: 0; width: 100%; text-align: right; } .tc-unfold-banner { border-top: 2px solid; border-color: rgb(43, 43, 43); background: none; } .tc-fold-banner:hover svg { background: rgb(43, 43, 43); } .tc-unfold-banner:hover { border-top: 2px solid; border-color: rgb(25, 25, 25); background: rgb(43, 43, 43); }\n\n/* ** $:/themes/telmiger/bricks/elements/details.css ** */\n\ndetails .tc-drop-down[hidden=\"true\"] { display: none; } @media (min-width: 42rem) { details > span { padding-top: 1rem; padding-bottom: 1rem; padding-left: 2rem; padding-right: 2rem; } }\n\n/* ** $:/themes/telmiger/bricks/elements/images.css ** */\n\nimg { max-width: 100%; } .tc-bordered-image { border-style: solid; border-width: 1px; border-color: rgb(255, 255, 255); padding: 5px; margin: 5px; }\n\n/* ** $:/themes/telmiger/bricks/elements/links.css ** */\n\n.tc-tiddlylink, .tc-tiddlylink-external { text-decoration: none; transition: color .15s ease-in, text-decoration .15s ease-in, background-color .15s ease-in; } .tc-tiddlylink:link, .tc-tiddlylink-external:link, .tc-tiddlylink:visited, .tc-tiddlylink-external:visited { transition: color .15s ease-in, text-decoration .15s ease-in, background-color .15s ease-in; } .tc-tiddlylink:hover, .tc-tiddlylink-external:hover { transition: color .15s ease-in, text-decoration .15s ease-in, background-color .15s ease-in; } .tc-tiddlylink:active, .tc-tiddlylink-external:active { transition: color .15s ease-in, text-decoration .15s ease-in, background-color .15s ease-in; } .tc-tiddlylink:focus, .tc-tiddlylink-external:focus { transition: color .15s ease-in, text-decoration .15s ease-in, background-color .15s ease-in; } button.tc-tiddlylink, a.tc-tiddlylink { text-decoration: none; font-weight: normal; color: rgb(204, 204, 255); -webkit-user-select: inherit; } button.tc-tiddlylink:hover, a.tc-tiddlylink:hover { text-decoration: underline; } a.tc-tiddlylink-resolves { } a.tc-tiddlylink-shadow { font-weight: bold; } a.tc-tiddlylink-shadow.tc-tiddlylink-resolves { font-weight: normal; } a.tc-tiddlylink-missing { font-style: italic; } a.tc-tiddlylink-external { text-decoration: underline; color: rgb(179, 179, 255); background-color: inherit; } a.tc-tiddlylink-external:visited { color: rgb(153, 153, 255); background-color: inherit; } a.tc-tiddlylink-external:hover { color: inherit; background-color: inherit; } .tc-sidebar-lists a.tc-tiddlylink { display: inline-block; font-size: .875rem; line-height: 1.25; color: rgb(179, 179, 179); overflow-wrap: break-word; max-width: 100% } .tc-sidebar-lists .tc-btn-mini + a.tc-tiddlylink { margin-bottom: .25rem; } .tc-sidebar-lists a.tc-tiddlylink:hover { color: rgb(115, 115, 115); } .tc-sidebar-header .tc-missing-tiddler-label { font-size: .875rem; line-height: 1.25; margin-bottom: .25rem; color: rgb(141, 141, 141); text-align: left; font-style: italic; } button.tc-btn-invisible.tc-missing-tiddler-label { max-width: 100%; }\n\n/* ** $:/themes/telmiger/bricks/elements/lists.css ** */\n\nul, ol { margin-top: 1rem; max-width: 40rem; } ul ul, ol ol, ul ol, ol ul { margin-top: .5rem; } ol li, ul li { line-height: 1.25; } ol { padding-left: 2rem; } ul { padding-left: 1rem; } li:first-child { margin-top: .5rem; } li:not(:last-child) { padding-bottom: .5rem; }\n\n/* ** $:/themes/telmiger/bricks/elements/tables.css ** */\n\ntable { border-collapse: collapse; border-spacing: 0; border-style: solid; border-width: 1px; border-color: rgba(0,0,0,0.125); width: auto; max-width: 100%; caption-side: bottom; margin-bottom: 2rem; } table th { text-align: left; } tr:nth-child(odd) { background-color: rgba(0,0,0,0.08); } tr:nth-child(even) { background-color: rgba(0,0,0,0.03); } table th, table td { padding-top: .5rem; padding-bottom: .5rem; padding-left: 1rem; padding-right: 1rem; } table thead tr td, table th { background-color: rgba(0,0,0,.1); background-color: rgba(0,0,0,0.125); font-weight: bold; } table tfoot tr td { background-color: rgba(0,0,0,.4); } .tc-csv-table { white-space: nowrap; }\n\n/* ** $:/themes/telmiger/bricks/elements/text/two-columns.css ** */\n\n.cf { *zoom: 1; } .cf:before, .cf:after { content: \" \"; display: table; } .cf:after { clear: both; } .fl { float: left; _display: inline; } .w-100 { width: 100%; } @media screen and (min-width: 30em) { .w-50-ns { width: 50%; } }\n\n/* ** $:/themes/telmiger/bricks/functions/drag-drop.css ** */\n\n.tc-tiddler-dragger { position: relative; z-index: -10000; } .tc-tiddler-dragger-inner { position: absolute; top: -1000px; left: -1000px; display: inline-block; padding: 8px 20px; font-size: 16.9px; font-weight: bold; line-height: 20px; color: rgb(38, 38, 38); text-shadow: 0 1px 0 rgba(0, 0, 0, 1); white-space: nowrap; vertical-align: baseline; background-color: rgb(179, 179, 179); border-radius: 20px; } .tc-tiddler-dragger-cover { position: absolute; background-color: rgb(26, 26, 26); } .tc-dropzone { position: relative; } .tc-dropzone.tc-dragover:before { z-index: 10000; display: block; position: fixed; top: 0; left: 0; right: 0; background: #9eebcf; text-align: center; content: \"Drop here (or use the 'Escape' key to cancel)\"; } .tc-droppable.tc-dragover > .tc-droppable-placeholder { display: block; border: 2px dashed #9eebcf; } .tc-draggable { cursor: move; }\n\n/* ** $:/themes/telmiger/bricks/functions/print.css ** */\n\n@media print { body .tc-tiddler-controls { display: none; } body .tc-sidebar-scrollable { position: relative; top: 0; bottom: unset; left: 0; box-shadow: none; } body .tc-sidebar-header > .tc-reveal { width: 100%; padding: 0; margin: 0; margin-bottom: 2rem; border-bottom-style: solid; border-bottom-width: 1px; border-color: rgb(255, 201, 102); } body.tc-body { background-color: transparent; } body .tc-topbar, body .tc-page-controls, body .tc-sidebar-lists { display: none; } body .tc-story-river { margin: 0; padding: 0; } body .tc-story-river .tc-tiddler-frame { margin: 0; border: none; padding: 0; } }\n\n/* ** $:/themes/telmiger/bricks/functions/zoomin.css ** */\n\n.tc-storyview-zoomin-tiddler { position: absolute; display: block; width: 100%; } @media (min-width: 77rem) { body .tc-story-river > .tc-storyview-zoomin-tiddler { width: calc(100% - 4rem); margin-left: auto; margin-right: auto; } }\n\n/* ** $:/themes/telmiger/bricks/plugins/grosinger-checklist.css ** */\n\ninput.checklist-newitem { width: calc(100% - 2.75em - 20px); }\n\n/* ** $:/themes/telmiger/bricks/todo-components/thumbnail.css ** */\n\n.tc-thumbnail-wrapper { position: relative; display: inline-block; margin: 6px; vertical-align: top; } .tc-thumbnail-right-wrapper { float:right; margin: 0.5em 0 0.5em 0.5em; } .tc-thumbnail-image { text-align: center; overflow: hidden; border-radius: 3px; } .tc-thumbnail-image svg, .tc-thumbnail-image img { filter: alpha(opacity=1); opacity: 1; min-width: 100%; min-height: 100%; max-width: 100%; } .tc-thumbnail-wrapper:hover .tc-thumbnail-image svg, .tc-thumbnail-wrapper:hover .tc-thumbnail-image img { filter: alpha(opacity=0.8); opacity: 0.8; } .tc-thumbnail-background { position: absolute; border-radius: 3px; } .tc-thumbnail-icon svg, .tc-thumbnail-icon img { width: 3em; height: 3em;\n  -webkit-filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));\n     -moz-filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));\n          filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));\n} .tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg, .tc-thumbnail-wrapper:hover .tc-thumbnail-icon img { fill: #fff;\n  -webkit-filter: drop-shadow(3px 3px 4px rgba(0,0,0,0.6));\n     -moz-filter: drop-shadow(3px 3px 4px rgba(0,0,0,0.6));\n          filter: drop-shadow(3px 3px 4px rgba(0,0,0,0.6));\n} .tc-thumbnail-icon { position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: -webkit-flex; -webkit-align-items: center; -webkit-justify-content: center; display: flex; align-items: center; justify-content: center; } .tc-thumbnail-caption { position: absolute; background-color: #777; color: #fff; text-align: center; bottom: 0; width: 100%; filter: alpha(opacity=0.9); opacity: 0.9; line-height: 1.4; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; } .tc-thumbnail-wrapper:hover .tc-thumbnail-caption { filter: alpha(opacity=1); opacity: 1; }\n\n/* ** $:/themes/telmiger/bricks/todo-components/toc.css ** */\n\n.tc-sidebar-lists .tc-table-of-contents { white-space: nowrap; } .tc-table-of-contents button { color: rgb(141, 141, 141); } .tc-table-of-contents svg { width: 0.7em; height: 0.7em; vertical-align: middle; fill: rgb(141, 141, 141); } .tc-table-of-contents ol { list-style-type: none; padding-left: 0; } .tc-table-of-contents ol ol { padding-left: 1em; } .tc-table-of-contents li { font-size: 1.0em; font-weight: bold; } .tc-table-of-contents li a { font-weight: bold; } .tc-table-of-contents li li { font-size: 0.95em; font-weight: normal; line-height: 1.4; } .tc-table-of-contents li li a { font-weight: normal; } .tc-table-of-contents li li li { font-size: 0.95em; font-weight: 200; line-height: 1.5; } .tc-table-of-contents li li li a { font-weight: bold; } .tc-table-of-contents li li li li { font-size: 0.95em; font-weight: 200; } .tc-tabbed-table-of-contents { display: -webkit-flex; display: flex; } .tc-tabbed-table-of-contents .tc-table-of-contents { z-index: 100; display: inline-block; padding-left: 1em; max-width: 50%; -webkit-flex: 0 0 auto; flex: 0 0 auto; background: rgba(0,0,0,0.125); border-left: 1px solid; border-top: 1px solid; border-bottom: 1px solid; border-color: rgb(255, 201, 102); } .tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a, .tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a { display: block; padding: 0.12em 1em 0.12em 0.25em; } .tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a { border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-color: rgba(0,0,0,0.125); } .tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover { text-decoration: none; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-color: rgb(255, 201, 102); background: rgb(255, 201, 102); } .tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a { border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-color: rgb(255, 201, 102); background: rgb(38, 38, 38); margin-right: -1px; } .tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover { text-decoration: none; } .tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content { display: inline-block; vertical-align: top; padding-left: 1.5em; padding-right: 1.5em; border: 1px solid; border-color: rgb(255, 201, 102); -webkit-flex: 1 0 50%; flex: 1 0 50%; } ",
            "title": "$:/themes/telmiger/bricks/frozen-004.css",
            "tags": "$:/tags/Stylesheet",
            "modified": "20180203195839067"
        },
        "$:/palettes/Twilight": {
            "text": "alert-background: rgb(255, 255, 102)\nalert-border: rgb(232, 232, 125)\nalert-highlight: rgb(255, 51, 51)\nalert-muted-foreground: rgb(224, 82, 82)\nbackground: rgb(38, 38, 38)\nblockquote-bar: rgba(240, 196, 117, 0.7)\nbutton-background: rgb(63, 63, 63)\nbutton-border: rgb(127, 127, 127)\nbutton-foreground: rgb(179, 179, 179)\ncode-background: rgba(0,0,0,0.03)\ncode-border: rgba(0,0,0,0.08)\ncode-foreground: rgb(255, 94, 94)\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: rgb(255, 94, 94)\ndownload-background: #19a974\ndownload-foreground: rgb(38, 38, 38)\ndragger-background: rgb(179, 179, 179)\ndragger-foreground: rgb(38, 38, 38)\ndropdown-background: rgb(38, 38, 38)\ndropdown-border: rgb(255, 255, 255)\ndropdown-tab-background: rgba(0,0,0,.1)\ndropdown-tab-background-selected: rgba(255,255,255,1)\ndropzone-background: #9eebcf\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: rgb(179, 179, 255)\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: rgb(153, 153, 255)\nforeground: rgb(179, 179, 179)\nmessage-background: <<colour tag-foreground>>\nmessage-border: #96ccff\nmessage-foreground: <<colour tag-background>>\nmodal-backdrop: rgb(179, 179, 179)\nmodal-background: rgb(38, 38, 38)\nmodal-border: rgba(0,0,0,.5)\nmodal-footer-background: #f4f4f4\nmodal-footer-border: rgba(0,0,0,.1)\nmodal-header-border: rgba(0,0,0,.2)\nmuted-foreground: rgb(255, 255, 255)\nnotification-background: <<colour tag-foreground>>\nnotification-border: <<colour tag-background>>\npage-background: rgb(26, 26, 26)\npre-background: rgb(25, 25, 25)\npre-border: rgba(0,0,0,.2)\nprimary: rgb(255, 201, 102)\nselect-tag-background: \nselect-tag-foreground: \nsidebar-button-foreground: rgb(179, 179, 179)\nsidebar-controls-foreground: rgb(153, 153, 153)\nsidebar-controls-foreground-hover: <<colour tiddler-controls-foreground-hover>>\nsidebar-foreground: rgb(141, 141, 141)\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: rgba(0, 0, 0, 0.5)\nsidebar-muted-foreground-hover: rgb(141, 141, 141)\nsidebar-tab-background: rgba(141, 141, 141, 0.2)\nsidebar-tab-background-selected: rgb(26, 26, 26)\nsidebar-tab-border: rgb(127, 127, 127)\nsidebar-tab-border-selected: rgb(127, 127, 127)\nsidebar-tab-divider: rgb(127, 127, 127)\nsidebar-tab-foreground: rgb(179, 179, 179)\nsidebar-tab-foreground-selected: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground-hover: rgb(115, 115, 115)\nsite-title-foreground: rgb(255, 201, 102)\nstatic-alert-foreground: rgba(0,0,0,.3)\ntab-background: rgba(0,0,0,0.125)\ntab-background-selected: rgb(38, 38, 38)\ntab-border: rgb(255, 201, 102)\ntab-border-selected: rgb(255, 201, 102)\ntab-divider: rgb(255, 201, 102)\ntab-foreground: rgb(179, 179, 179)\ntab-foreground-selected: rgb(179, 179, 179)\ntable-border: rgba(255,255,255,.3)\ntable-footer-background: rgba(0,0,0,.4)\ntable-header-background: rgba(0,0,0,.1)\ntag-background: rgb(255, 201, 102)\ntag-foreground: rgb(25, 25, 25)\ntiddler-background: rgb(38, 38, 38)\ntiddler-border: rgba(240, 196, 117, 0.7)\ntiddler-controls-foreground: rgb(128, 128, 128)\ntiddler-controls-foreground-hover: rgba(255, 255, 255, 0.8)\ntiddler-controls-foreground-selected: rgba(255, 255, 255, 0.9)\ntiddler-editor-background: rgb(33, 33, 33)\ntiddler-editor-border: rgb(63, 63, 63)\ntiddler-editor-border-image: rgb(25, 25, 25)\ntiddler-editor-fields-even: rgb(33, 33, 33)\ntiddler-editor-fields-odd: rgb(28, 28, 28)\ntiddler-info-background: rgb(43, 43, 43)\ntiddler-info-border: rgb(25, 25, 25)\ntiddler-info-tab-background: rgb(43, 43, 43)\ntiddler-link-background: rgb(38, 38, 38)\ntiddler-link-foreground: rgb(204, 204, 255)\ntiddler-subtitle-foreground: rgb(255, 255, 255)\ntiddler-title-foreground: rgb(255, 192, 76)\ntoolbar-cancel-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-done-button: \ntoolbar-edit-button: \ntoolbar-info-button: \ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \nuntagged-background: rgb(255, 255, 255)\nvery-muted-foreground: rgba(240, 196, 117, 0.7)\n",
            "type": "application/x-tiddler-dictionary",
            "title": "$:/palettes/Twilight",
            "tags": "$:/tags/Palette",
            "name": "Twilight",
            "description": "Delightful, soft darkness.",
            "author": "Thomas Elmiger"
        },
        "$:/palette": {
            "text": "$:/palettes/Twilight",
            "title": "$:/palette",
            "modifier": "Thomas Elmiger",
            "modified": "20190318212604166",
            "creator": "Thomas Elmiger",
            "created": "20190318212600954"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/telmiger/navigator/icon": {
            "text": "<svg class=\"em-icon te-navigator tc-image-button\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 22 22\" width=\"22pt\" height=\"22pt\" role=\"img\" fill=\"currentColor\" fill-rule=\"evenodd\" clip-rule=\"evenodd\">\n<path d=\"M9.703 2.088v-.72A1.3 1.3 0 0 1 10.997.074a1.3 1.3 0 0 1 1.294 1.294v.729a8.959 8.959 0 0 1 4.072 1.704l.526-.526a1.3 1.3 0 0 1 1.83 0 1.3 1.3 0 0 1 0 1.83l-.531.53a8.958 8.958 0 0 1 1.683 4.069h.733c.71 0 1.318.585 1.318 1.295 0 .709-.608 1.294-1.318 1.294h-.733a8.957 8.957 0 0 1-1.682 4.072l.513.513c.502.502.519 1.345.017 1.847s-1.345.485-1.847-.017l-.509-.509a8.959 8.959 0 0 1-4.072 1.704v.703c0 .71-.584 1.317-1.294 1.317-.71 0-1.294-.607-1.294-1.317v-.694a8.955 8.955 0 0 1-4.104-1.687l-.484.483c-.502.502-1.344.519-1.846.017s-.486-1.345.016-1.847l.479-.479a8.96 8.96 0 0 1-1.708-4.106h-.69a1.3 1.3 0 0 1-1.294-1.294 1.3 1.3 0 0 1 1.294-1.295h.69a8.962 8.962 0 0 1 1.709-4.103l-.496-.496a1.3 1.3 0 0 1 0-1.83 1.3 1.3 0 0 1 1.83 0l.5.5a8.949 8.949 0 0 1 4.104-1.687zm-.471 12.504l-1.933 1.932a6.58 6.58 0 0 0 2.404.985v-2.726a4.034 4.034 0 0 1-.471-.191zm3.504-.02a4.063 4.063 0 0 1-.445.188v2.736a6.564 6.564 0 0 0 2.373-.996l-1.928-1.928zM4.46 12.293A6.618 6.618 0 0 0 5.463 14.7l1.929-1.928a4.107 4.107 0 0 1-.201-.479H4.46zm10.276 0c-.052.15-.112.297-.181.438l1.933 1.933a6.6 6.6 0 0 0 .979-2.371h-2.731zm-3.772-3.025a1.733 1.733 0 1 1-.003 3.465 1.733 1.733 0 0 1 .003-3.465zm5.524-1.932l-1.933 1.932c.068.141.129.287.18.436h2.731a6.566 6.566 0 0 0-.978-2.368zM5.464 7.3a6.587 6.587 0 0 0-1.003 2.404h2.731c.057-.163.123-.323.2-.476L5.464 7.3zm6.827-2.796V7.24c.152.054.301.117.444.188L14.664 5.5a6.579 6.579 0 0 0-2.373-.996zm-2.588-.013a6.568 6.568 0 0 0-2.403.985l1.932 1.932c.152-.073.309-.137.471-.191V4.491z\"/></svg>",
            "title": "$:/themes/telmiger/navigator/icon",
            "tags": "$:/tags/Image",
            "modifier": "Thomas Elmiger",
            "modified": "20190225064911155",
            "creator": "Thomas Elmiger",
            "created": "20190201062848367",
            "caption": "Navigator"
        },
        "$:/themes/telmiger/navigator/icons/menu-close": {
            "text": "<svg class=\"em-icon te-menu-close tc-image-button\"  viewBox=\"0 0 22 22\" xmlns=\"http://www.w3.org/2000/svg\" width=\"22pt\" height=\"22pt\" role=\"img\" fill=\"currentColor\" fill-rule=\"evenodd\"><path d=\"M20.624 22H1.376A1.377 1.377 0 0 1 0 20.624V1.376C0 .617.616 0 1.376 0h19.248C21.383 0 22 .616 22 1.376v19.248c0 .759-.616 1.376-1.376 1.376zM8.774 2.75h-4.65c-.759 0-1.374.617-1.374 1.375v13.75c0 .759.615 1.375 1.374 1.375h4.65A1.375 1.375 0 0 1 7.4 17.875V4.125c0-.758.615-1.375 1.374-1.375zm5.924 10.097l-2.772 2.771a1.304 1.304 0 0 1-1.844-1.844l2.77-2.773-2.77-2.774a1.304 1.304 0 0 1 1.844-1.844L14.7 9.149l2.772-2.766a1.302 1.302 0 0 1 1.845 0 1.3 1.3 0 0 1 0 1.844l-2.767 2.772 2.767 2.77a1.3 1.3 0 0 1 0 1.844 1.302 1.302 0 0 1-1.845 0L14.7 12.847h-.002z\"/></svg>",
            "title": "$:/themes/telmiger/navigator/icons/menu-close",
            "tags": "$:/tags/Image",
            "modifier": "Thomas Elmiger",
            "modified": "20190203135953402",
            "creator": "Thomas Elmiger",
            "created": "20190202081526032"
        },
        "$:/themes/telmiger/navigator/icons/menu-open": {
            "text": "<svg class=\"em-icon te-menu-open tc-image-button\"  viewBox=\"0 0 22 22\" xmlns=\"http://www.w3.org/2000/svg\" width=\"22pt\" height=\"22pt\" role=\"img\" fill=\"currentColor\"><path d=\"M20.624 22H1.376A1.377 1.377 0 0 1 0 20.624V1.376C0 .617.616 0 1.376 0h19.248C21.383 0 22 .616 22 1.376v19.248c0 .759-.616 1.376-1.376 1.376zM5.876 2.75H4.124c-.759 0-1.374.617-1.374 1.375v13.75c0 .759.615 1.375 1.374 1.375h1.752c.759 0 1.374-.617 1.374-1.375V4.125c0-.759-.615-1.375-1.374-1.375zm11.95 0h-6.452c-.759 0-1.374.617-1.374 1.375v13.75c0 .759.615 1.375 1.374 1.375h6.452c.759 0 1.374-.617 1.374-1.375V4.125c0-.759-.615-1.375-1.374-1.375zm-1.201 11.7a1.376 1.376 0 0 1 0 2.75h-3.95a1.376 1.376 0 0 1 0-2.75h3.95zm0-4.815a1.376 1.376 0 0 1 0 2.75h-3.95a1.376 1.376 0 0 1 0-2.75h3.95zm0-4.836a1.376 1.376 0 0 1 0 2.75h-3.95a1.376 1.376 0 0 1 0-2.75h3.95z\"/></svg>",
            "title": "$:/themes/telmiger/navigator/icons/menu-open",
            "tags": "$:/tags/Image",
            "modifier": "Thomas Elmiger",
            "modified": "20190202075643750",
            "creator": "Thomas Elmiger",
            "created": "20190202075425710"
        },
        "$:/themes/telmiger/navigator/icons/new": {
            "text": "<svg class=\"em-icon te-new\"  viewBox=\"0 0 22 22\" xmlns=\"http://www.w3.org/2000/svg\" width=\"22pt\" height=\"22pt\" role=\"img\" fill=\"currentColor\"><path d=\"M17.25 2.462l-.97.972 1.94 1.945.973-.973-1.945-1.944h.002zm.972-.972l.338-.337a1.375 1.375 0 1 1 1.945 1.944l-.338.338-1.945-1.946v.001zm-2.916 2.92L4.84 14.87C3.853 15.853 3 18.651 3 18.651s2.82-.875 3.784-1.84L17.25 6.352l-1.944-1.945v.002z\" fill-rule=\"nonzero\"/><path d=\"M6.292 4.543v2.125a.707.707 0 0 1-1.415 0l-.001-2.125L2.75 4.54a.707.707 0 0 1 0-1.414l2.125-.003.002-2.123c-.001-.391.316-.709.707-.707A.706.706 0 0 1 6.29 1l.002 2.123 2.123.002c.39 0 .708.317.707.707a.706.706 0 0 1-.707.707l-2.124.002zM7.189 21.716c1.167-.099 2.389-.39 4.072-.919.313-.099.613-.195 1.089-.351 2.75-.898 3.76-1.17 4.94-1.228 1.437-.071 2.381.366 3.022 1.495a.687.687 0 1 0 1.196-.678c-.917-1.617-2.363-2.285-4.286-2.19-1.353.067-2.416.352-5.299 1.294-.471.154-.767.25-1.074.346-3.345 1.051-5.289 1.216-6.806.301a.687.687 0 1 0-.711 1.177c1.089.657 2.364.88 3.857.753z\"/></svg>",
            "title": "$:/themes/telmiger/navigator/icons/new",
            "tags": "$:/tags/Image",
            "modifier": "Thomas Elmiger",
            "modified": "20190201202658107",
            "creator": "Thomas Elmiger",
            "created": "20190201135012521"
        },
        "$:/themes/telmiger/navigator/icons/to-top": {
            "text": "<svg class=\"em-icon te-to-top tc-image-button\"  viewBox=\"0 0 22 22\" xmlns=\"http://www.w3.org/2000/svg\" width=\"22pt\" height=\"22pt\" role=\"img\" fill=\"currentColor\"><path d=\"M9.625 10.695l-1.541 1.54a1.375 1.375 0 1 1-1.944-1.944l3.887-3.887c.258-.26.608-.404.973-.404h-.001c.353 0 .705.135.974.404l3.888 3.887a1.376 1.376 0 0 1-1.945 1.945l-1.541-1.541v8.93a1.375 1.375 0 1 1-2.75 0v-8.93z\"/><path d=\"M19.625 1H2.375C1.62 1 1 1.621 1 2.375S1.62 3.75 2.375 3.75h17.25C20.38 3.75 21 3.129 21 2.375S20.38 1 19.625 1z\"/></svg>",
            "title": "$:/themes/telmiger/navigator/icons/to-top",
            "tags": "$:/tags/Image",
            "modifier": "Thomas Elmiger",
            "modified": "20190202075725196",
            "creator": "Thomas Elmiger",
            "created": "20190201221606753"
        },
        "$:/themes/telmiger/navigator/main": {
            "text": "!! Edit Main Navigation\n\n!!! Colours\n\n<$edit-text tag=\"input\" size=\"28\" tiddler=\"$:/themes/telmiger/navigator/settings\" index=\"colour-main-nav\" class=\"\"/> –&nbsp;background<br>\n<$edit-text tag=\"input\" size=\"28\" tiddler=\"$:/themes/telmiger/navigator/settings\" index=\"colour-new-button\" class=\"\"/> –&nbsp;new button background\n\n\n!!! Buttons\n\nMake sure to have only a few buttons here so that they are all visible on small mobile screens!\n\n<$edit-text tiddler=\"$:/themes/telmiger/navigator/TopLeftBar\" class=\"te-edit-text\"/> \n\nTo return to the original state, simply delete the tiddler $:/themes/telmiger/navigator/TopLeftBar that stores your changes.\n\n\n!!! Top left bar\n\nTo make sure, this comes first in the HTML code of this page, the so called left top bar is used for the main navigation. It displays all elements tagged <<tag $:/tags/TopLeftBar>> – in case you have other items there, you can click the tag pill and reorder them via drag and drop.\n",
            "title": "$:/themes/telmiger/navigator/main",
            "modifier": "Thomas Elmiger",
            "modified": "20190205223514480",
            "creator": "Thomas Elmiger",
            "created": "20190202203807601"
        },
        "$:/themes/telmiger/navigator/readme": {
            "created": "20190202200133608",
            "creator": "Thomas Elmiger",
            "text": "!! Navigator Theme\n\nThis is a so called //theme// for [[TiddlyWiki|https://tiddlywiki.com]] (TW). It is here to make navigation as easy as possible.\n\n\n!!! Main Navigation\n\nAt the bottom of the screen, where they are easy to reach on mobile devices, we have the most important functions. If you want to add or remove buttons, you are able to do that by changing [[$:/themes/telmiger/navigator/TopLeftBar]] or on the tab //main// of the plugin.\n\n\n!!! Sidebar Navigation\n\n{{$:/themes/telmiger/navigator/ui/Buttons/menu}} This button toggles the secondary navigation, known as the //sidebar// in TW. The button is available in the main navigation and as a //page control// tool in the sidebar itself. – On small screens, tap or click anywhere besides the sidebar to close it.\n\n<$checkbox tiddler=\"$:/themes/telmiger/navigator/settings\" index=\"hide-secondary-nav\" checked=\"yes\" unchecked=\"no\"> hide secondary navigation on startup</$checkbox>\n\nYou can [[add your own tabs|https://tiddlywiki.com/#How%20to%20add%20a%20new%20tab%20to%20the%20sidebar]] there, e.g. a [[table of contents|https://tiddlywiki.com/#Adding%20a%20table%20of%20contents%20to%20the%20sidebar]], click the links to learn how.\n\nThe sidebar contains all elements tagged <<tag $:/tags/SideBarSegment>>.\n\n\n!!! Top Navigation\n\nAt the top of the screen is a bar for three icons or buttons. See [[$:/themes/telmiger/navigator/TopRightBar]] or on the tab //top// of the plugin.\n\n\n!!! New Element\n\nThe [[big button|$:/themes/telmiger/navigator/ui/Buttons/new-tiddler-big]] in the lower right of the screen opens a new addition in the story. \n\n<$checkbox tiddler=\"$:/themes/telmiger/navigator/settings\" index=\"show-new-button\" checked=\"yes\" unchecked=\"no\"> show big new element button</$checkbox>\n\n\n!!! Keyboard Shortcut Hints\n\nOn big screens, the main navigation at the bottom can show hints for keyboard shortcuts (TW versions from 5.1.18).\n\n<$checkbox tiddler=\"$:/themes/telmiger/navigator/settings\" index=\"show-kbd-hints\" checked=\"yes\" unchecked=\"no\"> show keyboard hints</$checkbox>\n\n\n!! Recommended Plugins\n\nNavigator works best together with these [[other plugins|https://tid.li/tw5/plugins.html]] from the same author: \n\n* [[Simple Search|https://tid.li/tw5/plugins.html#%24%3A%2Fplugins%2Ftelmiger%2Fsimple-search]]\n* [[MyStory|https://tid.li/tw5/plugins.html#%24%3A%2Fplugins%2Ftelmiger%2FMyStory]]\n\n\n!!! Feedback\nPlease visit the friendly [[TW user group on Google|https://groups.google.com/forum/#!forum/tiddlywiki]] to connect to other users or the author Thomas Elmiger.\n\n\n!! Core overruling\n\nThis plugin overwrites $:/core/ui/TopBar/menu and nothing else.",
            "title": "$:/themes/telmiger/navigator/readme",
            "modifier": "Thomas Elmiger",
            "modified": "20190303104127474",
            "tags": "$:/tags/ControlPanel/Appearance",
            "description": "Navigator Theme Readme and Settings",
            "list-after": "$:/core/ui/ControlPanel/Theme",
            "caption": "Theme Tweaks"
        },
        "$:/themes/telmiger/navigator/settings": {
            "created": "20190202213759003",
            "creator": "Thomas Elmiger",
            "text": "hide-secondary-nav: yes\ncolour-main-nav: rgb(200, 225, 211)\ncolour-new-button: <<colour sidebar-tab-background>>\nshow-new-button: no\nshow-kbd-hints: no",
            "type": "application/x-tiddler-dictionary",
            "title": "$:/themes/telmiger/navigator/settings",
            "tags": "",
            "modifier": "Thomas Elmiger",
            "modified": "20190310225739679"
        },
        "$:/themes/telmiger/navigator/StartupAction": {
            "text": "<$reveal type=\"match\" state=\"$:/themes/telmiger/navigator/settings##hide-secondary-nav\" text=\"yes\">\n<$action-setfield $tiddler=\"$:/state/sidebar\" $value=\"no\"/>\n</$reveal>",
            "title": "$:/themes/telmiger/navigator/StartupAction",
            "tags": "$:/tags/StartupAction",
            "modifier": "Thomas Elmiger",
            "modified": "20190202230238366",
            "creator": "Thomas Elmiger",
            "created": "20190202225149898"
        },
        "$:/themes/telmiger/navigator/styles/dynamic.css": {
            "created": "20190203140828079",
            "creator": "Thomas Elmiger",
            "text": "\\rules except bold underline strikethrough subscript superscript italic dash list\n\\define --breakpoint-not-small() min-width: 28rem\n\\define --breakpoint-medium() min-width: 42rem\n\\define --breakpoint-large() min-width: 77rem\n\\define if-editor-height-fixed(then,else)\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n$then$\n</$reveal>\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n$else$\n</$reveal>\n\\end\n\n/*\n** Styles containing Wikilogic from\n** $:/themes/telmiger/bricks/wikilogic-42-77\n** inspired by TW vanilla\n** \"\"\" \n*/\n\nhtml {\n\tfont-size: {{$:/themes/telmiger/bricks/metrics/fontsize}};\n}\n\n/*\n** no-sidebar rules – mostly from .../001-page.css\n*/\n\n@media (<<--breakpoint-medium>>) {\n\n<<if-no-sidebar \"\n\n\tbody .tc-tiddler-view-frame, body .tc-tiddler-frame.tc-tiddler-edit-frame {\n\t\tmargin-right: auto;\n\t}\n\n\tbody .tc-tiddler-frame.tc-tiddler-edit-frame {\n\t\tmargin-right: 2rem;\n\t}\n\n\">>\n}\n\n\n@media (<<--breakpoint-large>>) {\n\n<<if-no-sidebar \"\n\n\tbody .tc-story-river {\n\t\tmargin-right: auto;\n\t\tpadding-right: 2rem;\n\t}\n\n\tbody .tc-tiddler-frame {\n\t\tmargin-right: auto;\n\t}\n\n\">>\n}\n\n\n/*\n** from .../components/tiddler.css\n*/\n\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tmargin-right: 0rem;\n\tmargin-left: -1rem;\n\tpadding-right: 4rem;\n\tpadding-left: 1rem;\n\tmin-width: calc(100% + 2rem);\n\tz-index: 300;\n\tbackground: <<colour tiddler-background>>;\n\tborder-bottom: 1px solid <<colour tab-divider>>;\n}\n\n@media (<<--breakpoint-not-small>>) {\n\t.tc-tiddler-title {\n\t\tmargin-right: 0rem;\n\t\tmargin-left: -1rem;\n\t\tpadding-right: 2rem;\n\t\tpadding-left: 1rem;\n\t\tmin-width: calc(100% + 2rem);\n\t}\n}\n\n@media (<<--breakpoint-medium>>) {\n\t.tc-tiddler-title {\n\t\tpadding-right: 1rem;\n\t}\n}\n</$reveal>\n\n\n/*\n** from .../edit/tiddler.css\n*/\n\ntextarea.tc-edit-texteditor {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\n<<if-editor-height-fixed then:\"\"\"\n\nbody .tc-tiddler-preview-preview {\n\toverflow-y: scroll;\n\theight: {{$:/config/TextEditor/EditorHeight/Height}};\n}\n\n\"\"\">>\n\n\n/*\n** Navigator Plugin – Dynamic Elements\n** (c) Thomas Elmiger\n*/\n\n\n#navigator-main {\n   background-color: {{$:/themes/telmiger/navigator/settings##colour-main-nav}};\n}\n\n#navigator-main button {\n   color: <<colour sidebar-tab-foreground>>;\n}\n\n#navigator-main button.te-big-new-btn {\n   background-color: {{$:/themes/telmiger/navigator/settings##colour-new-button}};\n}\n\n\n/* Show big New button? */\n\n<$reveal type=\"match\" stateTitle=\"$:/themes/telmiger/navigator/settings\" stateIndex=\"show-new-button\" text=\"no\">\n\n.tc-page-container .tc-topbar-left button.te-big-new-btn {\n   display: none;\n}\n\n</$reveal>\n\n/* Show keyboard hints? */\n\n<$reveal type=\"match\" stateTitle=\"$:/themes/telmiger/navigator/settings\" stateIndex=\"show-kbd-hints\" text=\"no\">\n\n#navigator-main .shortcut-code {\n   display: none;\n}\n\n</$reveal>\n\n\n/* End \"\"\" */",
            "title": "$:/themes/telmiger/navigator/styles/dynamic.css",
            "tags": "$:/tags/Stylesheet MyMark",
            "modifier": "Thomas Elmiger",
            "modified": "20190304205200392"
        },
        "$:/themes/telmiger/navigator/top": {
            "text": "!! Edit Top Navigation\n\n\n!!! Buttons\n\nMake sure to have the exact number of three buttons here so that they are all usable on small mobile screens!\n\n<$edit-text tiddler=\"$:/themes/telmiger/navigator/TopRightBar\" class=\"te-edit-text\"/> \n\nTo return to the original state, simply delete the tiddler $:/themes/telmiger/navigator/TopRightBar that stores your changes.\n\n\n!!! Top right bar\n\nTo make sure, this comes second in the HTML code of this page, the so called right top bar is used for the top navigation. It displays all elements tagged <<tag $:/tags/TopRightBar>> – in case you have other items there, it might be best to place them in the list above or to remove them.\n",
            "title": "$:/themes/telmiger/navigator/top",
            "tags": "ToDoComponents",
            "modifier": "Thomas Elmiger",
            "modified": "20190203212744214",
            "creator": "Thomas Elmiger",
            "created": "20190203203947555"
        },
        "$:/themes/telmiger/navigator/TopLeftBar": {
            "text": "<nav id=\"navigator-main\" class=\"tc-page-controls\" tabindex=\"0\">\n{{$:/themes/telmiger/navigator/ui/Buttons/menu}}\n<span class=\"shortcut-code large-screen-only\"><kbd>{{$:/config/shortcuts/simple-search}}</kbd></span> {{$:/plugins/telmiger/simple-search/ui/Buttons/search}}\n{{$:/themes/telmiger/navigator/ui/Buttons/to-top}}\n{{$:/core/ui/Buttons/save-wiki}}\n{{$:/themes/telmiger/navigator/ui/Buttons/new-tiddler-big}}\n</nav>",
            "title": "$:/themes/telmiger/navigator/TopLeftBar",
            "tags": "$:/tags/TopLeftBar",
            "modifier": "Thomas Elmiger",
            "modified": "20190225215458800",
            "creator": "Thomas Elmiger",
            "created": "20190201203516392"
        },
        "$:/themes/telmiger/navigator/TopRightBar": {
            "created": "20190201201906464",
            "creator": "Thomas Elmiger",
            "text": "<nav id=\"navigator-top\" class=\"tc-page-controls\" tabindex=\"0\">\n<ul>\n<li>{{$:/themes/telmiger/navigator/ui/Buttons/about}}</li>\n<li>{{$:/core/ui/Buttons/home}}</li>\n<li>{{$:/themes/telmiger/navigator/ui/Buttons/control-panel}}</li>\n</ul>\n</nav>",
            "title": "$:/themes/telmiger/navigator/TopRightBar",
            "tags": "$:/tags/TopRightBar",
            "modifier": "Thomas Elmiger",
            "modified": "20190407141132320",
            "list-before": ""
        },
        "$:/themes/telmiger/navigator/ui/Buttons/menu": {
            "text": "<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible te-menu-close tc-selected\">\n<div class=\"te-close-sidebar-btn\"></div>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/themes/telmiger/navigator/icons/menu-close}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">{{$:/language/Buttons/HideSideBar/Caption}}</span>\n</$list>\n</$button>\n</$reveal>\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible te-menu-open\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/themes/telmiger/navigator/icons/menu-open}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">{{$:/language/Buttons/ShowSideBar/Caption}}</span>\n</$list>\n</$button>\n</$reveal>",
            "title": "$:/themes/telmiger/navigator/ui/Buttons/menu",
            "tags": "$:/tags/PageControls",
            "modifier": "Thomas Elmiger",
            "modified": "20190225212300875",
            "list-after": "",
            "description": "Open/close sidebar menu",
            "creator": "Thomas Elmiger",
            "created": "20190202080028453",
            "caption": "{{$:/themes/telmiger/navigator/icons/menu-open}} Sidebar Navigation"
        },
        "$:/themes/telmiger/navigator/ui/Buttons/to-top": {
            "text": "<$button class=\"tc-btn-invisible te-btn-to-top\" tooltip=\"top of the story\">\n<$list variable=\"target\" filter=\"[list[$:/StoryList]first[]]\">\n<$action-navigate $to=<<target>>/>\n</$list>\n{{$:/themes/telmiger/navigator/icons/to-top}}\n</$button>",
            "title": "$:/themes/telmiger/navigator/ui/Buttons/to-top",
            "modifier": "Thomas Elmiger",
            "modified": "20190201222537288",
            "creator": "Thomas Elmiger",
            "created": "20160923195909375"
        },
        "$:/core/ui/TopBar/menu": {
            "text": "",
            "title": "$:/core/ui/TopBar/menu",
            "modifier": "Thomas Elmiger",
            "modified": "20190203202106927",
            "creator": "Thomas Elmiger",
            "created": "20190203202056395"
        },
        "$:/themes/telmiger/navigator/styles/static.css": {
            "created": "20190302143847671",
            "creator": "Thomas Elmiger",
            "text": "\\rules except bold underline strikethrough subscript superscript italic dash list\n\n/* ** $:/plugins/telmiger/bricks/media/screen-sizes.css ** */\n\n.tc-page-container .not-small-screen-only, .tc-page-container .medium-screen-only, .tc-page-container .large-screen-only { display: none; } @media (min-width: 28rem) { .tc-page-container .not-small-screen-only { display: initial; } .tc-page-container .small-screen-only, .tc-page-container .medium-screen-only, .tc-page-container .large-screen-only { display: none; } } @media (min-width: 42rem) { .tc-page-container .medium-screen-only { display: initial; } .tc-page-container .small-screen-only, .tc-page-container .not-small-screen-only, .tc-page-container .large-screen-only { display: none; } } @media (min-width: 77rem) { .tc-page-container .large-screen-only { display: initial; } .tc-page-container .small-screen-only, .tc-page-container .not-small-screen-only, .tc-page-container .medium-screen-only { display: none; } }\n\n/* ** $:/plugins/telmiger/bricks/page-container.css ** */\n\n.tc-page-container-wrapper { max-width: 100vw; overflow: scroll; } .tc-page-container-wrapper > * { max-width: 100vw; overflow: scroll; }\n\n/* ** $:/plugins/telmiger/bricks/simple-search/adapt.css ** */\n\nbody .tc-search-drop-down .tc-search-results a.tc-tiddlylink:hover { color: rgb(232, 232, 232); }\n\n/* ** $:/plugins/telmiger/ColourManager/bricks.css ** */\n\n.css-test { display: flex; } .padding-no { padding: 0; } .listreveal-open table { margin: 0; width: 100%; } .listreveal-open table th, .listreveal-open table td { padding: 0.5rem 0 0.5rem 0.5rem; } .listreveal-open .css-test { padding: 0.25rem 0.5rem; } th.te-60-p, td.te-60-p { width: 60%; } input[type=color] { margin-top: .33rem; vertical-align: bottom; } .tc-tiddler-body .todo-now h2, .tc-tiddler-body .todo-done h2 { display: flex; margin-top: 0; justify-content: space-between; } .tc-tiddler-body .todo-done h2 { margin-top: 3rem; font-weight: 300; }\n\n/* ** Dropdown items ** (c) Thomas Elmiger **\n*/\n\n/* block dropdown */\n\n.tc-block-dropdown a { padding-top: .125rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; margin-bottom: 0; line-height: 1.25; display: block; width: 100%; }\n\n.tc-block-dropdown a:hover { color: rgb(245, 245, 245); background-color: rgb(136, 206, 166); text-decoration: none; }\n\n/* sidebar tagpill */\n\n.tc-sidebar-lists .tc-tag-list-item, .tc-sidebar-lists .tc-drop-down { width: 100%; max-width: 100%; }\n\n.tc-sidebar-lists .tc-tag-list-item a.tc-tiddlylink { padding-top: .125rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; margin-bottom: 0; line-height: 1.25; display: block; width: 100%; font-size: .875rem; color: black; overflow-wrap: break-word; max-width: 100%; }\n\n/* other, tagpill */\n\n.tc-drop-down .tc-dropdown-item, .tc-block-dropdown .tc-dropdown-item { color: rgb(115, 115, 115); }\n\n.tc-drop-down .tc-dropdown-item-plain, .tc-block-dropdown .tc-dropdown-item, .tc-block-dropdown .tc-dropdown-item-plain .tc-drop-down .tc-dropdown-item { padding-top: .25rem; padding-bottom: .25rem; padding-right: 1rem; padding-left: .5rem; }\n\n.tc-drop-down a, .tc-drop-down button, .tc-drop-down a.tc-tiddlylink, .tc-drop-down a.tc-tiddlylink-external { padding-top: .125rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; margin-bottom: 0; line-height: 1.25; display: block; width: 100%; }\n\n/* color, hover-color */\n\n.tc-drop-down a, .tc-drop-down button, .tc-drop-down a.tc-tiddlylink, .tc-drop-down a.tc-tiddlylink-external { color: black; }\n\n.tc-drop-down button svg.tc-image-button, .tc-drop-down a svg.tc-image-button { fill: black; }\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button, .tc-sidebar-lists .tc-tag-list-item a.tc-tiddlylink:hover { color: rgb(104, 104, 104); background-color: rgba(255, 255, 255, 0.5); text-decoration: none; }\n\n.tc-drop-down button.tc-btn-invisible:hover svg.tc-image-button { fill: rgb(168, 168, 168); }\n\n/* sidebar search */\n\n.tc-search-drop-down .tc-search-results a.tc-tiddlylink { padding-top: .125rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; margin-bottom: 0; line-height: 1.25; display: block; width: 100%; }\n\n.tc-search-drop-down .tc-search-results a.tc-tiddlylink:hover { color: rgb(168, 168, 168); }\n\n/* advanced search */\n\n.tc-advanced-search .tc-edit-type-dropdown a.tc-tiddlylink-missing { padding-top: .125rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; margin-bottom: 0; line-height: 1.25; display: block; width: 100%; color: black; }\n\n.tc-advanced-search .tc-edit-type-dropdown a.tc-tiddlylink-missing:hover { color: rgb(168, 168, 168); background-color: rgba(255, 255, 255, 0.5); }\n\n/* ** $:/themes/telmiger/bricks/000-base.css ** */\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock html { -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; } html, body, div, article, section, main, footer, header, form, fieldset, legend, pre, code, p, a, h1, h2, h3, h4, h5, h6, ul, ol, li, dl, dt, dd, textarea, input[type=\"email\"], input[type=\"number\"], input[type=\"password\"], input[type=\"search\"], input[type=\"tel\"], input[type=\"text\"], input[type=\"url\"], .border-box { box-sizing: border-box; max-width: 100%; } html { text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } html:-webkit-full-screen { background-color: rgb(245, 245, 245); } body { line-height: 1.5; font-family: 'helvetica neue', helvetica, sans-serif; font-family: \"Helvetica Neue\", Helvetica, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"; -moz-tab-size: 3; tab-size: 3; } body.tc-body { word-wrap: break-word; overflow-wrap: break-word; color: rgb(13, 13, 13); fill: rgb(13, 13, 13); background-color: rgb(245, 245, 245); } a { overflow-wrap: break-word; word-wrap: break-word; display: inline-block; vertical-align: top; } @media (min-width: 28rem) { a { display: unset; vertical-align: unset; } } pre { overflow-x: auto; overflow-y: hidden; overflow: scroll; } pre, code { font-family: monaco, Consolas, monospace; border-radius: .25rem; white-space: pre-wrap; } pre { display: block; word-break: normal; word-wrap: break-word; padding-top: .25rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; border-style: solid; border-width: 1px; border-color: rgba(0,0,0,.2); background-color: rgba(0,0,0,0.08); } code { padding-left: .25rem; padding-right: .25rem; border-style: solid; border-width: 1px; border-color: rgba(0,0,0,0.08); color: #e7040f; background-color: rgba(0,0,0,0.03); } pre > code { border-style: none; border-width: 0; padding: 0; background-color: transparent; color: inherit; } dl dt { font-weight: bold; margin-top: 6px; } hr { height: 1px; margin-top: 2rem; margin-bottom: 2rem; border: none; background-color: rgb(80, 150, 110); } .tc-drop-down hr { margin-bottom: 0.5em; margin-top: 0.5em; } .tc-muted { color: rgb(115, 115, 115); } .tc-sidebar-scrollable .tc-muted { color: rgb(150, 150, 150); } .tc-icon-wrapper > svg, .tc-image-button, .tc-image-button svg { height: 1em; width: 1em; } .tc-tiddler-frame img, .tc-tiddler-frame svg, .tc-tiddler-frame canvas, .tc-tiddler-frame embed, .tc-tiddler-frame iframe { max-width: 100%; } .tc-tiddler-body > embed, .tc-tiddler-body > iframe { width: 100%; height: 600px; } .tc-file-input-wrapper { position: relative; overflow: hidden; display: inline-block; vertical-align: middle; } .tc-file-input-wrapper input[type=file] { position: absolute; top: 0; left: 0; right: 0; bottom: 0; font-size: 999px; max-width: 100%; max-height: 100%; filter: alpha(opacity=0); opacity: 0; outline: none; background: white; cursor: pointer; display: inline-block; } .tc-droppable > .tc-droppable-placeholder { display: none; }\n\n/* ** $:/themes/telmiger/bricks/001-page.css ** */\n\nbody { margin: 0; } .tc-page-container { } .tc-story-river { position: relative; padding: 0; } @media (min-width: 28rem) { .tc-story-river { padding: 1rem; } } @media (min-width: 42rem) { .tc-story-river { padding: 2rem; } } @media (min-width: 77rem) { .tc-story-river { margin-right: calc(26rem + 1rem); margin-left: auto; } } .tc-sidebar-header .tc-site-title { margin: 0; margin-top: 2rem; } .tc-site-subtitle { margin-bottom: 2rem; } .tc-sidebar-scrollable { position: fixed; top: 0; right: 0; bottom: 0; left: auto; z-index: 1500; width: auto; max-width: calc(100% - 2rem - 1rem); max-height: 100%; animation: inherit; box-shadow: -4px 4px 8px 0px rgba( 0, 0, 0, 0.4 ); } .tc-sidebar-header { margin-top: 0; overflow-y: auto; overflow-x: hidden; -webkit-overflow-scrolling: touch; } .tc-sidebar-header > .tc-reveal { width: calc(26rem - 2rem - .5rem); max-width: 100%; padding-top: .5rem; padding-bottom: 2rem; padding-left: 1rem; margin-bottom: 2rem; } @media (min-width: 28rem) { .tc-sidebar-header > .tc-reveal { width: 100%; padding-top: 1rem; padding-bottom: 2rem; padding-left: 1rem; margin-left: 1rem; } .tc-sidebar-scrollable { max-width: calc(100% - 4rem); } } @media (min-width: 42rem) { html[dir=\"rtl\"] .tc-sidebar-scrollable { right: auto; } .tc-sidebar-header > .tc-reveal { width: 26rem; } .tc-tiddler-frame { margin-right: calc(66vw - 26rem); } } @media (min-width: 77rem) { .tc-sidebar-header > .tc-reveal { padding-bottom: 4rem; margin-bottom: 4rem; } .tc-tiddler-frame { margin-right: auto; margin-left: auto; } }\n\n/* ** $:/themes/telmiger/bricks/010-fonts.css ** */\n\n.tc-site-title, .tc-site-title a.tc-tiddlylink { font-weight: 500; font-size: 2.25rem; font-variant: small-caps; color: rgb(80, 150, 110); } .tc-subtitle { font-size: .875rem; font-weight: 300; color: rgb(110, 110, 110); } .tc-titlebar { font-weight: 300; color: rgb(64, 120, 88); } .tc-tiddler-missing .tc-title { font-style: italic; font-weight: normal; } .tc-titlebar .tc-title, .tc-tiddler-title-icon { font-weight: 300; font-size: 1.5rem; line-height: 1.25; vertical-align: bottom; } .tc-system-title-prefix,.tc-tiddler-title-icon svg { color: rgb(115, 115, 115); fill: rgb(89, 166, 122); } .tc-titlebar.tc-edit-texteditor { font-size: 1.5rem; line-height: 1.25; } h1, h2, h3, h4, h5, h6 { margin-top: 0; line-height: 1.25; } .tc-tiddler-body h1 { font-size: 1.875rem; margin-bottom: 2rem; } .tc-tiddler-body h2 { font-size: 1.5rem; margin-bottom: 2rem; } .tc-tiddler-body h3 { font-size: 1.25rem; margin-bottom: 1rem; } .tc-tiddler-body h4 { font-size: 1rem; margin-bottom: 1rem; } .tc-tiddler-body h5 { font-size: .875rem; margin-bottom: 1rem; font-family: georgia, times, serif; } .tc-tiddler-body h6 { font-size: .75rem; margin-bottom: .5rem; font-family: georgia, times, serif; } .tc-tiddler-body * + h1, section > h1:first-child { margin-top: 4rem; } .tc-tiddler-body *:not(h1) + h2, section > h2:first-child { margin-top: 4rem; } .tc-tiddler-body *:not(h2) + h3, section > h3:first-child { margin-top: 2rem; } .tc-tiddler-body *:not(h3) + h4, section > h4:first-child { margin-top: 2rem; } .tc-tiddler-body *:not(h4) + h5, section > h5:first-child { margin-top: 2rem; } .tc-tiddler-body *:not(h5) + h6, section > h6:first-child { margin-top: 2rem; } p { font-size: 1rem; line-height: 1.5; margin-top: 0; margin-bottom: .5rem; } @media (min-width: 28rem) { .tc-tiddler-body h1 { font-size: 2.25rem; } } @media (min-width: 42rem) { .tc-titlebar .tc-title, .tc-tiddler-title-icon { font-size: 2.25rem; vertical-align: baseline; } .tc-tiddler-title-icon { vertical-align: text-top; } .tc-tiddler-body h1 { font-size: 3rem; } .tc-tiddler-body h2 { font-size: 2.25rem; } .tc-tiddler-body h3 { font-size: 1.5rem; } .tc-tiddler-body h4 { font-size: 1.25rem; } .tc-tiddler-body h5 { font-size: 1rem; } .tc-tiddler-body h6 { font-size: .875rem; } } .tc-menu-list-count { font-weight: bold; } .tc-menu-list-subitem { padding-left: .5rem; } pre, code { font-family: ; }\n\n/* ** $:/themes/telmiger/bricks/components/chooser.css ** */\n\n.tc-chooser { padding: 0; border-bottom-style: solid; border-bottom-width: 1px; border-color: #00449e; } .tc-chooser-item { line-height: 1; border-top-style: solid; border-top-width: 1px; border-color: #00449e; } .tc-drop-down .tc-chooser-item { padding: .25rem; } .tc-page-controls .tc-chooser-item { border: none; } .tc-page-controls .tc-chooser-item a.tc-tiddlylink { background-color: transparent; } .tc-page-controls .tc-chooser-item:not(.tc-chosen) a.tc-tiddlylink:hover { background-color: rgba(255,255,255,.25); } .tc-chosen, .tc-chooser-item:hover { background-color: rgba(0,0,0,.1); border-color: rgba(0,0,0,.4); } .tc-chosen .tc-tiddlylink { cursor:default; } .tc-chosen > .tc-tiddlylink:before { position: relative; content: \" \"; background: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2245%22%20fill%3D%22%22%2F%3E%3C%2Fsvg%3E); background-size: .66rem; background-repeat: no-repeat; background-position-y: .33rem; } .tc-chooser-item .tc-tiddlylink { display: block; padding-top: .5rem; padding-bottom: .5rem; width: 100%; height: 100%; text-decoration: none; font-weight: 400; color: #00449e; background-color: rgb(245, 245, 245); background-color: transparent; } .tc-chooser-item a.tc-tiddlylink { } .tc-chooser-item a.tc-tiddlylink.tc-tiddlylink-resolves { font-weight: 300; background-color: rgba(0,0,0,.1); } .tc-chooser-item:not(.tc-chosen) a.tc-tiddlylink:hover { text-decoration: none; color: rgb(245, 245, 245); background-color: #00449e; } .tc-chooser-item:hover .tc-tiddlylink:hover { text-decoration: none; } .tc-drop-down .tc-chooser-item .tc-tiddlylink:hover { color: rgb(13, 13, 13); } .tc-chooser-item a.tc-tiddlylink > div { display: inline-block; vertical-align: bottom; } .tc-chooser-item a.tc-tiddlylink > div:first-child { width: 97%; padding-left: 3em; text-indent: -2.5em; padding-bottom: .5rem; } .tc-chooser-item svg, .tc-chooser-item img{ width: 1em; height: 1em; vertical-align: middle; } .tc-language-chooser .tc-image-button img { width: 2em; vertical-align: -0.15em; } .tc-drop-down .tc-chooser { border: none; } .tc-drop-down .tc-chooser .tc-swatches-horiz { font-size: 0.4em; padding-left: 1.2em; }\n\n/* ** $:/themes/telmiger/bricks/components/control-panel.css ** */\n\n.tc-control-panel table { width: 100%; } .tc-control-panel table input, .tc-control-panel table textarea { padding-left: .5rem; padding-right: .5rem; } .tc-control-panel td input + br { position: absolute; } .tc-control-panel td input + br + input[type=color] { margin-top: .25rem; vertical-align: bottom; } kbd { display: inline-block; padding-top: .25rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; font-size: 0.8em; line-height: 1.2; vertical-align: middle; border-radius: .25rem; box-shadow: inset 0 -1px 0 rgb(115, 115, 115); border-style: solid; border-width: 1px; border-color: rgb(115, 115, 115); color: rgb(13, 13, 13); background-color: rgb(245, 245, 245); }\n\n/* ** $:/themes/telmiger/bricks/components/control-panel/palettes.css ** */\n\n.tc-control-panel .tc-chooser-item a { padding-left: .25rem; } .tc-control-panel .tc-chosen > .tc-tiddlylink::before { margin-right: 4px; } .tc-swatches-horiz { width: 97%; text-align: right; } .tc-swatches-horiz .tc-swatch { display: inline-block; } .tc-swatch { width: 2rem; height: 2rem; margin-right: .25rem; border-style: solid; border-width: 1px; border-color: #888; } @media (min-width: 42rem) { .tc-chooser-item a.tc-tiddlylink > div:first-child { margin-right: 1rem; width: calc(100% - 22rem); min-width: 20rem; } .tc-swatches-horiz { width: 20.75rem; } .tc-swatch { margin-right: .5rem; } }\n\n/* ** $:/themes/telmiger/bricks/components/dropdown.css ** */\n\n.tc-btn-dropdown { text-align: left; } .tc-btn-dropdown svg, .tc-btn-dropdown img { height: 1em; width: 1em; } .tc-drop-down-wrapper { position: relative; } .tc-drop-down { width: 22rem; max-width: 66vw; border-style: solid; border-width: 1px; padding: .5rem; border-radius: .125rem; margin-top: .25rem; line-height: 1.5; text-shadow: none; border-color: rgb(115, 115, 115); background-color: rgb(232, 232, 232); } .tc-drop-down .tc-drop-down { margin-left: 1rem; } .tc-drop-down p { padding-left: .25rem; padding-right: .25rem; } .tc-drop-down svg { fill: rgb(115, 115, 115); height: 1em; width: 1em; margin-right: .5rem; } .tc-drop-down img { width: 1em; margin-right: .5rem; } .tc-drop-down .tc-prompt { padding-left: 1rem; padding-right: 1rem; } .tc-drop-down .tc-file-input-wrapper { width: 100%; } .tc-drop-down .tc-file-input-wrapper button { color: rgb(13, 13, 13); } .tc-block-dropdown-wrapper { position: relative; } .tc-block-dropdown { position: absolute; min-width: 220px; border-radius: .25rem; font-size: .875rem; padding-top: .25rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; margin-left: .5rem; z-index: 1000; text-shadow: none; border-style: solid; border-width: 1px; border-color: rgb(115, 115, 115); background-color: rgb(232, 232, 232); } .tc-page-controls .tc-drop-down { font-size: 1rem; max-width: 80%; }\n\n/* ** $:/themes/telmiger/bricks/components/forms.css ** */\n\ntextarea, input[type=text], input[type=search], input[type=\"\"], input:not([type]) { -webkit-appearance: none; -moz-appearance: none; font-size: 1rem; padding-left: .25rem; padding-right: .25rem; padding-bottom: .25rem; color: rgb(13, 13, 13); border-style: solid; border-width: 1px; border-color: #ccc; background-color: #F7F7F7; background-color: rgb(247, 247, 247); } textarea { padding-left: .5rem; padding-right: .5rem; padding-top: .25rem; padding-bottom: .25rem; } .te-edit-text { width: 100%; } textarea:focus, input[type=text]:focus, input[type=search]:focus, input[type=\"\"]:focus, input:not([type]):focus { background-color: #F7F7F7; background-color: rgb(252, 252, 252); } td textarea, td input[type=text], td input[type=search], td input[type=\"\"], td input:not([type]) { width: 100%; max-width: calc(100% - .5rem); } input[type=\"checkbox\"] { vertical-align: middle; }\n\n/* ** $:/themes/telmiger/bricks/components/messages.css ** */\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg { fill: #ff4136; color: #ff4136; } .tc-error { background: #f00; color: #fff; } .tc-body .tc-error-form { color: #fff; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); background-color: rgb(255, 75, 75); border: 8px solid rgb(255, 0, 0); margin-left: -33vw; width: 66vw; max-height: 80vh; overflow-y: scroll; } .tc-alerts { position: fixed; top: 0; left: 0; max-width: 500px; z-index: 20000; } .tc-alert { position: relative; margin: 2rem; padding: 1rem; border-style: solid; border-width: 1px; border-width: .25rem; border-color: rgb(232, 232, 125); background-color: rgb(255, 255, 102); } .tc-alert-toolbar { position: absolute; top: .5rem; right: .5rem; } .tc-alert-toolbar svg { fill: rgb(224, 82, 82); } .tc-alert-subtitle { color: rgb(224, 82, 82); font-weight: bold; } .tc-alert-highlight { color: rgb(255, 51, 51); } @media (min-width: 77rem) { .tc-static-alert { position: relative; } .tc-static-alert-inner { position: absolute; z-index: 100; } } .tc-static-alert-inner { padding: 0 .125rem .125rem 4rem; color: rgba(0,0,0,.3); } .tc-message-box { font-size: 1rem; line-height: 1.5; color: #00449e; padding-top: 1rem; padding-left: 1rem; padding-right: 1rem; padding-bottom: .5rem; margin-left: -1rem; margin-right: -1rem; margin-bottom: 1rem; max-width: calc(100% + 2rem); border-style: solid; border-width: 1px; border-color: #96ccff; background: #cdecff; } .tc-message-box svg { height: 1em; width: 1em; vertical-align: text-bottom; } .tc-notification { position: fixed; top: 1rem; right: 3rem; min-width: 12rem; max-width: 24rem; padding-top: .5rem; padding-bottom: .5rem; padding-left: 1rem; padding-right: 1rem; z-index: 10000; border-style: solid; border-width: 1px; border-radius: .25rem; color: rgb(242, 242, 242); border-color: rgb(242, 242, 242); background-color: rgb(150, 80, 120); } .tc-plugin-reload-warning { position: fixed; top: 0; right: 0; left: 0; padding-top: .5rem; background: rgb(255, 255, 102); text-align: center; z-index: 2000; } .tc-plugin-reload-warning button.tc-btn-invisible { position: relative; margin-left: 2rem; }\n\n/* ** $:/themes/telmiger/bricks/components/modal.css ** */\n\n.tc-modal-wrapper { position: fixed; overflow: auto; overflow-y: scroll; top: 0; right: 0; bottom: 0; left: 0; z-index: 1300; } .tc-modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; background-color: rgb(13, 13, 13); } .tc-modal { position: fixed; top: 1rem; left: 1rem; right: 1rem; border-style: solid; border-width: 1px; border-radius: .25rem; border-color: rgba(0,0,0,.5); background-color: rgb(245, 245, 245); } .tc-modal-header { padding-top: .5rem; padding-bottom: .5rem; padding-left: 1rem; padding-right: 1rem; border-bottom-style: solid; border-bottom-width: 1px; border-radius: .25rem; border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-bottom-color: rgba(0,0,0,.1); background-color: #f4f4f4; } .tc-modal-header h3 { margin: 0; line-height: 30px; } .tc-modal-header img, .tc-modal-header svg { height: 1em; width: 1em; } .tc-modal-body { overflow-y: auto; max-height: 60vh; padding: 1rem; } .tc-modal-footer { text-align: right; padding-top: .5rem; padding-bottom: .5rem; padding-left: 1rem; padding-right: 1rem; margin-bottom: 0; border-top-style: solid; border-top-width: 1px; border-radius: .25rem; border-top-left-radius: 0; border-top-right-radius: 0; border-top-color: rgba(0,0,0,.1); background-color: #f4f4f4; } @media (min-width: 42rem) { .tc-modal { top: 4rem; right: 20%; left: auto; width: 60%; } } @media (min-width: 77rem) { .tc-modal { top: 8rem; right: 25%; left: auto; width: 50%; border-radius: .5rem; } .tc-modal-header { padding-left: 2rem; padding-right: 2rem; border-radius: .5rem; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .tc-modal-body { padding: 2rem; } .tc-modal-footer { padding-left: 2rem; padding-right: 2rem; border-radius: .5rem; border-top-left-radius: 0; border-top-right-radius: 0; } }\n\n/* ** $:/themes/telmiger/bricks/components/page-controls.css ** */\n\n.tc-page-controls { font-size: 1.5rem; line-height: 1.5; margin-bottom: 1rem; } .tc-page-controls button { margin-right: 1rem; } .tc-page-controls button.tc-selected svg { fill: rgb(227, 227, 227); } .tc-page-controls button.tc-selected:hover svg { fill: rgb(150, 150, 150); } .tc-page-controls a.tc-tiddlylink:hover { text-decoration: none; } .tc-page-controls img { width: 1em; } .tc-page-controls svg { fill: rgb(150, 150, 150); } .tc-page-controls button:hover svg, .tc-page-controls a:hover svg { fill: rgb(227, 227, 227); }\n\n/* ** $:/themes/telmiger/bricks/components/plugin-info.css ** */\n\n.tc-plugin-info { display: block; border-style: solid; border-width: 1px; border-color: rgb(115, 115, 115); margin-bottom: 1rem; padding: .25rem; background-colour: rgb(245, 245, 245); } .tc-plugin-info-disabled { background: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px); background: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px); } .tc-plugin-info-disabled:hover { background: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px); background: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px); } a.tc-tiddlylink.tc-plugin-info:hover { text-decoration: none; background-color: rgb(80, 150, 110); color: rgb(245, 245, 245); fill: rgb(13, 13, 13); } a.tc-tiddlylink.tc-plugin-info:hover .tc-plugin-info > .tc-plugin-info-chunk > svg { fill: rgb(13, 13, 13); } .tc-plugin-info-chunk { display: inline-block; vertical-align: middle; } .tc-plugin-info .tc-plugin-info-chunk h1 { font-size: 1rem; margin-top: .25rem; margin-bottom: .25rem; } .tc-plugin-info .tc-plugin-info-chunk h2 { font-size: .875rem; margin-top: 0; margin-bottom: .25rem; } .tc-plugin-info .tc-plugin-info-chunk h2 div { font-size: .875rem; margin-bottom: .25rem; } .tc-plugin-info .tc-btn-dropdown { margin-left: .5rem; margin-right: .5rem; } .tc-plugin-info:hover .tc-btn-dropdown svg { fill: rgb(245, 245, 245); } .tc-plugin-info > .tc-plugin-info-chunk > img, .tc-plugin-info > .tc-plugin-info-chunk > svg { width: 2em; height: 2em; fill: rgb(115, 115, 115); padding-right: 1rem; } .tc-plugin-info:hover > .tc-plugin-info-chunk > img, .tc-plugin-info:hover > .tc-plugin-info-chunk > svg { width: 2em; height: 2em; fill: rgb(13, 13, 13); } .tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > img, .tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > svg { height: 1em; width: 1em; } .tc-plugin-info-dropdown { margin-top: -1rem; border-style: solid; border-width: 1px; border-color: rgb(115, 115, 115); } .tc-control-panel .tc-plugin-info-dropdown { margin-bottom: 1rem; } .tc-plugin-info-dropdown-message { background: #cdecff; padding-top: 1rem; padding-bottom: 1rem; padding-left: 2rem; padding-right: 2rem; font-size: 2.25rem; font-weight: bold; } .tc-plugin-info-dropdown-body { padding: 1rem; }\n\n/* ** $:/themes/telmiger/bricks/components/search.css ** */\n\n.tc-search a svg { width: 1.2em; height: 1.2em; vertical-align: middle; } .tc-search button svg, .tc-search a svg { fill: rgb(150, 150, 150); padding-left: .25rem; padding-right: .25rem; } .tc-search button:hover svg, .tc-search a:hover svg { fill: rgb(227, 227, 227); } .tc-search + .tc-block-dropdown-wrapper { margin-left: -1rem; } .tc-block-dropdown.tc-search-drop-down { position: relative; padding-left: .5rem; padding-right: .5rem; margin-right: 1rem; max-width: 100%; } .tc-sidebar-lists .tc-search { margin-bottom: 1rem; } .tc-sidebar-scrollable input[type=search] { width: 12rem; } .tc-sidebar-lists .tc-block-dropdown { background-color: rgb(26, 26, 26); }\n\n/* ** $:/themes/telmiger/bricks/components/search/advanced.css ** */\n\n.tc-advanced-search input { width: calc( 100% / 1.5 ); margin-right: .5rem; } .tc-advanced-search .tc-search button { border-radius: .25rem; border-style: none; border-width: 0; padding-top: .25rem; padding-bottom: .25rem; min-width: 2rem; text-decoration: none; font-weight: 600; } .tc-advanced-search .tc-popup { position: relative !important; left: initial !important; top: initial !important; } .tc-advanced-search .tc-block-dropdown-wrapper { position: absolute; left: -16rem; } @media (min-width: 28rem) { .tc-advanced-search .tc-block-dropdown-wrapper { left: 0; transform: translateX(-19rem); } } .tc-advanced-search .tc-block-dropdown button:hover { color: ; border-color: ; } .tc-advanced-search .tc-block-dropdown button:hover svg, .tc-advanced-search .tc-block-dropdown a:hover svg { fill: #555; } .tc-advanced-search .tc-block-dropdown-wrapper .tc-block-dropdown { min-width: 18rem; } .tc-advanced-search .tc-block-dropdown .tc-btn { margin: .5rem; border-style: solid; border-width: 1px; }\n\n/* ** $:/themes/telmiger/bricks/components/sidebar.css ** */\n\n.tc-sidebar-scrollable { background-color: #181818; background-color: #181818; } .tc-sidebar-header { color: rgb(255, 255, 255); fill: rgb(255, 255, 255); } .tc-sidebar-header .tc-sidebar-lists p { margin-bottom: .25rem; } .a11y-label { color: rgba(0,0,0,.3); } .tc-sidebar-lists .tc-tab-set { margin-right: .5rem; } .tc-sidebar-lists .tc-tab-content { padding-top: 1rem; background-color: #181818; } .tc-sidebar-lists .tc-tab-content p { font-size: .875rem; } .tc-sidebar-lists .tc-tab-buttons button { font-size: .875rem; line-height: 1; margin-top: .125rem; padding-top: .125rem; background-color: rgb(70, 70, 70); color: rgba(255,255,255,.8); border-color: rgba(255, 255, 255, 0.8); max-height: 1.66rem; }\n\n.tc-sidebar-lists .tc-tab-buttons button:not(.tc-tab-selected) { position: relative; }\n\n.tc-sidebar-lists .tc-tab-buttons button:not(.tc-tab-selected)::before { background-color: #181818; content: \"\"; position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; border-radius: .25rem; border-bottom-left-radius: 0; border-bottom-right-radius: 0; }\n\n.tc-sidebar-lists .tc-tab-buttons button:not(.tc-tab-selected):hover::before, .tc-sidebar-lists .tc-tab-buttons button:not(.tc-tab-selected):focus::before { opacity: .35; } .tc-sidebar-lists .tc-tab-divider { border-top-style: solid; border-top-width: 1px; border-color: rgba(255, 255, 255, 0.8); margin-right: 4rem; height: 1px; } .tc-sidebar-lists .tc-tab-buttons.tc-vertical button { border-color: rgba(255, 255, 255, 0.8); background-color: rgb(70, 70, 70); } .tc-sidebar-lists .tc-tab-content.tc-vertical { border-color: rgba(255, 255, 255, 0.8); } .tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected { background-color: #181818; color: rgba(255,255,255,.8); color: rgba(255,255,255,.8); border-color: rgba(255, 255, 255, 0.8); border-bottom-color: #181818; } .tc-sidebar-lists .tc-tab-buttons.tc-vertical button.tc-tab-selected { border-color: rgba(255, 255, 255, 0.8); border-right-color: #181818; background-color: #181818; } .tc-menu-list-item { margin: 0; } .tc-menu-list-item a, .tc-menu-list-item .tc-btn-invisible { padding-bottom: .25rem; } .tc-menu-list-item button { font-style: italic; }\n\n/* ** $:/themes/telmiger/bricks/components/sidebar/tab-content.css ** */\n\n.tc-sidebar-lists .tc-timeline { font-weight: bold; } .tc-sidebar-lists .tc-tab-content label { width: 1.25rem; padding-top: .2rem; margin-right: .25rem; margin-left: -.25rem; } .tc-sidebar-lists .tc-tab-content div div p i { line-height: 1.25; display: inline-block; width: calc(100% - 1.5rem); margin-left: 1.5rem; }\n.tc-sidebar-lists .tc-drop-down button { color: black; }\n\n/* ** $:/themes/telmiger/bricks/components/tabs.css ** */\n\n.tc-tab-buttons { padding-top: 1rem; font-size: .875rem; } .tc-tab-buttons button { position: relative; font-size: .875rem; cursor: pointer; color: rgb(13, 13, 13); line-height: 1.5; padding-top: .25rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; margin-bottom: 0; margin-left: 0; margin-right: 0; font-weight: 300; background: inherit; background-color: rgb(225, 225, 225); border-style: solid; border-width: 1px; border-radius: .25rem; border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-color: rgb(80, 150, 110); height: 2rem; }\n\n.tc-tab-buttons button:not(.tc-tab-selected) { position: relative; }\n\n.tc-tab-buttons button:not(.tc-tab-selected)::before { background-color: rgb(245, 245, 245); content: \"\"; position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; border-radius: .25rem; border-bottom-left-radius: 0; border-bottom-right-radius: 0; }\n\n.tc-tab-buttons button:not(.tc-tab-selected):hover::before, .tc-tab-buttons button:not(.tc-tab-selected):focus::before { opacity: .35; } .tc-sidebar-lists .tc-tab-buttons button { margin-right: .125rem; } .tc-tab-divider { border-top-style: solid; border-top-width: 1px; height: 1px; margin-top: 1px; border-color: rgb(80, 150, 110); } .tc-tab-content { padding-top: 2rem; } .tc-tab-set:not(.tc-vertical) { margin-left: -.5rem; max-width: calc(100vw - 1rem) } .tc-tab-set:not(.tc-vertical) > .tc-tab-buttons:first-of-type { margin-left: .5rem; } .tc-tab-set:not(.tc-vertical) > .tc-tab-buttons button { margin-top: -2px; margin-bottom: -2px; margin-left: .25rem; } .tc-tab-set:not(.tc-vertical) > .tc-tab-buttons button:first-of-type { margin-left: 0; } .tc-tab-set:not(.tc-vertical) > .tc-tab-content { padding-left: .5rem; } .tc-tab-content.tc-vertical { display: inline-block; vertical-align: top; padding-top: 1rem; padding-left: 1rem; border-left-style: solid; border-left-width: 1px; border-color: rgb(80, 150, 110); -webkit-flex: 1 0 70%; flex: 1 0 70%; max-width: 75%; } .tc-tab-divider.tc-vertical { display: none; } .tc-tab-set.tc-vertical { display: -webkit-flex; display: flex; } .tc-tab-buttons.tc-vertical { z-index: 100; display: block; vertical-align: top; text-align: right; margin-left: 0; margin-right: -1px; max-width: 33%; -webkit-flex: 0 0 auto; flex: 0 0 auto; } .tc-tab-buttons.tc-vertical button, .tc-tab-buttons.tc-vertical button.tc-tab-selected { display: block; width: 100%; margin-top: 0; margin-right: 0; margin-bottom: .25rem; text-align: right; border-style: solid; border-width: 1px; border-radius: .25rem; border-top-right-radius: 0; border-bottom-right-radius: 0; border-color: rgb(80, 150, 110); background-color: rgb(225, 225, 225); } .tc-tab-buttons button.tc-tab-selected { color: rgb(13, 13, 13); border-style: solid; border-width: 1px; border-color: rgb(80, 150, 110); background-color: rgb(245, 245, 245); border-bottom-color: rgb(245, 245, 245); } .tc-tiddler-info .tc-tab-buttons button.tc-tab-selected { border-bottom-style: solid; border-bottom-width: 1px; border-bottom-color: #f8f8f8; background-color: #f8f8f8; } .tc-tab-buttons.tc-vertical button.tc-tab-selected { border-right-color: rgb(245, 245, 245); background-color: rgb(245, 245, 245); } .tc-tab-buttons button.tc-tab-selected { cursor: default; pointer-events: none; } .tc-drop-down-bullet { display: inline-block; width: 0.5em; } .tc-drop-down .tc-tab-contents a { padding: 0 0.5em 0 0.5em; } .tc-drop-down .tc-tab-buttons button { background-color: rgba(0,0,0,.1); } .tc-drop-down .tc-tab-set .tc-tab-buttons button { display: inline-block; width: auto; margin-bottom: 0px; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .tc-drop-down .tc-tab-buttons button.tc-tab-selected { border-bottom-style: solid; border-bottom-width: 1px; border-bottom-color: rgba(255,255,255,1); background-color: rgba(255,255,255,1); }\n\n/* ** $:/themes/telmiger/bricks/components/tags.css ** */\n\n.tc-tag-manager-table td { padding-top: .25rem; padding-bottom: .25rem; }\n\n.tc-tag-label { position: relative; }\n\n.tc-tag-label::before { background-color: #000; content: \"\"; position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; border-radius: 1rem; }\n\n.tc-tag-label:hover::before, .tc-tag-label:focus::before { opacity: .075; }\n\n.tc-edit-tags > .tc-tag-label { position: relative; }\n\n.tc-edit-tags > .tc-tag-label::before { background-color: #000; content: \"\"; position: absolute; top: 0; left: 0; width: calc(100% - 1.25rem); height: 100%; opacity: 0; border-top-right-radius: 0; border-bottom-right-radius: 0; }\n\n.tc-edit-tags > .tc-tag-label:hover::before, .tc-edit-tags > .tc-tag-label:focus::before { opacity: .075; } .tc-tags-wrapper { margin-bottom: .5rem; } .tc-tags-wrapper:empty { height: 33%; width: 4rem; border-bottom-style: solid; border-bottom-width: 1px; border-width: .25rem; border-bottom-color: rgb(80, 150, 110); } .tc-tags-wrapper:empty:before { content: \"\\00a0\"; } button.tc-tag-label, span.tc-tag-label, .tc-tab-content button.tc-tag-label.tc-untagged-label { display: inline-block; padding-top: .25rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; font-size: .75rem; font-weight: 400; color: rgb(242, 242, 242) !important; white-space: nowrap; line-height: 1; vertical-align: baseline; background-color: rgb(80, 150, 110); border-style: none; border-width: 0; border-radius: 1rem; } .tc-tag-list-item { position: relative; display: inline-block; max-width: 100%; } .tc-untagged-separator { width: 10rem; height: 1px; left: 0; margin-left: 0; border-style: none; border-width: 0; background: rgba(255, 255, 255, 0.8); } button.tc-tag-label.tc-untagged-label, .tc-tab-content button.tc-tag-label.tc-untagged-label { background-color: rgb(150, 80, 120); color: rgb(242, 242, 242); font-style: italic; } .tc-tag-label svg, .tc-tag-label img { vertical-align: text-bottom; height: 1em; width: 1em; } .tc-tag-manager-table .tc-tag-label { white-space: normal; } .tc-tag-manager-tag { width: 100%; }\n\n/* ** $:/themes/telmiger/bricks/components/tiddler-content.css ** */\n\n.tc-tiddler-title { margin-bottom: 1rem; } .tc-tiddler-body { padding-top: 2rem; } .tc-titlebar .tc-title { display: inline-block; margin: .5rem; margin-left: 0; } .tc-tiddler-title-icon { vertical-align: middle; } .tc-tiddler-title-icon svg { margin-right: .25rem; } .tc-titlebar img { height: 1em; } .tc-subtitle a { color: #000; display: block; } @media (min-width: 28rem) { .tc-subtitle { float: right; white-space: unset; } .tc-subtitle a { display: inline-block; } } .tc-tiddler-help { color: rgb(115, 115, 115); margin-top: .5rem; } .tc-tiddler-help a.tc-tiddlylink { color: rgb(89, 166, 122); } .tc-titlebar, .tc-tiddler-edit-title { overflow: hidden; } html body.tc-body.tc-single-tiddler-window { margin: 1em; background: rgb(245, 245, 245); } .tc-single-tiddler-window img, .tc-single-tiddler-window svg, .tc-single-tiddler-window canvas, .tc-single-tiddler-window embed, .tc-single-tiddler-window iframe { max-width: 100%; }\n\n/* ** $:/themes/telmiger/bricks/components/tiddler-controls.css ** */\n\n.tc-tiddler-frame .tc-tiddler-controls { display: block; width: 100%; text-align: right; font-size: 1.5rem; } .tc-tiddler-controls .tc-drop-down, .tc-tiddler-controls .tc-drop-down .tc-drop-down { font-size: 1.25rem; } .tc-tiddler-controls > span > button, .tc-tiddler-controls > span > span > button, .tc-tiddler-controls > span > span > span > button { vertical-align: baseline; margin-left: .5rem; } @media (min-width: 28rem) { .tc-tiddler-frame .tc-tiddler-controls { } .tc-tiddler-controls > span > button { margin-left: 1rem; } } @media (min-width: 42rem) { .tc-tiddler-frame .tc-tiddler-controls { font-size: 2.25rem; } .tc-tiddler-controls > span > button { margin-left: .5rem; } } .tc-tiddler-controls button svg, .tc-tiddler-controls button img { fill: rgb(143, 143, 143); } .tc-tiddler-controls button.tc-selected svg { fill: rgb(64, 64, 64); } .tc-tiddler-controls button.tc-btn-invisible:hover svg { fill: rgb(64, 64, 64); } .tc-tiddler-controls button svg.tc-image-info-button { fill: ; } .tc-tiddler-controls button svg.tc-image-edit-button { fill: ; } .tc-tiddler-controls button svg.tc-image-close-button { fill: ; } .tc-tiddler-controls button svg.tc-image-delete-button { fill: ; } .tc-tiddler-controls button svg.tc-image-cancel-button { fill: ; } .tc-tiddler-controls button svg.tc-image-done-button { fill: ; } .tc-tiddler-controls button svg.tc-image-button { height: 0.75em; }\n\n/* ** $:/themes/telmiger/bricks/components/tiddler-frameless.css ** */\n\n.tc-tiddler-frame { position: relative; padding: 1rem; margin-bottom: 2rem; background-color: rgb(245, 245, 245); } @media (min-width: 28rem) { .tc-tiddler-frame { padding: 2rem; } } @media (min-width: 42rem) { .tc-tiddler-frame { padding-left: 2rem; padding-right: 2rem; border-radius: .125rem; } .tc-tiddler-view-frame { max-width: 54rem; } } @media (min-width: 77rem) { .tc-tiddler-frame { padding-left: 4rem; padding-right: 4rem; height: auto; } .tc-tiddler-view-frame { width: 54rem; } }\n\n/* ** $:/themes/telmiger/bricks/components/tiddler-info-panel.css ** */\n\n.tc-tiddler-info { padding-top: 1rem; padding-bottom: 1rem; border-top-style: solid; border-top-width: 1px; border-bottom-style: solid; border-bottom-width: 1px; border-color: #dddddd; background-color: #f8f8f8; } .tc-tiddler-info p { margin-top: .25rem; margin-bottom: .25rem; } .tc-tiddler-frame .tc-tiddler-info .tc-tab-set { margin-left: 0; } .tc-tiddler-info .tc-tab-content { padding-left: .5rem; padding-right: .5rem; } .tc-tiddler-info .tc-tab-content p > label { padding-bottom: 1rem; display: inline-block; } .tc-tiddler-info .tc-tab-content p > label + button, .tc-tiddler-info .tc-tab-content p > label + span > button { position: absolute; margin-left: 1rem; } .tc-tiddler-info .tc-tab-content p > label + button .tc-btn-text, .tc-tiddler-info .tc-tab-content p > label + span > button .tc-btn-text { display: none; } .tc-tiddler-info .tc-tab-content p > i { position: absolute; margin-left: 4rem; line-height: 1; max-width: 20em; } .tc-view-field-table { width: 100%; } .tc-view-field-name { width: 1%; text-align: right; font-style: italic; font-weight: 200; } .tc-view-field-value { } @media (min-width: 28rem) { .tc-tiddler-info { margin-top: 0; margin-bottom: .25rem; padding-right: 1rem; padding-left: 2rem; } .tc-tiddler-frame .tc-tiddler-info .tc-tab-set { margin-left: -1rem; margin-right: 0; } } @media (min-width: 42rem) { .tc-tiddler-info { margin-top: 0; margin-bottom: 1rem; } }\n\n/* ** $:/themes/telmiger/bricks/components/tree-macro.css ** */\n\n.tc-tree div { padding-left: .5rem; } .tc-tree ol { list-style-type: none; padding-left: 0; margin-top: 0; } .tc-tree ol ol { padding-left: 1em; } .tc-tree button { color: #acacac; } .tc-tree svg { fill: #acacac; } .tc-tree span svg { width: 1em; height: 1em; vertical-align: baseline; } .tc-tree li span { color: lightgray; }\n\n/* ** $:/themes/telmiger/bricks/drafts-list.css ** */\n\n.tc-drafts-list { z-index: 2000; position: fixed; font-size: 0.8em; left: 0; bottom: 0; } .tc-drafts-list a.tc-tiddlylink { margin: 0 0.5em; padding: 4px 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid #ffffff; background: #ff0000; color: #ffffff; fill: #ffffff; } .tc-drafts-list a svg { width: 1em; height: 1em; margin-right: .25rem; vertical-align: text-bottom; }\n\n/* ** $:/themes/telmiger/bricks/edit/diffs.css ** */\n\n.tc-diff-equal { background-color: ; color: rgb(13, 13, 13); } .tc-diff-insert { background-color: #aaefad; color: rgb(13, 13, 13); } .tc-diff-delete { background-color: #ffc9c9; color: rgb(13, 13, 13); } .tc-diff-invisible { background-color: ; color: rgb(115, 115, 115); } .tc-diff-tiddlers th { text-align: right; background: rgb(245, 245, 245); font-weight: normal; font-style: italic; } .tc-diff-tiddlers pre { margin: 0; padding: 0; border: none; background: none; }\n\n/* ** $:/themes/telmiger/bricks/edit/editor-choosers.css ** */\n\n.tc-colour-chooser a { padding: 3px; width: 2em; height: 2em; vertical-align: middle; } .tc-image-chooser, .tc-colour-chooser { white-space: normal; } .tc-image-chooser a, .tc-colour-chooser a { display: inline-block; vertical-align: top; position: relative; } .tc-image-chooser a { padding: 2px; margin: 2px; width: 4em; height: 4em; border-style: solid; border-width: 1px; border-color: rgb(115, 115, 115); } .tc-image-chooser a:hover, .tc-colour-chooser a:hover { padding: 0; border-width: .125rem; border-style: solid; border-color: rgb(80, 150, 110); background: rgb(80, 150, 110); } .tc-image-chooser a svg, .tc-image-chooser a img { display: inline-block; width: auto; height: auto; max-width: 3.5em; max-height: 3.5em; position: absolute; top: 0; bottom: 0; left: 0; right: 0; }\n\n/* ** $:/themes/telmiger/bricks/edit/editor-toolbar.css ** */\n\n.tc-editor-toolbar { margin-top: .5rem; margin-bottom: .5rem; } .tc-editor-toolbar button { vertical-align: middle; background-color: rgba(0,0,0,0.08); fill: rgb(13, 13, 13); border-radius: .25rem; padding: .25rem; margin-top: .125rem; margin-bottom: .125rem; margin-right: 0; margin-left: .25rem; } .tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct { margin-left: .125rem; border-radius: .5rem; width: 1em; } .tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group { box-shadow: 1px 1px 2px rgb(64, 64, 64); } .tc-editor-toolbar button.tc-selected { background-color: rgb(80, 150, 110); } .tc-editor-toolbar button svg { width: 1.6em; height: 1.2em; } .tc-editor-toolbar button:hover, .tc-editor-toolbar .tc-text-editor-toolbar-more button:hover svg { background-color: rgb(64, 64, 64); fill: rgb(245, 245, 245); } .tc-editor-toolbar .tc-text-editor-toolbar-more { font-size: .875rem; padding-left: 1rem; margin-left: 2rem; } .tc-editor-toolbar .tc-text-editor-toolbar-more .tc-reveal { line-height: 1.25; margin-bottom: .5rem; } .tc-editor-toolbar .tc-text-editor-toolbar-more button { display: inline-block; position: absolute; left: 1rem; padding: .25rem; width: auto; } .tc-editor-toolbar .tc-search-results { padding: 0; }\n\n/* ** $:/themes/telmiger/bricks/edit/editor.css ** */\n\niframe.tc-edit-texteditor { background-color: transparent; } .tc-tiddler-frame .tc-edit-texteditor { width: 100%; margin: 4px 0 0 0; } .tc-tiddler-frame textarea.tc-edit-texteditor, .tc-tiddler-frame iframe.tc-edit-texteditor { padding: .5rem; background-color: #F7F7F7; line-height: 1.3em; -webkit-appearance: none; -moz-appearance: none; } .tc-tiddler-frame input.tc-edit-texteditor { border-style: none; border-width: 0; border-left-style: solid; border-left-width: 1px; border-width: .5rem; border-bottom-style: solid; border-bottom-width: 1px; padding: .25rem; line-height: 1.25; background-color: #F7F7F7; border-color: #ccc; }\n\n/* ** $:/themes/telmiger/bricks/edit/preview-fonts.css ** */\n\n.tc-tiddler-preview-preview h1 { font-size: 1.875rem; margin-bottom: 2rem; } .tc-tiddler-preview-preview h2 { font-size: 1.5rem; margin-bottom: 2rem; } .tc-tiddler-preview-preview h3 { font-size: 1.25rem; margin-bottom: 1rem; } .tc-tiddler-preview-preview h4 { font-size: 1rem; margin-bottom: 1rem; } .tc-tiddler-preview-preview h5 { font-size: .875rem; margin-bottom: 1rem; font-family: georgia, times, serif; } .tc-tiddler-preview-preview h6 { font-size: .75rem; margin-bottom: .5rem; font-family: georgia, times, serif; } .tc-tiddler-preview-preview * + h1, section > h1:first-child { margin-top: 4rem; } .tc-tiddler-preview-preview *:not(h1) + h2, section > h2:first-child { margin-top: 4rem; } .tc-tiddler-preview-preview *:not(h2) + h3, section > h3:first-child { margin-top: 2rem; } .tc-tiddler-preview-preview *:not(h3) + h4, section > h4:first-child { margin-top: 2rem; } .tc-tiddler-preview-preview *:not(h4) + h5, section > h5:first-child { margin-top: 2rem; } .tc-tiddler-preview-preview *:not(h5) + h6, section > h6:first-child { margin-top: 2rem; }\n\n/* ** $:/themes/telmiger/bricks/edit/tiddler-manager.css ** */\n\n.tc-manager-wrapper { } .tc-manager-controls { } .tc-manager-control { margin-top: .5rem; margin-bottom: .5rem; } .tc-manager-list { width: 100%; border-top-style: solid; border-top-width: 1px; border-right-style: solid; border-right-width: 1px; border-left-style: solid; border-left-width: 1px; border-color: rgb(115, 115, 115); } .tc-manager-list-item { } .tc-manager-list-item-heading { display: block; width: 100%; text-align: left; border-bottom-style: solid; border-bottom-width: 1px; border-color: rgb(115, 115, 115); padding: 3px; } .tc-manager-list-item-heading-selected { font-weight: bold; color: rgb(245, 245, 245); fill: rgb(245, 245, 245); background-color: rgb(13, 13, 13); } .tc-manager-list-item-heading:hover { background: rgb(80, 150, 110); color: rgb(245, 245, 245); } .tc-manager-list-item-content { display: flex; } .tc-manager-list-item-content-sidebar { flex: 1 0; background: #F7F7F7; border-right-style: solid; border-right-width: 1px; border-bottom-style: solid; border-bottom-width: 1px; border-width: .25rem; border-color: rgb(115, 115, 115); white-space: nowrap; } .tc-manager-list-item-content-item-heading { display: block; width: 100%; text-align: left; background: rgb(115, 115, 115); text-transform: uppercase; font-size: .875rem; font-weight: bold; padding-top: .5rem; padding-bottom: .5rem; } .tc-manager-list-item-content-item-body { padding-left: .5rem; padding-right: .5rem; } .tc-manager-list-item-content-item-body > pre { margin-top: .5rem; margin-bottom: .5rem; border: none; background: inherit; } .tc-manager-list-item-content-tiddler { flex: 3 1; border-right-style: solid; border-right-width: 1px; border-bottom-style: solid; border-bottom-width: 1px; <.bl> border-width: .25rem; border-color: rgb(115, 115, 115); } .tc-manager-list-item-content-item-body > table { border: none; padding: 0; margin: 0; } .tc-manager-list-item-content-item-body > table td { border: none; } .tc-manager-icon-editor > button { width: 100%; } .tc-manager-icon-editor > button > svg, .tc-manager-icon-editor > button > button { width: 100%; height: auto; }\n\n/* ** $:/themes/telmiger/bricks/edit/tiddler.css ** */\n\n.tc-tiddler-frame.tc-tiddler-edit-frame { border-style: solid; border-width: 1px; margin-left: .25rem; margin-right: .25rem; width: auto; border-color: #ff4136; } @media (min-width: 28rem) { .tc-tiddler-frame.tc-tiddler-edit-frame { margin-right: 0; margin-left: auto; } } @media (min-width: 42rem) { .tc-tiddler-frame.tc-tiddler-edit-frame { margin-right: calc(66vw - 26rem); } } @media (min-width: 77rem) { .tc-tiddler-frame.tc-tiddler-edit-frame { width: calc(100% - 1.5rem); max-width: calc(54rem + 54rem); margin-left: 1rem; margin-right: 1rem; } .tc-keyboard { width: 100%; } } .tc-tiddler-edit-frame em.tc-edit { color: rgb(115, 115, 115); font-style: normal; } .tc-edit-type-dropdown a.tc-tiddlylink-missing { font-style: normal; } input.tc-titlebar.tc-edit-texteditor { margin-bottom: 1rem; } .tc-edit-tags { margin-bottom: 1rem; background-color: #F7F7F7; } .tc-edit-add-tag { display: inline-block; margin-left: .5rem; padding-left: .5rem; } .tc-edit-add-tag .tc-add-tag-name input { width: 50%; } .tc-edit-add-tag .tc-keyboard { display:inline; } .tc-edit-tags .tc-tag-label { display: inline-block; } .tc-edit-tags-list { margin-top: 1rem; margin-bottom: 1rem; margin-left: 0; margin-right: 0; } .tc-tag-label .tc-remove-tag-button { padding-left: .25rem; color: rgb(242, 242, 242); } .tc-tiddler-preview { } .tc-tiddler-preview-preview { float: right; width: 49%; border: 1px solid #ccc; margin: 4px 0 0 3px; padding: .5rem; } .tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor { width: 49%; } .tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor { max-width: 49%; } .tc-type-selector { margin-bottom: .5rem; fill: rgb(143, 143, 143); } .tc-type-selector button:hover svg { fill: rgb(64, 64, 64); } .tc-edit-fields { width: 100%; } .tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td { border-style: none; border-width: 0; padding: .25rem; } .tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) { background-color: #f0f4f0; } .tc-edit-fields > tbody > .tc-edit-field:nth-child(even) { background-color: #e0e8e0; } .tc-edit-field-name { text-align: right; } .tc-edit-field-value input { width: 100%; } .tc-edit-field-remove svg { height: 1em; width: 1em; vertical-align: middle; fill: rgb(143, 143, 143); } .tc-edit-field-remove button:hover svg { fill: rgb(64, 64, 64); } .tc-edit-field-add-name { display: inline-block; min-width: 15%; max-width: 30%; margin-right: 1rem; } .tc-edit-field-add-value { display: inline-block; min-width: 38%; max-width: 50%; margin-right: 1rem; } .tc-edit-field-add-button { display: inline-block; } .tc-tiddler-frame .tc-binary-warning { width: 100%; height: 5em; text-align: center; padding: 3em 3em 6em 3em; background: rgb(255, 255, 102); border: 1px solid rgb(232, 232, 125); } canvas.tc-edit-bitmapeditor { border: 6px solid rgba(255,255,255,1); cursor: crosshair; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; margin-top: 6px; margin-bottom: 6px; } .tc-edit-bitmapeditor-width { display: block; } .tc-edit-bitmapeditor-height { display: block; }\n\n/* ** $:/themes/telmiger/bricks/elements/blockquotes.css ** */\n\nblockquote, q { quotes: \"\\201C\"\"\\201D\"\"\\2018\"\"\\2019\"; } blockquote { border-left-style: solid; border-left-width: 1px; border-width: .5rem; border-color: rgb(89, 166, 122); padding-left: 1rem; margin-left: 1rem; } blockquote cite { display: inline-block; padding-top: .5rem; } blockquote.tc-big-quote { font-family: Georgia, serif; position: relative; background: rgba(0,0,0,0.08); border-style: none; border-width: 0; border-radius: 1rem; margin-top: 2rem; margin-bottom: 2rem; margin-left: 1rem; margin-right: 1rem; padding: 1rem; padding-left: 2rem; max-width: 38rem; } blockquote.tc-big-quote p { font-size: 1rem; max-width: 30em; } blockquote.tc-big-quote cite:before { content: \"\\2014 \\2009\"; } blockquote.tc-big-quote:before { position: absolute; left: -1.2rem; top: 2.4rem; color: rgb(89, 166, 122); content: open-quote; font-size: 6rem; line-height: 0.1em; } blockquote.tc-big-quote:after { position: absolute; right: -1.2rem; bottom: -.6rem; font-family: Georgia, serif; color: rgb(89, 166, 122); content: close-quote; font-size: 6rem; line-height: 0.1em; } @media (min-width: 28rem) { blockquote.tc-big-quote { border-style: none; border-width: 0; border-radius: 1rem; margin-top: 2rem; margin-bottom: 2rem; margin-left: 4rem; margin-right: 4rem; padding: 1rem; padding-left: 2rem; } blockquote.tc-big-quote p { font-size: 1.25rem; } blockquote.tc-big-quote:before { font-size: 9.5rem; left: -4.25rem; top: 3.25rem; } blockquote.tc-big-quote:after { font-size: 9.5rem; right: -4.25rem; bottom: -1.75rem; } }\n\n/* ** $:/themes/telmiger/bricks/elements/buttons.css ** */\n\nhtml button { cursor: pointer; font-size: 1em; color: rgb(13, 13, 13); background: rgba(0,0,0,0.08); border-color: rgba(255, 255, 255, 0.8); border-style: solid; border-width: 1px; border-radius: .25rem; } button:not([class]), button[class=\"\"] { line-height: 1.5; padding-left: .5rem; padding-right: .5rem; border-style: solid; border-width: 1px; opacity: 1; -webkit-transition: opacity .15s ease-in; transition: opacity .15s ease-in; transition: color .15s ease-in, text-decoration .15s ease-in, background-color .15s ease-in; } button:not([class]):hover, button:not([class]):focus { opacity: .5; -webkit-transition: opacity .15s ease-in; transition: opacity .15s ease-in; } button:not([class]):active { opacity: .8; -webkit-transition: opacity .15s ease-out; transition: opacity .15s ease-out; } .tc-tiddler-info .tc-tab-content button, .tc-sidebar-lists .tc-tab-content p > button, .tc-sidebar-lists .tc-tab-content p > span:not(.tc-tag-list-item) > button, .tc-sidebar-lists .tc-file-input-wrapper button, .tc-sidebar-lists .tc-popup-keep button, .tc-add-tag-button button, .tc-edit-field-add-button button { border-radius: .25rem; border-style: none; border-width: 0; color: ; background: linear-gradient(to bottom,rgba(99,99,99,.1) 0,rgba(0,0,0,.125) 100%); text-decoration: none; font-weight: 700; padding-top: .25rem; padding-bottom: .25rem; padding-left: 1rem; padding-right: 1rem; margin-right: 1rem; min-width: 5rem; } .tc-tiddler-info .tc-tab-content button:hover, .tc-tab-content p > button:hover, .tc-sidebar-lists .tc-tab-content p > span:not(.tc-tag-list-item) > button:hover, .tc-sidebar-lists .tc-file-input-wrapper:hover button, .tc-sidebar-lists .tc-popup-keep:hover button, .tc-add-tag-button button:hover, .tc-edit-field-add-button button:hover { background: linear-gradient(to bottom,rgba(99,99,99,.3) 0,rgba(99,99,99,.3) 100%); } .tc-add-tag-button button, .tc-edit-field-add-button button { font-size: .875rem; padding-top: .25rem; padding-bottom: .25rem; padding-left: .5rem; padding-right: .5rem; margin-right: .5rem; min-width: 3rem; } .tc-sidebar-lists .tc-tab-content p > button, .tc-sidebar-lists .tc-tab-content p > span:not(.tc-tag-list-item) > button, .tc-sidebar-lists .tc-file-input-wrapper button, .tc-sidebar-lists .tc-popup-keep button, .tc-tiddler-info .tc-tab-content button { border-style: solid; border-width: 1px; border-radius: .25rem; font-size: .75rem; padding-left: .5rem; padding-right: .5rem; margin-right: .25rem; min-width: 2rem; } button svg, button img, label svg, label img { vertical-align: middle; } .tc-btn-invisible { border: none; border-radius: 0; margin: 0; padding: 0; background: none; cursor: pointer; text-align: left; } .tc-btn-boxed { font-size: 0.6em; padding: 0.2em; margin: 1px; border-style: solid; border-width: 1px; border-color: rgb(143, 143, 143); border-radius: 0.25em; } html body.tc-body .tc-btn-boxed svg { font-size: 1.6666em; } .tc-btn-boxed:hover { background: rgb(115, 115, 115); color: rgb(245, 245, 245); } html body.tc-body .tc-btn-boxed:hover svg { fill: rgb(245, 245, 245); } .tc-btn-rounded { font-size: 0.5em; line-height: 2; padding: 0em 0.3em 0.2em 0.4em; margin: 1px; border-style: solid; border-width: 1px; border-color: rgb(115, 115, 115); background: rgb(115, 115, 115); color: rgb(245, 245, 245); border-radius: 2em; } .tc-btn-rounded:hover { border-style: solid; border-width: 1px; border-color: rgb(115, 115, 115); background: rgb(245, 245, 245); color: rgb(115, 115, 115); } .tc-btn-text { padding: 0; margin: 0; } button.tc-btn-big-green, a.tc-btn-big-green { display: inline-block; font-size: 1.25rem; line-height: 1.5; padding-top: .5rem; padding-bottom: .5rem; padding-left: 1.25rem; padding-right: 1.25rem; margin-top: .5rem; margin-bottom: .5rem; margin-right: .5rem; margin-left: 0; border-style: none; border-width: 0; background: #19a974; color: rgb(245, 245, 245); fill: rgb(245, 245, 245); font-weight: 400; text-decoration: none; } body.tc-body button.tc-btn-big-green:hover { background-color: #19a719; } .tc-btn-big-green svg, .tc-btn-big-green img { margin-top: 0; vertical-align: middle; fill: rgb(245, 245, 245); } .tc-sidebar-lists input { color: rgb(13, 13, 13); } .tc-sidebar-lists button { color: rgb(245, 245, 245); fill: rgb(245, 245, 245); } .tc-sidebar-lists .tc-droppable { display: block; padding-left: 1rem; } .tc-sidebar-lists button.tc-btn-mini { font-size: 1rem; position: absolute; width: 1rem; margin-left: -1rem; } .tc-sidebar-lists button.tc-btn-mini + a { display: inline-block; margin-left: .25rem; } .tc-sidebar-lists button.tc-btn-mini { color: rgb(150, 150, 150); } .tc-sidebar-lists button.tc-btn-mini:hover { color: rgb(227, 227, 227); } .tc-sidebar-lists .tc-tab-set .tc-tab-content p .tc-droppable > button.tc-btn-mini { width: auto; font-size: .875rem; margin-top: 1rem; margin-left: -1rem; color: rgb(255, 255, 255); } .tc-unfold-banner svg, .tc-fold-banner svg { height: 0.75em; fill: rgb(143, 143, 143); } .tc-unfold-banner:hover svg, .tc-fold-banner:hover svg { fill: rgb(64, 64, 64); } html body.tc-body .tc-btn-rounded svg { font-size: 1.6666em; fill: rgb(245, 245, 245); } html body.tc-body .tc-btn-rounded:hover svg { fill: rgb(115, 115, 115); } .tc-btn-icon svg { height: 1em; width: 1em; fill: rgb(143, 143, 143); } svg.tc-image-button { padding: 0px 1px 1px 0px; } svg.tc-image-button, .tc-image-button img { height: 1em; width: 1em; max-width: 100%; max-height: 100%; } .tc-page-controls svg.tc-image-new-button { fill: ; } .tc-page-controls svg.tc-image-options-button { fill: ; } .tc-page-controls svg.tc-image-save-button { fill: ; } .tc-fold-banner, .tc-unfold-banner { position: relative; padding: 0; margin: 0; background: none; border: none; right: 0; width: 100%; text-align: right; } .tc-unfold-banner { border-top: 2px solid; border-color: #f8f8f8; background: none; } .tc-fold-banner:hover svg { background: #f8f8f8; } .tc-unfold-banner:hover { border-top: 2px solid; border-color: #dddddd; background: #f8f8f8; }\n\n/* ** $:/themes/telmiger/bricks/elements/buttons/big-new.css ** */\n\n#navigator-main button.te-big-new-btn { position: fixed; z-index: 1201; right: 1rem; bottom: 0; margin-bottom: 1.5rem; font-size: 2rem; text-align: center; line-height:0; color: rgba(255,255,255,.8); border: 1px solid transparent; border-radius: 5rem; height: 3rem; width: 3rem; } #navigator-main button.te-big-new-btn:hover, #navigator-main button.te-big-new-btn:active, #navigator-main button.te-big-new-btn:focus { background-color: #181818; border-color: rgb(70, 70, 70); } #navigator-main button.te-big-new-btn svg.te-new { fill: rgba(255,255,255,.8); } #navigator-main button.te-big-new-btn:hover svg.te-new, #navigator-main button.te-big-new-btn:active svg.te-new, #navigator-main button.te-big-new-btn:focus svg.te-new { fill: rgba(255,255,255,.8); } @media (min-width: 28rem) { #navigator-main button.te-big-new-btn { right: 2rem; margin-bottom: 1rem; height: 4rem; width: 4rem; } } @media (min-width: 42rem) { #navigator-main button.te-big-new-btn { right: 2rem; margin-bottom: 0.5rem; height: 5rem; width: 5rem; } } @media (min-width: 77rem) { #navigator-main button.te-big-new-btn { right: 2rem; } button .large-screen-only { position: absolute; right: 3rem; width: 20rem; bottom: 0.25rem; color: rgb(13, 13, 13); } } @media (max-height: 20rem) { #navigator-main button.te-big-new-btn { height: 3rem; width: 3rem; } } \n\n/* ** $:/themes/telmiger/bricks/elements/details.css ** */\n\ndetails .tc-drop-down[hidden=\"true\"] { display: none; } @media (min-width: 42rem) { details > span { padding-top: 1rem; padding-bottom: 1rem; padding-left: 2rem; padding-right: 2rem; } }\n\n/* ** $:/themes/telmiger/bricks/elements/images.css ** */\n\nimg { max-width: 100%; } .tc-bordered-image { border-style: solid; border-width: 1px; border-color: rgb(115, 115, 115); padding: 5px; margin: 5px; }\n\n/* ** $:/themes/telmiger/bricks/elements/links.css ** */\n\na { overflow-wrap: break-word; } .tc-tiddlylink, .tc-tiddlylink-external { text-decoration: none; transition: color .15s ease-in, text-decoration .15s ease-in, background-color .15s ease-in; } .tc-tiddlylink:link, .tc-tiddlylink-external:link, .tc-tiddlylink:visited, .tc-tiddlylink-external:visited { transition: color .15s ease-in, text-decoration .15s ease-in, background-color .15s ease-in; } .tc-tiddlylink:hover, .tc-tiddlylink-external:hover { transition: color .15s ease-in, text-decoration .15s ease-in, background-color .15s ease-in; } .tc-tiddlylink:active, .tc-tiddlylink-external:active { transition: color .15s ease-in, text-decoration .15s ease-in, background-color .15s ease-in; } .tc-tiddlylink:focus, .tc-tiddlylink-external:focus { transition: color .15s ease-in, text-decoration .15s ease-in, background-color .15s ease-in; } button.tc-tiddlylink, a.tc-tiddlylink { text-decoration: none; font-weight: normal; color: #00449e; -webkit-user-select: inherit; } button.tc-tiddlylink:hover, a.tc-tiddlylink:hover { text-decoration: underline; } a.tc-tiddlylink-resolves { } a.tc-tiddlylink-shadow { font-weight: bold; } a.tc-tiddlylink-shadow.tc-tiddlylink-resolves { font-weight: normal; } a.tc-tiddlylink-missing { font-style: italic; } a.tc-tiddlylink-external { text-decoration: underline; color: #357edd; background-color: inherit; } a.tc-tiddlylink-external:visited { color: #00449e; background-color: inherit; } a.tc-tiddlylink-external:hover { color: inherit; background-color: inherit; } .tc-sidebar-lists a.tc-tiddlylink { font-size: .875rem; line-height: 1.25; color: rgba(255,255,255,.8); max-width: 100% } .tc-sidebar-lists .tc-btn-mini + a.tc-tiddlylink { margin-bottom: .25rem; } .tc-sidebar-lists a.tc-tiddlylink:hover, button.tc-btn-invisible.tc-missing-tiddler-label:hover { color: rgba(191, 191, 191, 0.8); } .tc-sidebar-header .tc-missing-tiddler-label { font-size: .875rem; line-height: 1.25; margin-bottom: .25rem; color: rgb(255, 255, 255); text-align: left; font-style: italic; } button.tc-btn-invisible.tc-missing-tiddler-label { max-width: 100%; }\n\n/* ** $:/themes/telmiger/bricks/elements/lists.css ** */\n\nul, ol { margin-top: 1rem; max-width: 40rem; } ul ul, ol ol, ul ol, ol ul { margin-top: .5rem; } ol li, ul li { line-height: 1.25; } ol { padding-left: 2rem; } ul { padding-left: 1rem; } li:first-child { margin-top: .5rem; } li:not(:last-child) { padding-bottom: .5rem; }\n\n/* ** $:/themes/telmiger/bricks/elements/tables.css ** */\n\ntable { border-collapse: collapse; border-spacing: 0; border-style: solid; border-width: 1px; border-color: rgba(0,0,0,0.125); width: auto; max-width: 100%; caption-side: bottom; margin-bottom: 2rem; } table th { text-align: left; } tr:nth-child(odd) { background-color: rgba(0,0,0,0.08); } tr:nth-child(even) { background-color: rgba(0,0,0,0.03); } table th, table td { padding-top: .5rem; padding-bottom: .5rem; padding-left: 1rem; padding-right: 1rem; } table thead tr td, table th { background-color: rgba(0,0,0,.1); background-color: rgba(0,0,0,0.125); font-weight: bold; } table tfoot tr td { background-color: rgba(0,0,0,.4); } .tc-csv-table { white-space: nowrap; }\n\n/* ** $:/themes/telmiger/bricks/elements/text/two-columns.css ** */\n\n.cf { *zoom: 1; } .cf:before, .cf:after { content: \" \"; display: table; } .cf:after { clear: both; } .fl { float: left; _display: inline; } .w-100 { width: 100%; } @media screen and (min-width: 30em) { .w-50-ns { width: 50%; } }\n\n/* ** $:/themes/telmiger/bricks/functions/drag-drop.css ** */\n\n.tc-tiddler-dragger { position: relative; z-index: -10000; } .tc-tiddler-dragger-inner { position: absolute; top: -1000px; left: -1000px; display: inline-block; padding: 8px 20px; font-size: 16.9px; font-weight: bold; line-height: 20px; color: rgb(245, 245, 245); text-shadow: 0 1px 0 rgba(0, 0, 0, 1); white-space: nowrap; vertical-align: baseline; background-color: rgb(13, 13, 13); border-radius: 20px; } .tc-tiddler-dragger-cover { position: absolute; background-color: rgb(245, 245, 245); } .tc-dropzone { position: relative; } .tc-dropzone.tc-dragover:before { z-index: 10000; display: block; position: fixed; top: 0; left: 0; right: 0; background: #9eebcf; text-align: center; content: \"Drop here (or use the 'Escape' key to cancel)\"; } .tc-droppable.tc-dragover > .tc-droppable-placeholder { display: block; border: 2px dashed #9eebcf; } .tc-draggable { cursor: move; }\n\n/* ** $:/themes/telmiger/bricks/functions/print.css ** */\n\n@media print { .screen-only, .tc-tiddler-frame .tc-tiddler-controls { display: none; } h1, h2, h3, h4, h5, h6 { break-inside: avoid; } body .tc-sidebar-scrollable { position: relative; top: 0; bottom: unset; left: 0; box-shadow: none; } body .tc-sidebar-header > .tc-reveal { width: 100%; padding: 0; margin: 0; margin-bottom: 2rem; border-bottom-style: solid; border-bottom-width: 1px; border-color: rgb(80, 150, 110); } body.tc-body { background-color: transparent; } body .tc-topbar, body .tc-page-controls, body .tc-sidebar-lists { display: none; } body .tc-story-river { margin: 0; padding: 0; } body .tc-story-river .tc-tiddler-frame { margin: 0; border: none; padding: 0; } }\n\n/* ** $:/themes/telmiger/bricks/functions/zoomin.css ** */\n\n.tc-storyview-zoomin-tiddler { position: absolute; display: block; width: 100%; } @media (min-width: 77rem) { body .tc-story-river > .tc-storyview-zoomin-tiddler, body .tc-story-river > .tc-storyview-zoomin-tiddler.tc-tiddler-edit-frame { width: calc(100% - 4rem); margin-left: auto; margin-right: auto; } }\n\n/* ** $:/themes/telmiger/bricks/todo-components/thumbnail.css ** */\n\n.tc-thumbnail-wrapper { position: relative; display: inline-block; margin: 6px; vertical-align: top; } .tc-thumbnail-right-wrapper { float:right; margin: 0.5em 0 0.5em 0.5em; } .tc-thumbnail-image { text-align: center; overflow: hidden; border-radius: 3px; } .tc-thumbnail-image svg, .tc-thumbnail-image img { filter: alpha(opacity=1); opacity: 1; min-width: 100%; min-height: 100%; max-width: 100%; } .tc-thumbnail-wrapper:hover .tc-thumbnail-image svg, .tc-thumbnail-wrapper:hover .tc-thumbnail-image img { filter: alpha(opacity=0.8); opacity: 0.8; } .tc-thumbnail-background { position: absolute; border-radius: 3px; } .tc-thumbnail-icon svg, .tc-thumbnail-icon img { width: 3em; height: 3em;\n  -webkit-filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));\n     -moz-filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));\n          filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));\n} .tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg, .tc-thumbnail-wrapper:hover .tc-thumbnail-icon img { fill: #fff;\n  -webkit-filter: drop-shadow(3px 3px 4px rgba(0,0,0,0.6));\n     -moz-filter: drop-shadow(3px 3px 4px rgba(0,0,0,0.6));\n          filter: drop-shadow(3px 3px 4px rgba(0,0,0,0.6));\n} .tc-thumbnail-icon { position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: -webkit-flex; -webkit-align-items: center; -webkit-justify-content: center; display: flex; align-items: center; justify-content: center; } .tc-thumbnail-caption { position: absolute; background-color: #777; color: #fff; text-align: center; bottom: 0; width: 100%; filter: alpha(opacity=0.9); opacity: 0.9; line-height: 1.4; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; } .tc-thumbnail-wrapper:hover .tc-thumbnail-caption { filter: alpha(opacity=1); opacity: 1; }\n\n/* ** $:/themes/telmiger/bricks/todo-components/toc.css ** */\n\n.tc-sidebar-lists .tc-table-of-contents { white-space: nowrap; } .tc-table-of-contents button { color: rgb(255, 255, 255); } .tc-table-of-contents svg { width: 0.7em; height: 0.7em; vertical-align: middle; fill: rgb(255, 255, 255); } .tc-table-of-contents ol { list-style-type: none; padding-left: 0; } .tc-table-of-contents ol ol { padding-left: 1em; } .tc-table-of-contents li { font-size: 1.0em; font-weight: bold; } .tc-table-of-contents li a { font-weight: bold; } .tc-table-of-contents li li { font-size: 0.95em; font-weight: normal; line-height: 1.4; } .tc-table-of-contents li li a { font-weight: normal; } .tc-table-of-contents li li li { font-size: 0.95em; font-weight: 200; line-height: 1.5; } .tc-table-of-contents li li li li { font-size: 0.95em; font-weight: 200; } .tc-tabbed-table-of-contents { display: -webkit-flex; display: flex; } .tc-tabbed-table-of-contents .tc-table-of-contents { z-index: 100; display: inline-block; padding-left: 1em; max-width: 50%; -webkit-flex: 0 0 auto; flex: 0 0 auto; background: rgb(225, 225, 225); border-left: 1px solid; border-top: 1px solid; border-bottom: 1px solid; border-color: rgb(80, 150, 110); } .tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a, .tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a { display: block; padding: 0.12em 1em 0.12em 0.25em; } .tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a { border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-color: rgb(225, 225, 225); } .tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover { text-decoration: none; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-color: rgb(80, 150, 110); background: rgb(80, 150, 110); } .tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a { border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; border-color: rgb(80, 150, 110); background: rgb(245, 245, 245); margin-right: -1px; } .tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover { text-decoration: none; } .tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content { display: inline-block; vertical-align: top; padding-left: 1.5em; padding-right: 1.5em; border: 1px solid; border-color: rgb(80, 150, 110); -webkit-flex: 1 0 50%; flex: 1 0 50%; }\n\n/* ** $:/themes/telmiger/bricks/todo-components/tree.css ** */\n\n.tc-tree div { padding-left: 14px; } .tc-tree ol { list-style-type: none; padding-left: 0; margin-top: 0; } .tc-tree ol ol { padding-left: 1em; } .tc-tree button { color: #acacac; } .tc-tree svg { fill: #acacac; } .tc-tree span svg { width: 1em; height: 1em; vertical-align: baseline; } .tc-tree li span { color: lightgray; }\n\n/* ** $:/themes/telmiger/navigator/styles/nav-top.css ** */\n\n.story-backdrop + div { padding-top: 4rem; } .tc-topbar.tc-topbar-right { display: block; position: absolute; width: 100vw; top: 0; left: 0; right: 0; max-height: 3rem; overflow: hidden; background-color: black; color: white; z-index: 1200; box-shadow: 0 1px 5px rgba(125, 200, 200, 0.5); } @media screen and (min-height: 570px) { .tc-topbar.tc-topbar-right { position: fixed; } } #navigator-top ul { height: 3rem; line-height: 1; padding: 0; margin-top: .5rem; } #navigator-top ul li { list-style: none; display: inline; margin: 0; } #navigator-top ul li:first-child { position: absolute; left: 1rem; } #navigator-top ul li+li { position: absolute; left: calc(100vw / 2 - 0.75rem); } #navigator-top ul li:last-child { position: absolute; right: 1rem; left: auto; } @media (min-width: 28rem) { #navigator-top ul li:first-child { left: 2rem; } #navigator-top ul li:last-child { right: 2rem; } } @media (min-width: 42rem) { #navigator-top ul li:first-child { left: 4rem; } #navigator-top ul li:last-child { right: 4rem; } } @media (min-width: 77rem) { #navigator-top ul li:first-child { } } #navigator-top button { margin: 0; background: none; border: none; }\n\n/* ** $:/themes/telmiger/navigator/styles/nav.css ** */\n\n#navigator-main { position: fixed; z-index: 1200; width: 100vw; right: 0; bottom: 0; left: 0; margin: 0; padding-left: 1rem; padding-right: 1rem; height: 3rem; text-align: left; font-size: 1.66rem; } @media (min-width: 28rem) { #navigator-main { padding-left: 2rem; padding-right: 2rem; } } @media (min-width: 42rem) { #navigator-main { padding-left: 4rem; padding-right: 4rem; } } @media (min-width: 77rem) { #navigator-main { padding-left: 8rem; padding-right: 8rem; } } .shortcut-code { display: inline; font-size: .875rem; color: rgb(115, 115, 115); } .shortcut-code kbd { border: none; background-color: transparent; } #navigator-main button { margin: 0; margin-right: 1rem; background: none; border: none; } #navigator-main button:hover, #navigator-main button:focus, #navigator-main button:active { background: none; border: none; } #navigator-main button:hover svg, #navigator-main button:focus svg, #navigator-main button:active svg { fill: rgb(13, 13, 13); } #navigator-main button > svg { fill: rgb(115, 115, 115); color: rgb(115, 115, 115); } #navigator-main button:hover svg { fill: rgb(13, 13, 13); } #navigator-main button.tc-selected svg { fill: rgb(13, 13, 13); } @media (min-width: 42rem) { #navigator-main button { margin-right: 2rem; } } @media (min-width: 77rem) { #navigator-main button { margin-right: 4rem; } } #navigator-main .te-close-sidebar-btn { position: fixed; z-index: 10; top: 0; left: 0; height: 100vh; width: 50vw; border: none; background: none; margin: 0; padding: 0; } @media (min-width: 42rem) { #navigator-main .te-close-sidebar-btn { display: none; } } .tc-story-river .tc-tiddler-frame:last-of-type { margin-bottom: 8rem; } ",
            "title": "$:/themes/telmiger/navigator/styles/static.css",
            "modifier": "Thomas Elmiger",
            "modified": "20190408153010121",
            "tags": "$:/tags/Stylesheet"
        },
        "$:/palettes/navigator/penguin": {
            "text": "_dropdown-link-foreground: rgb(232, 232, 232)\n_edit-background: rgb(247, 247, 247)\n_edit-background-focus: rgb(252, 252, 252)\n_sidebar-background: #181818\n_zzz_Bricks-special-above_:\nalert-background: rgb(255, 255, 102)\nalert-border: rgb(232, 232, 125)\nalert-highlight: rgb(255, 51, 51)\nalert-muted-foreground: rgb(224, 82, 82)\nbackground: rgb(245, 245, 245)\nblockquote-bar: rgb(89, 166, 122)\nbutton-background: rgba(0,0,0,0.08)\nbutton-border: rgba(255, 255, 255, 0.8)\nbutton-foreground: rgb(13, 13, 13)\ncode-background: rgba(0,0,0,0.03)\ncode-border: rgba(0,0,0,0.08)\ncode-foreground: #e7040f\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: rgb(13, 13, 13)\ndiff-equal-background:\ndiff-equal-foreground: rgb(13, 13, 13)\ndiff-insert-background: #aaefad\ndiff-insert-foreground: rgb(13, 13, 13)\ndiff-invisible-background:\ndiff-invisible-foreground: rgb(115, 115, 115)\ndirty-indicator: #ff4136\ndownload-background: #19a974\ndownload-foreground: rgb(245, 245, 245)\ndragger-background: rgb(13, 13, 13)\ndragger-foreground: rgb(245, 245, 245)\ndropdown-background: rgb(232, 232, 232)\ndropdown-border: rgb(115, 115, 115)\ndropdown-tab-background: rgba(0,0,0,.1)\ndropdown-tab-background-selected: rgba(255,255,255,1)\ndropzone-background: #9eebcf\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: #357edd\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00449e\nforeground: rgb(13, 13, 13)\nmessage-background: #cdecff\nmessage-border: #96ccff\nmessage-foreground: #00449e\nmodal-backdrop: rgb(13, 13, 13)\nmodal-background: rgb(245, 245, 245)\nmodal-border: rgba(0,0,0,.5)\nmodal-footer-background: #f4f4f4\nmodal-footer-border: rgba(0,0,0,.1)\nmodal-header-border: rgba(0,0,0,.2)\nmuted-foreground: rgb(115, 115, 115)\nnotification-background: rgb(150, 80, 120)\nnotification-border: rgb(242, 242, 242)\npage-background: rgb(245, 245, 245)\npre-background: rgba(0,0,0,0.08)\npre-border: rgba(0,0,0,.2)\nprimary: rgb(80, 150, 110)\nsidebar-button-foreground: rgb(245, 245, 245)\nsidebar-controls-foreground: rgb(150, 150, 150)\nsidebar-controls-foreground-hover: rgb(227, 227, 227)\nsidebar-foreground: rgb(255, 255, 255)\nsidebar-foreground-shadow: rgba(255,255,255,0.5)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.5)\nsidebar-muted-foreground-hover: rgb(255, 255, 255)\nsidebar-tab-background: rgb(70, 70, 70)\nsidebar-tab-background-selected: #181818\nsidebar-tab-border: rgba(255, 255, 255, 0.8)\nsidebar-tab-border-selected: rgba(255, 255, 255, 0.8)\nsidebar-tab-divider: rgba(255, 255, 255, 0.8)\nsidebar-tab-foreground: rgba(255,255,255,.8)\nsidebar-tab-foreground-selected: rgba(255,255,255,.8)\nsidebar-tiddler-link-foreground: rgba(255,255,255,.8)\nsidebar-tiddler-link-foreground-hover: rgba(191, 191, 191, 0.8)\nsite-title-foreground: rgb(80, 150, 110)\nstatic-alert-foreground: rgba(0,0,0,.3)\ntab-background: rgb(225, 225, 225)\ntab-background-selected: rgb(245, 245, 245)\ntab-border: rgb(80, 150, 110)\ntab-border-selected: rgb(80, 150, 110)\ntab-divider: rgb(80, 150, 110)\ntab-foreground: rgb(13, 13, 13)\ntab-foreground-selected: rgb(13, 13, 13)\ntable-border: rgba(0,0,0,.1)\ntable-footer-background: rgba(0,0,0,.4)\ntable-header-background: rgba(0,0,0,.1)\ntag-background: rgb(80, 150, 110)\ntag-foreground: rgb(242, 242, 242)\ntiddler-background: rgb(245, 245, 245)\ntiddler-border: rgb(89, 166, 122)\ntiddler-controls-foreground: rgb(143, 143, 143)\ntiddler-controls-foreground-hover: rgb(64, 64, 64)\ntiddler-controls-foreground-selected: rgb(64, 64, 64)\ntiddler-editor-background: #F7F7F7\ntiddler-editor-border: #ccc\ntiddler-editor-border-image: rgba(255,255,255,1)\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: rgb(245, 245, 245)\ntiddler-link-foreground: #00449e\ntiddler-subtitle-foreground: rgb(110, 110, 110)\ntiddler-title-foreground: rgb(64, 120, 88)\ntoolbar-cancel-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-done-button:\ntoolbar-edit-button:\ntoolbar-info-button:\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\nuntagged-background: rgb(150, 80, 120)\nvery-muted-foreground: rgb(89, 166, 122)",
            "type": "application/x-tiddler-dictionary",
            "title": "$:/palettes/navigator/penguin",
            "tags": "$:/tags/Palette",
            "name": "Penguin",
            "modifier": "Thomas Elmiger",
            "modified": "20190302134319465",
            "description": "Penguin – Mostly black and white",
            "creator": "Thomas Elmiger",
            "created": "20190302133253839"
        },
        "$:/themes/telmiger/navigator/ui/Buttons/new-tiddler-big": {
            "text": "<$button actions={{$:/core/ui/Actions/new-tiddler}} tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=\"te-big-new-btn tc-btn-invisible\">\n<span class=\"shortcut-code large-screen-only\">\n<kbd>{{$:/config/shortcuts-mac/new-tiddler}}</kbd> =&gt; <kbd>{{$:/config/shortcuts/save-tiddler}}</kbd> / <kbd>Escape</kbd>\n</span>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/themes/telmiger/navigator/icons/new}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>",
            "title": "$:/themes/telmiger/navigator/ui/Buttons/new-tiddler-big",
            "modifier": "Thomas Elmiger",
            "modified": "20190217210901494",
            "list-after": "$:/themes/telmiger/navigator/TopLeftBar",
            "description": "{{$:/language/Buttons/NewTiddler/Hint}}",
            "creator": "Thomas Elmiger",
            "created": "20190201135607628",
            "caption": "{{$:/plugins/telmiger/icons/new}} {{$:/language/Buttons/NewTiddler/Caption}}"
        },
        "$:/themes/telmiger/navigator/ui/Buttons/about": {
            "created": "20190208064547584",
            "creator": "Thomas Elmiger",
            "text": "\\define control-panel-button(class)\n<$button to=\"$:/themes/telmiger/navigator\" tooltip={{!!description}} aria-label={{!!description}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/themes/telmiger/navigator/icon}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">About Navigator</span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/themes/telmiger/navigator]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n",
            "title": "$:/themes/telmiger/navigator/ui/Buttons/about",
            "tags": "$:/tags/PageControls",
            "modifier": "Thomas Elmiger",
            "modified": "20190303095444038",
            "description": "Go to Navigator theme",
            "caption": "{{$:/themes/telmiger/navigator/icon}} About Navigator",
            "list-before": "$:/themes/telmiger/navigator/ui/Buttons/menu"
        },
        "$:/palette": {
            "text": "$:/palettes/navigator/penguin",
            "title": "$:/palette",
            "modifier": "Thomas Elmiger",
            "modified": "20190302155851643",
            "creator": "Thomas Elmiger",
            "created": "20180317160745662"
        },
        "$:/config/PageControlButtons/Visibility/$:/themes/telmiger/navigator/ui/Buttons/about": {
            "created": "20190303095000040",
            "creator": "Thomas Elmiger",
            "text": "hide",
            "title": "$:/config/PageControlButtons/Visibility/$:/themes/telmiger/navigator/ui/Buttons/about",
            "modified": "20190303095000040",
            "modifier": "Thomas Elmiger"
        },
        "$:/themes/telmiger/navigator/ui/Buttons/control-panel": {
            "created": "20190407131945966",
            "creator": "Thomas Elmiger",
            "text": "\\define open-control-panel()\n<$action-navigate $to=\"$:/ControlPanel\"/>\n\\end\n\n\\define control-panel-button(class:\"not-selected\")\n<$button tooltip=\"show/hide control panel\" aria-label=\"show/hide control panel\" class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n<$list filter=\"[<__class__>prefix[tc-selected]]\" emptyMessage=<<open-control-panel>>>\n<$action-sendmessage $message=\"tm-close-tiddler\" $param=\"$:/ControlPanel\"/>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>",
            "title": "$:/themes/telmiger/navigator/ui/Buttons/control-panel",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
            "description": "{{$:/language/Buttons/ControlPanel/Hint}}",
            "modified": "20190407141117452",
            "modifier": "Thomas Elmiger"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/tiddlywiki/centralised/styles.tid": {
            "title": "$:/themes/tiddlywiki/centralised/styles.tid",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\thtml .tc-page-container {\n\t\ttext-align: center;\n\t}\n\n\thtml .tc-story-river {\n\t\tposition: relative;\n\t\twidth: 770px;\n\t\tpadding: 42px;\n\t\tmargin: 0 auto;\n\t\ttext-align: left;\n\t}\n\n\thtml .tc-sidebar-scrollable {\n\t\ttext-align: left;\n\t\tleft: 50%;\n\t\tright: 0;\n\t\tmargin-left: 343px;\n\t}\n}\n"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/tiddlywiki/readonly/styles.tid": {
            "title": "$:/themes/tiddlywiki/readonly/styles.tid",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\define button-selector(title)\nbutton.$title$, .tc-drop-down button.$title$, div.$title$\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fclone>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fdelete>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fedit>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fnew-here>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fnew-journal-here>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fimport>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fmanager>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fnew-image>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fnew-journal>>,\n<<button-selector tc-btn-\\%24\\%3A\\%2Fcore\\%2Fui\\%2FButtons\\%2Fnew-tiddler>> {\n\tdisplay: none;\n}"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/tiddlywiki/seamless/base": {
            "title": "$:/themes/tiddlywiki/seamless/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "list-after": "$:/themes/tiddlywiki/vanilla/base",
            "text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n/*\nRules copied from Snow White\n*/\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected svg {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal-displayed {\n\t<<filter \"blur(4px)\">>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n/*\nSeamless modifications\n*/\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t/* Drop the tiddler frame padding */\n\tbody.tc-body .tc-tiddler-frame {\n\t\tpadding: 0;\n\t}\n\n\t/* Move the sidebar up so that the title lines up */\n\tbody.tc-body .tc-sidebar-scrollable {\n\t\tpadding: 43px 0 28px 42px;\n\t}\n\n\t/* Stop the tiddler info panel from bleeding into the tiddler frame padding */\n\tbody.tc-body .tc-tiddler-info {\n\t\tmargin: 0;\n\t}\n\n\t/* Stop message boxes from bleeding into the tiddler frame padding */\n\tbody.tc-body .tc-message-box {\n\t\tmargin: 21px 0 21px 0;\n\t}\n\n}\n\n/* Use the tiddler background colour for the page background */\nhtml body.tc-body {\n\tbackground-color: <<colour background>>;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour background>>;\n}\n\n/* Adjust the colour of the page controls */\nbody.tc-body .tc-page-controls svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n/* Adjust the colour of the sidebar selected tabs */\nbody.tc-body .tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour background>>;\n}\n"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/tiddlywiki/snowwhite/base": {
            "title": "$:/themes/tiddlywiki/snowwhite/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tc-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n\t}\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected,\n.tc-page-controls button.tc-selected {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ntextarea.tc-edit-texteditor {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\ncanvas.tc-edit-bitmapeditor  {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\n\tborder-top: none;\n\theight: 1px;\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\">>\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n.tc-plugin-info {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/tiddlywiki/starlight/arvo.woff": {
            "title": "$:/themes/tiddlywiki/starlight/arvo.woff",
            "text": "d09GRgABAAAAADn0AAwAAAAAWXgAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABHAAAAFMAAABgd9Zm82NtYXAAAAFwAAACwAAABiJywnghZ2FzcAAABDAAAAAYAAAAGABZACxnbHlmAAAESAAALEAAAEMw49DYfmhlYWQAADCIAAAANQAAADb6MXFtaGhlYQAAMMAAAAAgAAAAJBEVCUFobXR4AAAw4AAAAmQAAAOA90pQtmtlcm4AADNEAAAA2wAAAVz1kvXhbG9jYQAANCAAAAHCAAABwoxMexRtYXhwAAA15AAAACAAAAAgAzIHJm5hbWUAADYEAAACTgAABZeRsQXhcG9zdAAAOFQAAAGeAAACLHojM/14nGNgYj7OOIGBlYGBdRarMQMDozyEZr7IkMbEwMAAwhDQwMCwHEg5wvje/kHeDA4MCkqSbCL/NBny2Dcw/lJgYBR0AMqx8LC+AVIKDAwASlsMnQB4nO2SZ3NNURSGn3NdUaMHIeK4eheidyLRu+gkjB69JiRa1CREb9F77z0h0UWNMMwY1/lgwjd+AHO99zDKDOMP2DPvOmevs/c6e6/3AXJhy+nEwDsCNNObkYOPkam5iaVcBzoxivGEEkZHOtOFrnSjCU1pRnea04KWtKI1bWhLO9oTwjSmM5oxjGUcPXCoqpPc+JCHvOQjPwUoiC+FKEwRilKM4pTAj5KUojT+lKEsPelFb9ZSjlgCKa+TVMBFRSpRmSpUpRrVqUFNalGbOtSlHkHUpwHBNKQRjZlAFBOZpDvs5QQnOc1l9nOQDNK5QQo3ucVt7nKHe9znAZk85BFPeMpjstjJDrJ5xnN2qcI8pjCZN/ShL/0Ip79yccxXXMxmxZF2716xip8jgZWK8WxhDckk/cgPYCCD9DzCcQ7YmcEMYSjDGE4ELzV/i5v1JBLJiO97VkuvpWOc4ShnOcV5LnCRc1zhqvKXSOMaqSxiBjOZxWwWsoA5RBPDXJyOQK0JlTteB+rKtTY6QYS+xen2T8jhIx7D1wgyIo05RpzjruO+402uVLOE6W8Gmi6zitnMDDFnmIvMeFcxl5/L3+Oxyagn99vq9JH6x2518inv+WQUVJ0I1Yl13FGdV6pT3CxtBth1mv6hTgHwZEhpnk+KHyS398qeXtJo79uX4/D5mdXRCgMryAq2qlk9rbFWfyvc3dud4Z4lXkO1zNurKLtb06Qr0jvDIZJtGU5F57dmGnn58/gX578z/SufyTYfiSJgnSiZLz4S5HOS9oXLjXniYzkr1O1V4me1fFkmNgaygY1sEh1H5Okx0eDldDFbxekl29cD4nWq+Eq13T3IdZaKvnQRfEP0pojfeLbJv8fqfJZ43Sl6tojZbJvaFywRSfvYziG5c5g9YmPudzJiREm0zdzr/3T8p+PvdHwF87BilAABAAUACAAKAAwABQANAAcAOAAH//8ACnicjXsJQFNX1vC7770E3JBAwipLCEkMEEjySAIEwr4vsm8iAgKCGyIiIqJ1QdwQXGutWsuo49hobadqa61LrXXajjPjON0+u0w/p/XvlGn9nda2Si7/vfclEND/m682eeS8+84999yz3XPOo2iqkaJYF8EQxVBOFOUuFUmN6NPInBgun0/fscoFQ4/EjYIACv1HU5MpSjCMxk6n3ChKzjFShpNI9RyQAnQFUoZ1XbPS+kb7QSjeCD4BSvDxfii2/gL+NmQB5fCExSJIeHTFQp+kj6PZ+tG8w4LvKS9KTukoysiJZHqBzp+WiIVO/oxE7ELLpEAk1ZlpfWQ4LXP4s39ggD5ZNbgydVG9Nj8qIHXli1XWXFAMajWFZllwXFEEfAGUa4rigoPNRREWdvfLdGrH4JzaIxqf1MIqzdyjq9LoQThZk1vHhRUmKOhDUKRIKFZr52aFUxSgMkb+W3BcOBlRRQGFQhbkgijypzmdwegpFLKyoGAFosLNEMzpPDw8OQl7LfnzzcuvbMkp7r2w/PA/i84ozsGfBp+Hwx8sXHgVTDm47f0+bgFbtWx93bFPV+64s7P2uZeLFr3X1f4JmPniIAj8sGvW4oRXMW8RPwQHEW/FlBTvg86fRTxgZYi9IplUxI0uno5suji4cY5ON2fj4MUm6x8HBkDxUPMbW/Pzt77RLBgy1G05cbVpwdsnt80zoLU/Xlz1wserV/3tUCVeG+b5TTSHO9lpmQjttAR9RJyITNPPmm9a74IbMJr2u/n47YEBwRAsAhT0tVghuhQjfFgOxvCIxuEhsmDHQk+y/ox2fxSH9wnrsIVHgHn8o+AO4nEoWrPIhZEFKcYzVaZQODkwXqqXigRSxbLtLxTueWTj68Cfd4fVfpz8+ZY2zPv1l5dfeaiF5fQ6IdDMas9RzLPx96NVhe36V5dtpOuOf7Ky5x875rz5rsWqsq1BeBStwRf9kEpkNupHV6HHMLQ29nUwNDAAxfuHd5PlgKH9zOL9giHL40UWCy21fokWtcdigXrwwShv6DaEdwrmzSheWT/4B0IzA/Pj1OPFhBOAahxxo9ehsRLbWCT0TkInpcFoZvQi2T7w3VqJNMxDn2wxRYgV/u7HyLMepqRUaW7x9MpCWWaKScIu43UTy8/HZF5PRAYmH2Ct1AOH1cnYLlDVYW2iFw/CJutxaAFDB/CqdgjiT52y3rIeREuqpL+xE2hfj0CI8LrZaCRqqLdLDGIHPcU10Mf10uMttrVN9wpwvQzj7XuNnneC6Hkvm45LHQkCSK/RX0ijwd/BV+AeuNHfD8WD1u9PWu8hK2Jh111+dFfgd/nxWkTQ9kd/EJget1pG6RLKkf0Q2/ZPCsa2DhjRUqPB0LoRyhqP8GwfAPvp15xPIvoeXWW/fXwNL+/lxzINAwnvsM4/RPLoTinRah1UnPVwk4hpIau0q59NKpmAQ3D4jwuwJB55EUy9gv6CPx3puLo5q2DnlaaOtzdnFfa+6Y+V/IWjWMm7PoR/P3oUfvVR14W6Y//VufrekbK6Y3dWbr+zs862d+wNovsBvO7TvP2zr0hqM34KpP4NjS91p6asPrUA/psXyGIgip6bqty8VzCkn3+gvmj3kgTr93iBUBYQW2la2s3LRwa8QNaopExojeH0hCUio8sbOV4dZUFO7hPWTF/Yfu9Y5diS55z4Z19i3gpTdIXL/qmJZfWa3N49KarQBsKFXRcWYy4UbLrh5b75Fpi6b4wN++G/b20WicJN0abUqJLoGVH508B8wpWvBwlXtny2u25MprMQX6RUmANfkHvwdOc8pQwiU/Y0FnU0vNSdpsqsN3lzavmU4g00/LQ1YO2Sa3Z+yQi/9vD8im6ZmyWeojJlh8Jzl8DN1e125vnHVpha1xBZyx/5ku0T0lQy+jXGEE9Pm58KCqeVMj1HrBXPM6UynNFHmtFvNAzZM2Z/Qm5VeM6ybEVERtnM92dvq9bmbr28rP14a4p7znBE8fK0lMW5Ki5/btidjI6S8JSNl7sKtrSU+GX/xJ4oj/CWxeaHJRVoZ7gk+WU1bCyrPrIiWV+xLNbSUhUXEBhXZowriVW4mD1S6jaUlu1flqhIrY2xYLqRoRO0En+NvLXIZtH0RKzA9W3w+E1Bxk249CCUWNiDQ2AALh16XG9Bz7WODAknE77b7JJtZTazaFsz+tkKvns+umFbUenA/Oij4Lve2Yc/6lp56/mKbUjTrOa1v2+NDF98tpd+G1mX4qPQUlF+8qfD9CXM05GHiLav0BwuvP6iGELGGy0Z8xMY2gAl8F9wxiYwtBH0gBf7ieZiK/W4hd1J9gTFIpMeEp2xPz+GAv0tc56MnoWz4J9gA+yBt2AawdUCNoBQcBCseJbHqHr0McHaJoh59C7bh/CeRHQNjvkF3ohyo5dRIs+BoaWwEViqofgNeBFeeAWK54EzsKkLDO1CoU/IC5gFN6zHLRZwDcYhwzqbjjp1CtaCF3j7xaF5Qnn63XmUBPOoYeSQ3wF+QHsYmTFYiozYNrhkBcIJvcE9xM5V1n8jnMh92HCxiOXUNPQDEDemB8Qvs9uGW+gb7zw+zWy0FrzDpgumPj4yDMvvslUjFDhF6HD4T0N+j1AsNdKIIjRKgrw6Sw1TBxqRLqaN3GUesDKkiXFImoRCIgGRZha5bE+jzUw4Kc0MFnkJjguxzTQaR63HdVP/7Jy1VZwysWzuPHVG3UwQGFOgiyjNjveIk5fXNmgrB+oNoA3eHpZnJUW5g08MFYnB/sacGmOapmiJOakxmwuYNsm5xFig95km8Z2+zkvlJwqt3FZrfWRZ6xag8vinV3hKmCpOJeFtR/TIfXaLUEx5YJuOohSDgbPb1SCFEkmxDAQJnUQeHnadjQb5SQeLGk92peT0XmjJ7dVc2EfnZ27SBq6uTlhRaeDKlgvF1kEuNmfr1fbuD3bNUgcnCpqgdyxnvS3lNLUDNeWbq7X83laN3GWnsuqnxZDYvBLG0ZhxnITJD1lXkrisRKstbU2s2RFywL+8pSdr0fmerLzN55rqXk5qpn/JTjPU95eXbZ+nn1OZk9CYoSzY9f7Kle/vLExJtZC1Vo18yx5Ha/XCGg94tzG6Q2QikYxBs4vGiKFvgPT98LRuY3Hz2Z7sjI0XlmWvju5rKFoaoVufkrS8TKcpXSkUP9pvKeGiM/tublx5fVuuVAX6Hsu0WjolRKGt3lxes2uezjb/XQaySuS9QtD8Yg9PzFUSMI/RgAyhh4cEYCmRhjNAPG2q/DfzC54rzm78U0vz79dlmrvOdbYfmsdNFjAwOrE2RTWZ9mb9YqvB92GZ0voGtWZtWkra1j9tabm+uzS9fV+eIk8ODslT680xdRkzEc9LKIqpFxIPinR11C/oOT0vk55OePFCCbhw//4gdD740ku0pnx1jr44iRNHB86PKprLTn3WakRK9d6zg5WbKsMmi8STe0Re8+t5eaqCRlbMyikFFe0o/4S7aCIxASiN/gyRJyL8DuxmKrneUjun87pNF759aFjRtji83j+3vDoitzUz+JfwHHOEiOtJszF/tiHWzndZqH7Y7+Gwq8ygfNYnLMAtsGDrgng3P4WENqpnjm0EoBCpAgrxIIhIPGdTRhsrIvHynex8WQYyhDMy80sjijZVc8i67OhsTdgYsw+KD+5AYr5phjZYHF69ux66Ivv1aUdXXLj1CHKLF228QF9ZgmFqEuXHz8TjdLdttN0pVoFChHnPvjaJTOPrEyGTSGQRPr4amYSdOoyw0a/RDlC5RCLXINxxUAUuCu4jW0a8D4mJlQaD/kn0xSA/vGxNgXtFwe4u98BQb6/QQHd09fJGV3bq46MV/Q1R9LZp/e3M87SvVwi+GeLlHSZ1d5eG2fQU2c3biF8+9ljdKLMHzjIwKkJVYDH92kMz2LIBXgfl3Xdg+ZZSmHryjFBsGX4EUez/JtxpAX+Gn9sYRPDSGQjvJEfuVIF8xI19+4hW4ZFkv5wOswGUkcxP9svD83/YtfFbWA+y6KDswgrN0sEwRfHsekPxpmotOmPsWtmavF3XD/12dbYmbjTtwqcOdmqnH6fwKCoPig+f4bixCVriotBf5nDri3hTeLrYB4iuIBI3jJ9VbyPURiLj4jALIkiKCNJimUKEjENrWeUXqfCwTY32uXTkK7aeDeFjbncbRtvOGh1CKaxBpSB366VlbZc35+RsvtzWfmlzzjtcRXtSake5Tle2MjWpvYKjhV3v78zL63+/q/ODXQX5O99fVTHQYDQ0DFRW76rT6ep2Ybk1QRXbg3TYB588EcfH+wT7CuXj/YIJZDn4hVldUYNIWwborIwerbSryuYa2KmlNs/wp92FUh/4CtrhbdIYzvrnIINu3q5R34DtiIo9jmjgbTUnesKSYKZOsNUX9unWF47a6ZXRF5AglZeskOnWJtusBfwQrNYaRw21IvzRexa6LkpBZ6uCtXM3l9lMNb+3TC5LZB6FHNgc8+t2xzuLt0HnyeRekqbGqiefscJ+MACy3dTGZGVkVTijTfDmZhngVLKf/YFGlSdNcBaOfMX0sqFYjkfjYw9PbO9trHWMjhVKpUIx5gBl9AWlOSd4ZrLGNz7rxjMrjA07yjr3q5r+LI/LnanMMAYm5r3b2a6ds6m0ZV9s7U0m0CQXuQVp/SPjfNJC98xPbStQ5yVYQuMUbu7ySKkubUZWaE990tKCcHM2iYG5kXv0DUElWS+OxMXjfZM79hBGMPDvn5gZZmVIgiJUsyAjpSE1iDn223PYI5yMy/Gb7tbt7SfN21BHxzz7SynPx9iR79m97FQ+TnT0uCTCFpNJRDL6byCvDf417Vh13toKzXaQt2R+XG/sNmIAawyx6rm7GsAPFmtXx6owJd2B8YpR3DID4XWxxYXuvElC/8SgsRZQj+JBRgU89To8XchOtVgN9PsWy/AAs9T2rDAUPWuLKd3dOXf74wxDMGRozv5y8F9vxWIc/7B898/T8JsKjGYhkzh8ld5NUJmGr2N0trjShV+jnGMYxxDYc8xUSulzpj+9x8ETxcAEP2kG5crLV3WgvALeAYYceMICUEiJTEwLSLVYHj5E9vI0PGwh+AOQLqgRfnc7vTxOXh6BLABs6fo3XAW2LITcDli9Zgk8XkyIpfdaLI/bEU4/ZgnGk4NkGnEDx79GPhkg4cPgHHoaPPs6/bX1R1B3dfhRGw13AfUKq/AMfI3wC1rACeCLY113T6C8eQcODwDfUus9Pb/H1eA+3UMfJPcRZdW0Ety32PIPNSM/gnrqEabdOMEx1UiCI8Y8W0SwpHOim0N2oBzJzwdC1p5zsGXADDgDxh/IJ+Yc6P7B/9oQlfPMtZMvfrQtKqrns9+092cGz8gfaOvYmqL0zu13W/lX4DN4CqjPPdN4G37029/Af9xe9erco3dWd9w5UV/f97Bj9Z2jc4m+IgI+F3riM5SREwn0cmJ1HuyGN8Hx/L34OFjy21tDj/bisyASd+a2UEgFY96aGTtFTrIxk+2EeC4tpyW+Jk46M602JnJOWij9GsjoPFLeeHxFokiVzEEl3Tvcu5veGJiFHJauPEkhTZhrnvtie2LisoOzgwvmLIiz3jxDzqwjDxicG0SnDEDmEgrHzeVw5ubGjLQMqTH6k5kqTW1ON9XWsJcEuSsOly483ZXsxeVHRxSZg3PWv1xfdXZNrPCK3962yHk54eF582NK05KaM5RsjbIiW6tamlK2fYEZB5eamrKsGW6JlctS6n67KjVx5fqEOQtCshti4xvTlc8qU2YjOiuRbrTb8mKAQ+JmFI2FndIq2vdD6wjY+M5//zeKqXZZt9HFzP7hFY9c4C8WiHQATMZrzUI+UI9w4KjZ0Rc5BJI8C5yUOMMK4qJW5Cy92Judtflye8WB1bN9j7qaixujM7pmR0ZWdaXn96p3M6XWWcwahTJ/89mGxvNbCyJKVqQVcmXxMn1VV1p6ZwUXrfFkvI/zvqh6ZIhdi+b3xP4QTCBBH2kwAvfRswtPCxMBLXHzlFWWnvzSXVcXNb61qyxZB9pcMhoqEQndmSmrq6NiGzYJhqzv+Tindp9qWvvu5vSsnjeXlVuq6UFrurqguzBvdYlaU74qq7C7OITXJeQJ2an8WdjIGXxoI6/Dwsm0E+LnuXbD+k3rDdY/XGHuJg30bTSsgamWAyAOhIHpi9uBYd96+Dk65r/7HNJMhtqG7Ge50JmSIW+UjZCPLynYXK2R90DMhDjDfcJvuqP0ueXJVblccaw0d+OZ+oZXN+ZK40oicyqS2g5+pilqiTcvKdLg42l8S5HGqEiZY+QqU2fOTK3kjHNSFEJn86KdhXXHDf5F85bFzT3enZHRfXxuXNu8In/jsdrCnYvMj8+ZmvOQIDabYpry1Oq8JnqtrixRoUgs02n5K9mn+Yg/m4UCfp+kYPyxCq8OMBP2CZwGc3SFEeVv9ZThfVr05q6iZB3cGMjvT3d8Fb9fdKzYJbX7fDXepYxeskvWCkGZfXfsu4VpuI3s3cdCFbJXnk9aPJGUkd2eGOUDVvXqRMsn+OBxK95zAZWNfFWFzf6FUvFUEdKjCVjlExYl55Ab/A9jsnWz12Rnr6nktJVrcvPWVGhBaXB8hK9vRHywzBzu6xtuZgKvPf7hbfpTfuBsnbZiTR4/UMYPlNkGsv3JnbP1+tmdySkrq/T6qpVD3mpzMBkUHh8cbFZ73/x1CBQlo6OaYfbK5JROfO0c8lHHjQ2KU/vgWtfIA8FuZNM0VCI+pwqUY1kAo0OmEBd8nJAWGjlk8wBwYewLQ3qITkCRDqGVwSBwHgqpa+lOq/1dd4Y8sawqyUcr9zQvHCgs27vI7BUWl5qhALpA5ZSLojQDEA+nBRlneqhnLYyLrMpP9oMbv/EJlpuLwnUFMYEqQ4WpSfiPyNJ4WcqKF+fEtdXnRyR4mTPyFPlbG03mpq3ZsbMzTDqVO7yb2R9T/X7tCEUrXbTxmfKYeRkqn4hEBfLtyTMyZ4bkxcqkMbnqkDlckU8s0ms5KwPOwmjiP2Ui4ye/v8vKaKErkWkV+rMLyRNfd5QxaG8Z7vHvVP8A8b9z+QaPsz6ihbx96INx9EFhNa6TAOQosad0I7kUkoal3SoHGgw41N86q6s4LKy4axaMW/ozcAKSHTuABAh/Xrqk/ouhn7u7f/7X5/UYnx7hS+HxufMuTWlEbhf7XVropLdj2VI50GgwNA5UQkv95//Czw99Ub9k6c/wEfxuxw74Hfz1Zz5OMjFdDIX2F+cyjZ5Onk5KJ6VRbkTRPLj7i/zXQ4v37ln0PITK4R7B9IKO/I8y/vTHtL8Vdhc+JHWMC2w/e4GvF+FKnIRk7vrB0XPgOKw8B6sYT/AbOOc8rATHMU9H7jKhQinmKXI7Mrr7tPXEaaH017cRT3dCoXOd4Dby2c3orkg86h9ZJDgsYhbLh764jEkqAGYGVwCIbWRxnD7hMALQaH04Y49AhHqZRp5VF+MZ07zn3F+Xtd46u7c5JqZ579lbrW0fzaluhY93bB2hvji/Pj19/fkvALV1OwBfnFuX7hOZPW9lWtVqWfzh2c0vP5Oete7lhsxN0fCX6s1BIn1KgTph0aywkNzFzEVrc5zZr2BZZ2Xj5d/1NUTFLNhz9i9LW2+d27MgJi7qUGq2De+WkS/OrU9PXX36rz88k7J1zZKCiPz4yJjMZ07W1b70TPZMeZHVqSzVKosN9UKmNcY0P1fNy9H3sJdeJzzJV7p5Z/092H3nDlwsPPnsr1P38/HHPWabUE1kFvFXNUhfGRSqf71A6gCwF9zln8dRMK6BgdA7YDdcfEfo/uzPn+9HYw7QrvRO1pnEtBNs1QFlSpU+sipFia6RenRlpkZWpeJfej0PxfPDfraFr9ECm2nApJJ/4Nacg63mtPXnW+nS/LNfv0a/JUxs7i9uPNAUOfhrqvDNX1P5dbqOPGAHhGJkVZGMjMVsElK0cyBq1Csq9Y6hFJ2Tl2AK8wpOnG3U5Bv94YY3jE376+ccaU9281eIuaIY6awt5+crlWKFOLG1WKMrXmrOZ95hgjQmf125OVBmLuUeD1iYO2k7lqUntD5XHJ6byIml5bVdKQ3nN2YILwoE2tJlxsS2bC3FUo0j95y8hfvQGSOCmkWVE64hMbWVv4PC2bFkAE0yeEIakDSEfQ0eyBxynlIlrgZJcGVDhIQcF4Ia41oOXrrTseKzy4eWxsUtPXT5sxUddy4dbIk723z+YV/fT280N7/xU1/fw/PNwLWuEdzNXFGoFqtilQHaqapCeoTiXOpnJVfBHhDQn1VeVMbEryBPE6w2TPwMO34+39x8/ucd1UBraW62QCs00YcPh2Q1xGhzTGEiUXrkicOwOAseZmLhcFyKORXHKY7rLvnfrFr+P2SSkRX836+W2aZpjklYigOXpQlRzQGbPDNKazXN5zfn5W0+3xwzvyLT7z+vdTtg+LWWh4eg3UxIWFqsUcvW+euVnhhL0/kts7xV+hl8nNlIWZiTzCXk9ZGVk8sYd44B5Jumr3z22ZWv6b6rd+5c/doCtoAtsAN28NenPAsYzh0dZPnvnG/wU/QO/qJ3fJQ8zFA3EY/1wIXEGKYnoxb5f/h901Ol9w8wqLy8VIYAf73Kkz7yBOQFr5kGBJnpha4B/ujahcF4mD8P9P8Pv0nNBXzNUnQvtjkiW82F7h3kdRndc3a450z9Yr9HU+uY28wJpOfEhwJPRsngj3zD5Utn0EcojrfCPPBv/G3LPaHxG+zj3ZXunvjzpW04czuepnPhVPyNa4DMbfA9GUswgwUb7RhtuVPmNLgv9OPvAyUQf4YOz0I/2+EZ4H2jabJvth237bVldHPHjRm/p3r7JvL9SY0CKdr96eM9JL42gqPnwTE4+zyswkxjusFRWHUOLgG7rHds/OMQbzmef8jmS7kx5tL4vCFoJLU+XHfnEJFS9OGcZOQjc0dRrbvMyLnLgNRdenI4/rIZzEVfXym/KvhBfj/7ag58Mft67v9V/VBoBYvB3AL4InsamOHb+HMD1l6DXaAHf66BF2yFP1y3fJ0pYY9QQnxulAD0/2Qm21pJHx8+S/8KfvsGvA6vvwGOEfpKgZZJYVztvVkSsuZS+nurG/6AS33gyz6M8yjC+QOPEwA9/p/5AaE7bq1ksuk5cPYbwARMb8AKjLNz5EfmrnA60gmkERMlHmuI0cFh2Ot56IiBgi1QODHED50ekmXSl5mDcNtVwaKkGWcE6SuPzqt/foGhaX5EJ+c8Mf5/0LSzs1KnTorPjFQXJ86MmlUeMLV4X2ty0pKdsxotGdKm5+bn8Pu2bySNlQtDcc1dIFKQFKLESNJqjgV2dOgW8S1DTnqZnq/wOJTmnUQ0O69N2vGYRiFgu9KUIT0TXZOqCMlvz7peslrRcMuTnrxk9uJl8qjkgNM4ExBR2pl5ASS5VsZZpoCCkrwMuU4qnhQxXZtRlxgzL0c3BZTAk9PzDBaG8UjMTzeH6AJEk/RiLmV2nHlhccxUeAnT3oPijC0oTohAu0bq5pjNiEZEHKlnSBB1OEWIQThjiNndExIfIpGbcpRbUg0qfIbAZweVIXWLMsckl6Cb9O3w7BodeCe+LkW2prkaFptrMjTT2GmajNo4WF3dvFaWUhcP3tTNzSZ9bPvhA8AJL/FxjEi2//nnhZd+ieR5m4Hoy7HRp8ccxQTiSE+Pk/04lYKz+9jRSEjYgKUjgydLJptAlp1s2Lu2uRoMxtXaiKoxA0t18xpMFIzV1WSHrw3PnquDqZh8EtODVjaePkh5Ixr4xMNYWpbFKY8+9aqKmK7ljYrQMl2murNSmV+Qmx7vjX6Bu8VVar06taituEoSKA+UpBTx65JSLFMneJWKwmu2J5n9aScnPoZ1EpIipCeKp9C3B65E4myNmVYolTLpNR+FoW5zUdbqcjV7HEhmmhShSWpvmmYnu01xcnUGnv90kThPmiQzq8E3w18ticvyn+LlOswoU3cV5q2vjtRXr8+drMiICvIOjZF6R3Cxcl+D787Q3EBFZVWJ9MQJWW3bhhRb3akFyXYAku1wLNtPCHKQTZLHdR5iSa7cu9BkXrSn7HrKSs2C8ywAoc+MlY77Q57Tnlx6AWS6VvW9vmjBub5qEZgHD7qYOWRjQdZYCbkiu3mbJzxL5JSqYTewXxLPCowA2XF0aAJKehrcthPUgpIjcBvofBYOwkPH6aPgShc6guxvg4nQ3IHsbGkLsVEkD0pyuMonI17Rf8qMTvzNbBszGMEeHsEa66Qnc6cjQ9AC1pI5PZ+cE2dyn5gn5Q4c7n8S+Utjud5P2f2Mi+AWscvIFciUTp8+ih/e29PL7gfR8Mbzz6Mx5ewBRiXoJTn/cQI72v0AonWZ8WblDP2kDvHygqi8hCjp9AB/b6fF0zSxqYJeqTJQESIrmRMQHMBOD5ihj4hXuCK8SvYm4ydIIr5UqpcyftbJ9EP2Zjumq4PtZsoFN8jZlyQ9+cSgkXNhwL2cDfNMTCdQJFVGRlYmKehOJnbeRrZbV96ZHppnkgWZ8sLSO8tJbfgczKcLR14l50wzQ8LHc8aK5FDnfW45zesz4C0gjy0IV2e2zcJJOZqmBDfZfU5tttiCUbo7oQ+77+G87z9+UPetUwrcogadEeSb8M8PGsE9agH2pHJ75sIxSmWN4MOkyigvVx+pm8Ig1k6ZqTN4xjVmhwSbcmZl+/n5GaJjg9x9pjtNm3Rc6DLN2Tcyl+Mqskxqf2eC/0u2hXEW/IX4OAY5aE8j4zysHR7o6RX8Bb4Aat95xxYvskPobP8eL49gXD7TTDtNSPCBYm1ZkkKRVKbVliUoFAllpRK5dsYMrcLDQ4GvconwPXK3NFEuTyzV4tH3MdhhGK6psQdoseA6Os1g/8u5gw3wq19eZw8AHxH8EN0vRve9bfc5CZAB1X344QHBdRH8htCsZD+g7yPZe6oOTfTRSizA3uFBYnFQuDcWaPABgahlYrFMTSCC/AlK82SdHdQxF5GtvGjj0wS+GCfwDTwS+aEHFX4ikZ8CIfATNUVWp6pUqdWRkXPSVKq0OexFDHUY9Z3DzUg8GPHhNPsQvCoYftrZ+PTE0ELQNZFmgCMWWoX0flxd3WTrMrA3FSD7ACnKKQnFdd4UOoAoOfBEr7Ne6kROioBewGiYkzdhBOhCB71bN4cDu62P9/wGSpivYI1FkEB6lwMs1kek/xlCC11Kv281IK3gRu4Ki1kllUQVUnOwpHnqjQbHNigPT96t4TKoVOxgLRRj6T/WHQFRbGOz9aPdMV9tzAcg0FTk2B/V9juN+ZUVthYZq4db2Gj7zIorSYEl9UuMxb01kaS9iq7dyymE9g4qRuDQTkNXS5iqcT1U6dlp+baGGkONrdGmpFSZEOaFE9uJ9Vk6/2lQmhlb3YUbrLC7Z6aO9t3QlBGq2HVClb2mLnp6Tf2JXquM8b1Wg7gLmc4Y326lsvaNtVuFyeEei0V4ArITO65oqgn3cZAe42A+syMRjPbQSuwU2BtEFbIFYOgwyMBNoildpxfAi7hDeCvIAxm4LzS7ZZ5g6NQmENn0HOml/ZJ0g97km2mr6iJInMFkgB7kvyeT2MpJbyT1s6rCvk9N+fBj5nXwVs62DmsfqcnqmSxaisb643jfnsUVOskcsvc4DDEC9wDO1T/UR59AdytTKnTYnitCvkO+x4s5AySB6Qp3mY9rrCayJDbQPzpfpygO+a4Tn2+YeDpaqKYM9noZEiXZWNhur8EjcRstl/EhngFYXAPUfq4zg7w2MoqEci6qOlkeHh4SOzO9xqipygjrcU42YDuTER1tjE4QFLvKZrhP8ZL7hM0yyWQxOSGaWd7uRSZNUVyQX3SBXsNNnyH35IwLDTY7zFQw8cKwp9u0iQ0ejYaaTQUFm2r0kTWbCguRGO8PiskNU+dFS6XReeqw3Jgg9mpeT61RX7NxVn5PjQFfI4tNgYGm4khjabS/f3QpP+c8ZjKaM5hCYgEmJDP5NhalTT5xsU6J05u2lDqtDKmJN85OCjaULoyMyPQvSU1skumi+zMTmjKVhXfPGOb6HgyMmumZzpwOUgVGZYfEFEV6OQu1KXG+4hpZqF/s3CR4Y0PdTN/NLj4Kby1HeGCkTrJ6gYrUohAPDEalkRgFD0+jJ9kZIc4V8zbBSWlUKCbypZtT7965N3x+lLExfMuRnWqtJmz3s/2a5ujo+RE7jx8N15wMy2mMiZmfExaWMz8mpjEnjL43a0f0K12/9/Lx8Tzadjp6e17u1ugzHS95+/p4vdxyKWZLoakRj240xfBXLKNacIbtYO6Rczg2lXq249zwUuae9T2w9nV0/zDS8cXI7nrgPgBbp4MSDeTsfQ4c84jvciiJf+cd0uJwzYL7G7xhkOAu393AyPg46zQtBq8yvv8rH0AfGP2lxQGbFtehoAp8zLb9f2I/zl36RB1K9aoKDjMPJrgT+BWuRNGUM4xm2ti1CB+pOI/H54lPa2N1GP1oOGMwmgV6sG/iVJ9OD8lG5+G4sfOwEJ2H6xqebzY2N0akcYHuzgycQMjHTc931jseicsCx47Ep9KlUTFJZa05hHcH6dssJ/iWP+fjlmFAHwG7++F1eKUP7BZ8O/xPepl1B+OB17Uf/ojOf1dtuQOO7BY+BaJz4FWrG3SxupP9GPlw5JpgP6nDkHoCe+vGY/aGUPXrAQwZuSZcR+654U4/fB+gLw4dxZH6SPCbFmPmjx3GT7JRwGsP/OF879KlvfDMsLB43adpBfAtjBAsAu/B6KNHl1y7Rv8B7MkY7LQ+t47k6fA8k8g8gaQSjeaRE1tJzvMTTeWTc04HbkEhhnBd9M6ZqdV6rip1plL2NVBD5+E4PH8hvIjnPwfEAUmBMi46NKrCLPWLLtKHZMmH+phtT9DiRWiJJfVjUnN80q461JOfsKvjWSSIxjSCKBdfle/04ADxPhSuVxmjalKVoSr3IJ/pqoy6aENNZuizTnGclypAFG9ITNYZ6UpHPmLyBZXTA3xFkz1lXhFFccGy2Fmh2llekwJCdL4aFJ0GxpYY1Jwrir9Cja3ccPQoq/Gakke+EAqFKSg2Jz1acsVY5zbH4HYTvvrjJJPbOrSAhwfl4WnvXQZOlbXaynWDlxa2/aFk+43P5i3Gvy4vWP1RecsN+u8dVzZnJsVZ08zPwfwoA/2aaXsBfgfkvxYA8eHF75/pb4xKiP49/GYR/PuJxe+/PDA/KjO5/0rtsU87W/9cMLyOM4Lvr8xiVoVE4Hc/KLIHkSPX2DfZfnTOUuIeJONYvximd7SrzElGEVIJ99kxej80mbO3XFqWtzmm593bsUmZvVdW5G815d9glvl6w3R5cThuHLR2+HiB88HF4bh7cGfGxdZV7+/MDw46CR9kXGpb/cHOWQrZfHrzMrX1j94+6OxcGb9YTWs9Pbi6XdXEtq9FZ/ejJOZQkSwKX5IYe2nPnW8HsRvztScO0gnj3ty7cvD6hQvf2d/co49awA+nxr29B36hn4ciC3Qee4WP9GwMs2sFD9FecjjzihyJu4OPt7EJexPlxN4N+kDFSf3Wt7mksl1vNS66uqs0v8dSpawzL90buXjTp1k9DbHG6tWpmd1VkfqKZYKHg8ajanhkjqVi2Zs9Welb3l07//TqNGefC5qjsi+teaHF3YVZq8o16pLVebmry8KR3ozw7wgIbtEKHO0gK7W2kCJw0g8v+AuCBxJ4VyIPJz2ggl4Ex4kRJ6qdOuQAvzUKX0v9lcBJzx2B62zwzwmc9B8S/Boe/yMeP+kLI3AjD/+ch5P3WJ1eQXCaxwNWgr8jOHn30+kMgrME3gXYUfhDMt7VNn6PA3z+KLwdzCVw8v4MGe9hG/8qgZP3iAh+MY8fzYDh5P0NAve1wRcROE/nsVE6u0HbU+FrwE0H+G9H4cuBK/hoFD5/FN4Okh3GHxyFP0O9yK8L5uN3YEf5sBIsIHwj732SeYU8PdR9Mn4ifI2Nnzz8lVH4cuoPT4WvpR4ROA7i2gieyTz+kQf28ePga6hsAkdxP32I4OHhy0f6CRxJH33PAb525GeH/To2ul/doN+OXygn/Jlu48+Bp45fA759qjwsB2EO+35sdN+7wamnwtfQTk+Vk+Ugyy4PglAy3sc2byeB8/p1fVS/ujspB72zwzF/bj9VH5d7OI7vHYW3ZzrAhc+N4nlm5AT1OdZfmI/fZ7HpL5IH6oxdrxlI5g2yycOhp8LXUD87wG/Z4IieNOopcCwPgwSODZ6K4FnPr/cgPx7nAQwO8DV+PDwGwVsInvU2eagl8GkIXiAYphBcSiGfso56gdxfNzLXwd5cH7U33dRNAid98IRPoTb79N1Tx68ByqfYLbS+BZSD3bo+are6qU+eCl8DdE+xcwhPO4+H9MuS8Qbb+GwSw+lHrjEXkb+094Q8fHc44Qbb/ziS5Cl+ZDlbfjb0yQh3YoYWt3KCwxPj2om/4V5Sbts2IZR9IllLOw/a33ULQ74yaPy7bhx+wUxiO6HrpeQfR9582wn8gfYQfvPt9dfh18AXfk1egHsAXOCDV+F77YIhC/QC/8diga59e/oeWiwP0QXct/W30zX0fTwX36/KxwQyx7YHJ1I6dBPNEE8xhHsrZ0wfjRsnu/u6kcixE4inB0qlrjJuuq9cYg8YJUqF3G0I19yENyhqkiv9C+n5GR/wCW84hm4gwiEUwzVHaGHaSc+xE991DOydx/Smsf5jOobPTAOqjcmjT6DYzYXvM+X0Rvs8bcBjA/zxUkdbWwc8y7aC21C7Rdjf8PbbZJ4sJCt+wqnIpiIh9ORsCVlSO1MoSPXMYBwrkeDCg16j0WrHun08/QXjEwhKmbvYg/SeESxCPDDrX8HJc2Oa2uXRGUHhleEJC3NDa+ckFRkXHZ5f2NuUJkr8P86a5IKQ6CKDr8yYGpS7qaUsNqB5dlpW4vIjc+t21MW5pv2gSshtalkfllqskggT65Kk3l7G8vigxTX6nEjpFJcZLu6xZe25809Eag4sytsw1yCLL+WOR800h3p4q+Pk4cla6VRfbWRc3rykBS8ZdLsXlu5aGBue12ikfzIkqbwUbEs1l64NnAICDBnUqG19xWZbsS04Cs5iW0C3gLOjOvZXZCvWuXyE74NPRz5COkjSGv8PP+XQlnicY2BkYGAA4ooCnW3x/DZfGTg5GEDgxCNZSRB9kp1z/n/Tf2yc39g3ArmcDEwgUQAjPgrPAAAAeJxjYGRgYN/wj43BnOvbf9P/KZzfGIAiKOABAKJwB2t4nF2ST0iTYRzHv3ue3/O4hoWHQYcw9SAyPNUaYrZLxRhLQsSGyMsYMdZuISIWHqSDJxkvEtQY0ml0kBCJ8BASUgfr4CGiQxiIiJBg0UGGSLS+zzsH4QsfHt7397y/f9+vTKMIPtYiYtLwzT7SZo+nhS/b8O1TpNvi8LWCr5ZRtF2MdcAPlxkbJ0mk5bh5mtf85y1GTBUxewGTZqtRj4B5v2PZZBCXd4iHNgBhPckjJfsYlBw8OSLP4akD3JNVeLxbUIt895BkH56qwgsrFEwWBfmErOxiSNbg6Q0U9C5G1QniJoUbMoyoLSEqN1mrgi69hGE1iKjaRS70EXlzFeN6AqO8l5UsYrKHCZlChvlykuD7HyxIHQ845xf7HnfMOvzQGHrVAmLqM8okoW9jyHAHegS95ywW+e2XfhPER3Q/qnLCPDvoaJtD0SEdTcLAlps77GaP4YkI58phkniqhKJDtkics/iI6gNEdJV9zqLG+4+512esMR/aRIVnmnfLuoYefn9oLmJetSOv2huH2sM3/YNzdqJP/8aMfoU1k1RQl9DJ2I7TUN3lfucxpgrok9XQfZ4rZKhttvHXHnN32xgw/SiFjtCj1pFQM4jrlyjqFPsrYYA6XpEVvAj+467EIsx+lhRQMY8aX22NfmoxiFvyAdfMIea421ygu9Pc6Uicbk5Dp1XgQfrPeSmAHnJ+cr5xsbMEXrVNr7agT7POq6RELgd5Tn3aytki8KTr5yy5ph//h7PC7YhcpzfPB723/Hg6R4vAe92NhBSpJWvobhQidbupf1LXGKYkhUxQm/f+ARdUu5F4nB3OQWrCUBSF4VPBCsVABDUaJKjQgRja0oiGN3TkCsQVZODMNThz1ql0GS6gGxBHbie3fy48Pi6H+857kl44B9zoT21d1NLAdji0MyZ2xZH9YupJ4cnabuqo5WYkHU3tB+du7pYmDNhVzGZEc4VNZ+SdEZ3vijUmiZnv6tF5xoz9nsr6hKGuNCDfYWYFTu0NZ+7cXdoec58/7BW/fb+snxhwyH9uGDCh7Yo5byUkW439hyl5hV/cTdnfYLCFcnzok2SPwY4qmPvY3F25a5IFNvulJtb/BxtQXB8AAAAAFgAWADwAiADEAPYBGgE6AXwBqAG+AeQCEAIwAlwCggLCAvQDTgOSA+4ECgQ8BFwEiAS8BOIFAAUIBRQFbAWqBeIGIgZkBpQG5gcaB0gHfgeqB74ICgg8CHYIuAj4CSIJcAmcCcgJ5goOCj4KYgp+Co4KnAq8CvoLEAtIC5wLvgv+DEIMaAzSDRQNPA2yDi4OPA5SDnoOog7ADtgO5g92D4gPlg+oD8gP6hBAELwRMhFQEW4RwhHQEd4R9hIMEhwSLBI+ElAScBJ+ErgSzhLiEvgTTBOqE+wT+hQ8FGYUuhT+FSAVWhWEFZYVwhXQFfQWDBYkFlQWaBaiFrIWwhb8FzYXVhdqF5wYIBhiGJoYsBjgGSwZZhmuGgIaEho4GlgagBrWGuwbABsOG0IbiBvyHEocnBzYHSYdMh0+HUodVh1iHW4deh2GHZIdnh2qHbYdwh3OHdod5h3yHf4eCh4WHiIeLh46HkYeUh5eHmoedh6CHo4emh6mHrIevh7KHtYe4h7uHvofBh8SHx4fKh82H0IfTh9aH2Yfch+CH44fmh+mH7Ifvh/KH9Yf4h/wIDIgaCCcILgg0CDsIXghiCGYAAAAAQAAAOAAawAFAGYABAACABAALwBZAAAB3AYjAAMAAXictZLNbtNAFIWP47RJ2iRqKyG6QGJQKtFu/FNlFRAiqpCoEgmRSt2wQPmZJlZdT2Q7ibJhxwaJJ2DNBvEuvAJvwZaT8VQxFZSyII7H35w5c++dawNoWF9gIfs94J2xhSJnGRdQgjBs4x4eGy7mPBt4iKeGN3N6CQ28MVxGFe8MV3K8hXN8MLyN+/huuIo9/DBcw75VMVzHgfXI8E4u126uzj2t27CKFc6eWy8MWyhb7w0XULc+GrbRtD4ZLuY8G3hmfTO8mdNL6BVqhsvYL7w1XMnxFr4WFoa34dgNw1Uc2K8N1+DZM8N1vLQ/G97J5dpd1Xmipss4GE9Scez5nmhHqYpER6l5kDrteK56cjwL+/EKxUCm/ZbwHc9rave5jJOA9rWiLSKWoewnch36cHhklpc3MuQmd7CLdhgK7UmYJJHxXI7ELBrJWJyddoWayuhCRanoBkMZJZKF+ZM0nbZcd7FYOJcqXv2dobpyb8iOlP8YIMwcbp+NcXEChSmWiBFgjAlSfjCHGOKIz2N48HkLtBFxRXEU6PCpMKc/hcOVmKzQg+T+GUL0qVyrAgPqKbUW2aff49XMxX7CeK+4u8NPXnJXwrhZnt+51/EEvZLZJDnhuM4YcC60I6XWx4irV7qqS2oKF7eeZ53rT567dWxAx+152qw+1Oe4jpOYUyW6E3OOIyoz7h5pReAMp+jqU0ypRDyL0hkE1YA1rLTV7qx7vo6a0tuCy2uhL4d9ULob2ehwn2KH3L+4HcaV/7mC8JcYrn5rq7fq/gQl+PaKAAB4nG3PRYgUAACF4W9W3VXX7u7u7u7u7nV31h1jRmd27cRWFEXQk2JdVFSwMU9iFzY22N1XXb0J/vAOD95/eOL85ddhDfyPp5mJU0llVVRVTXU11FRLbXXUVU/9TK+hRhproqlmmmuhpVZay6KDTjrroqtuuuuhp15666OvfvobYKBBBhtiqGGGG2GkUUbLK5/8CiqksCKKKqa4EkoqJavscsgpm0S55JZHARW10VY7y62w0iqr7bLbHgccdMhhRxx12hkbfBKvrHLKqyDBGGONk2SpJT4rrYx77gfiPPDYk8zXzyzW0RprPfLQXets9dEHX3z1zRabnbLTpkAWO2zX3msn/fDdT+tt88ZbkwPMM9ciL7wy3i8T7JfmuZf2uuCcfZKluCTovIuuueyKq25Kdd0Nd9xy2zsThUwyRVjENFNFxWRIN90Ms800yxwLzLfQ+0BWx2wMZAvEOxtIsMwJx+OnJCVHI+E8U4PRUCQlORhOD0aDKblTQtNDsVAkHJucFEtLTJ8RCYVT/yyiuVIjGdF/Sizjrxv9DS6Pg1QAAA==",
            "type": "application/font-woff"
        },
        "$:/themes/tiddlywiki/starlight/ltbg.jpg": {
            "title": "$:/themes/tiddlywiki/starlight/ltbg.jpg",
            "text": "/9j/4AAQSkZJRgABAgEASABIAAD/4QarRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAACvzaAAAnEAAK/NoAACcQQWRvYmUgUGhvdG9zaG9wIENTMyBNYWNpbnRvc2gAMjAxMDowODozMCAyMzo0OToxNAAAA6ABAAMAAAAB//8AAKACAAQAAAABAAABVKADAAQAAAABAAABVAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAV1AAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklGAAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAoACgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A9E/iknTcf7ElL6ptEikkpdN3n8if/UJvgkpX5Eu/PwSH3J5SUsCknTfgkpXZKNPJLyhLukpSdN5JJKUlqlCSSlaJJJapKUEvwSS178JKf//Q9EP+oS+KUJf79UlL8/NMkB4pSkpXmkfBIQkkpfRMUuEklKSSSSUr8EvPsnTJKUkOEuT59kklK/Kl/rCXeUh/qfikpRgfkS/j4pDhL8ZSUpL8iXxTx8klP//R9ES7pFL/AF1SUrsnTJJKVp/sSPeUkklKHj4pflS7JJKX5CZLWfFOkpZL8iXdL/WElK0+9Lt8E/nzKZJSvwS+Pglolr80lKmRqkfhCf8A3pHhJS3dJLT70vypKf/S9EnskkPJL5JKV/rCSWvzT9klLJQkEklKj8EteE6b5pKUkP8Acl+BSme0pKUEkuySSlFLyCSXx7JKVqklolM88JKUlEpxPgmSUr/ekl/rKSSn/9P0T8ieE3xS/L4pKV2SKXyT+CSlkteySX5ElK+WifhNql5pKV+CU/NIJJKX/wBZTfgkl+RJSuEkpSEpKUlHikl+KSlFL5JacDhLRJSpKX4JJa9+ElP/1PRUySX8UlKn/el8E+nCUfckpZJJL8iSl0oTJfNJSjzKSXdIeCSlcpa/66JfFLvEpKV8fuS15SlIT8+6SlJJJJKVql8EtfFOElLJJfDVJJT/AP/V9E0/uSSKWqSlSUgPAp/4pueUlK+GhT/BNKSSlaJcJJHySUpL4Ja8JCUlK/GEkuySSlfFJJL4JKVyl8fv5SMpa/FJSvjolp4Jymn70lK/HySGqXdKZCSn/9b0RPGv96bt4J4SUseE+qbzSPmkpUpQklpKSl/wlN+VL/X4JJKUdU6WvwTJKV+RLskfH/al4pKUlz2SSn7klK/KlOqR/wBQkkpXkkkl/r9ySl/gmSSSU//X9ESSSKSlJJeaSSlJJR5JT/qElKlLSRCXdIJKV4d0uEv4pafNJStUoSSSUrhP8R8kySSlwmCSUJKXn70uAm51S0+P5UlKKU6p03+pSU//0PRPh9yXwS+KSSlf6hJIpTKSlRwn1mEyX+vmkpX8Uo/3pJJKV2ST+CaJSUpLVLlL8qSlafekl8EklKSS1SSUr4JfDul2lKElK++Eu6SWqSn/2f/tI2RQaG90b3Nob3AgMy4wADhCSU0EJQAAAAAAEAAAAAAAAAAAAAAAAAAAAAA4QklNA+oAAAAAGBA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KPHBsaXN0IHZlcnNpb249IjEuMCI+CjxkaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJPHJlYWw+NzI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJCQkJPHJlYWw+MTwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnN1YlRpY2tldC5wYXBlcl9pbmZvX3RpY2tldDwva2V5PgoJPGRpY3Q+CgkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5QTVRpb2dhUGFwZXJOYW1lPC9rZXk+CgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8cmVhbD43MzQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NjwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+Nzc0PC9yZWFsPgoJCQkJCQk8cmVhbD41OTQ8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc+bmEtbGV0dGVyPC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8cmVhbD43MzQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NjwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPlVTIExldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJCTxzdHJpbmc+MDAuMjA8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQudHlwZTwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mb1RpY2tldDwvc3RyaW5nPgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LkFQSVZlcnNpb248L2tleT4KCTxzdHJpbmc+MDAuMjA8L3N0cmluZz4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+Cgk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0VGlja2V0PC9zdHJpbmc+CjwvZGljdD4KPC9wbGlzdD4KOEJJTQPtAAAAAAAQAEgCTgABAAEASAJOAAEAAThCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAHjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAABOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANHAAAABgAAAAAAAAAAAAABVAAAAVQAAAAJAFAAaQBjAHQAdQByAGUAIAAyAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAFUAAABVAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAABVAAAAABSZ2h0bG9uZwAAAVQAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAVQAAAAAUmdodGxvbmcAAAFUAAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQAAAABAAAAAAAGYWx0VGFnVEVYVAAAAAEAAAAAAA5jZWxsVGV4dElzSFRNTGJvb2wBAAAACGNlbGxUZXh0VEVYVAAAAAEAAAAAAAlob3J6QWxpZ25lbnVtAAAAD0VTbGljZUhvcnpBbGlnbgAAAAdkZWZhdWx0AAAACXZlcnRBbGlnbmVudW0AAAAPRVNsaWNlVmVydEFsaWduAAAAB2RlZmF1bHQAAAALYmdDb2xvclR5cGVlbnVtAAAAEUVTbGljZUJHQ29sb3JUeXBlAAAAAE5vbmUAAAAJdG9wT3V0c2V0bG9uZwAAAAAAAAAKbGVmdE91dHNldGxvbmcAAAAAAAAADGJvdHRvbU91dHNldGxvbmcAAAAAAAAAC3JpZ2h0T3V0c2V0bG9uZwAAAAAAOEJJTQQoAAAAAAAMAAAAAT/wAAAAAAAAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAFkQAAAAEAAACgAAAAoAAAAeAAASwAAAAFdQAYAAH/2P/gABBKRklGAAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAoACgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A9E/iknTcf7ElL6ptEikkpdN3n8if/UJvgkpX5Eu/PwSH3J5SUsCknTfgkpXZKNPJLyhLukpSdN5JJKUlqlCSSlaJJJapKUEvwSS178JKf//Q9EP+oS+KUJf79UlL8/NMkB4pSkpXmkfBIQkkpfRMUuEklKSSSSUr8EvPsnTJKUkOEuT59kklK/Kl/rCXeUh/qfikpRgfkS/j4pDhL8ZSUpL8iXxTx8klP//R9ES7pFL/AF1SUrsnTJJKVp/sSPeUkklKHj4pflS7JJKX5CZLWfFOkpZL8iXdL/WElK0+9Lt8E/nzKZJSvwS+Pglolr80lKmRqkfhCf8A3pHhJS3dJLT70vypKf/S9EnskkPJL5JKV/rCSWvzT9klLJQkEklKj8EteE6b5pKUkP8Acl+BSme0pKUEkuySSlFLyCSXx7JKVqklolM88JKUlEpxPgmSUr/ekl/rKSSn/9P0T8ieE3xS/L4pKV2SKXyT+CSlkteySX5ElK+WifhNql5pKV+CU/NIJJKX/wBZTfgkl+RJSuEkpSEpKUlHikl+KSlFL5JacDhLRJSpKX4JJa9+ElP/1PRUySX8UlKn/el8E+nCUfckpZJJL8iSl0oTJfNJSjzKSXdIeCSlcpa/66JfFLvEpKV8fuS15SlIT8+6SlJJJJKVql8EtfFOElLJJfDVJJT/AP/V9E0/uSSKWqSlSUgPAp/4pueUlK+GhT/BNKSSlaJcJJHySUpL4Ja8JCUlK/GEkuySSlfFJJL4JKVyl8fv5SMpa/FJSvjolp4Jymn70lK/HySGqXdKZCSn/9b0RPGv96bt4J4SUseE+qbzSPmkpUpQklpKSl/wlN+VL/X4JJKUdU6WvwTJKV+RLskfH/al4pKUlz2SSn7klK/KlOqR/wBQkkpXkkkl/r9ySl/gmSSSU//X9ESSSKSlJJeaSSlJJR5JT/qElKlLSRCXdIJKV4d0uEv4pafNJStUoSSSUrhP8R8kySSlwmCSUJKXn70uAm51S0+P5UlKKU6p03+pSU//0PRPh9yXwS+KSSlf6hJIpTKSlRwn1mEyX+vmkpX8Uo/3pJJKV2ST+CaJSUpLVLlL8qSlafekl8EklKSS1SSUr4JfDul2lKElK++Eu6SWqSn/2QA4QklNBCEAAAAAAFUAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAQwBTADMAAAABADhCSU0EBgAAAAAABwAGAAEAAQEA/+EPLmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzYgNDYuMjc2NzIwLCBNb24gRmViIDE5IDIwMDcgMjI6MTM6NDMgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhhcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iIHhhcDpDcmVhdGVEYXRlPSIyMDEwLTA4LTMwVDIzOjQ5OjE0LTA1OjAwIiB4YXA6TW9kaWZ5RGF0ZT0iMjAxMC0wOC0zMFQyMzo0OToxNC0wNTowMCIgeGFwOk1ldGFkYXRhRGF0ZT0iMjAxMC0wOC0zMFQyMzo0OToxNC0wNTowMCIgeGFwOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1MzIE1hY2ludG9zaCIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0iaU1hYyIgcGhvdG9zaG9wOkhpc3Rvcnk9IiIgeGFwTU06SW5zdGFuY2VJRD0idXVpZDpFQjAwQjU5NDA4QjVERjExODdBNTlCQzExMkI0QjA2RSIgeGFwTU06RG9jdW1lbnRJRD0idXVpZDpFQTAwQjU5NDA4QjVERjExODdBNTlCQzExMkI0QjA2RSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDkwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwOTAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIHRpZmY6TmF0aXZlRGlnZXN0PSIyNTYsMjU3LDI1OCwyNTksMjYyLDI3NCwyNzcsMjg0LDUzMCw1MzEsMjgyLDI4MywyOTYsMzAxLDMxOCwzMTksNTI5LDUzMiwzMDYsMjcwLDI3MSwyNzIsMzA1LDMxNSwzMzQzMjs3RUY4RDFBOTcwMjlCOUNFOTAwNkUzRDcxRjgwNDdFNSIgZXhpZjpQaXhlbFhEaW1lbnNpb249IjM0MCIgZXhpZjpQaXhlbFlEaW1lbnNpb249IjM0MCIgZXhpZjpDb2xvclNwYWNlPSItMSIgZXhpZjpOYXRpdmVEaWdlc3Q9IjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtGRTM2RkQ0MzU0NEI0ODUyODY3OEVERkZGOTk0MkMwRiI+IDx4YXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8+/+IPJElDQ19QUk9GSUxFAAEBAAAPFGFwcGwCAAAAbW50clJHQiBYWVogB9oAAQAEAA8AMwADYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsWM2pk1LRLUWykThyCK1QdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAAAXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAYSbmRpbgAAB+wAAAY+ZGVzYwAADiwAAABfZHNjbQAADowAAAA8bW1vZAAADsgAAAAoY3BydAAADvAAAAAkWFlaIAAAAAAAAHeaAABAmQAAAxlYWVogAAAAAAAAWO0AAKuMAAAXrVhZWiAAAAAAAAAmTgAAE/UAALheWFlaIAAAAAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAADAQAAAgAAAUUCyAQ5BZsHIQi8ClsL+w2ZDzsQ6hKXFEYWAhe5GVYa4xxxHfkfdSDyImcj0iU1JpAn5ikyKnkrvi0BLkEvgTC9MfkzNTRrNaE21DgHOTg6ZjuTPLw95D8MQDNBV0J5Q5pEuEXWRvJIDEklSjpLUUxiTXNOhE+TUKFRsVLCU9ZU6lX/VxVYLFlEWl1beFyRXalewF/VYOlh/mMXZDJlT2ZwZ5NouWnhaw1sO21tbp1vzXD8cilzVXSAdat21Hf8eSN6SXtufJJ9tn7Xf/mBGYI5g1eEcYWJhp2Hr4i+icqK04vajN6N4I7gj96Q3JHZkteT05TOlciWv5e1mKqZnZqOm36cbJ1ZnkSfLqAXoQCh6aLRo7iknqWDpminTqg0qRuqA6rsq9Ssva2mrpCverBjsUyyNLMatAC05bXKtq63kbhxuU+6KrsEu9u8sL2CvlG/Hr/qwLTBfcJGww/D2MSgxWjGL8b3x77IhclLyhDK1MuXzFnNGs3azpjPVtAT0M/RitJF0wDTu9R11S/V6daj11zYFdjO2YfaP9r527bcdd023frev9+H4FLhHuHs4rzjjORa5Sjl9ebB54zoVukg6ejqsOt47D7tBO3I7ovvTvAQ8NHxkvJS8xPz1PSV9Vf2Gfbc95/4Y/kn+ev6rvtx/DT89/25/nv/Pf//AAACBwQfBggIJQoRC/INrQ9oERUSsRQ4FbEXHhh3GckbGhx0HcgfHSBrIbUi/CQ6JXYmrCfaKQYqLitTLHctmy6/L+AxAjIiMz80XDV6NpU3rzjGOd469DwIPRo+Kz87QElBWEJkQ3FEfEWGRpFHmUiiSapKsEu1TLhNuk68T7xQvFG9UsBTxFTLVdJW2lfkWPBZ/VsLXBldJ140X0FgTGFXYmVjd2SNZaRmv2ffaQFqJWtNbHZto27Nb/ZxHnJFc2p0jnWzdtZ3+Xkbej17XnyAfaJ+w3/jgQKCIYM+hFiFcIaFh5eIpYmxiryLw4zHjcmOyI/IkMaRxJK/k7qUtJWtlqWXnJiSmYaaeZtrnFydTZ48nyugGaEGofKi3aPJpLSln6aLp3ioZqlUqkOrNKwlrReuCa78r++w4rHUssaztrSmtZa2hLdxuFu5Q7oouwq76rzGvaC+d79MwB/A8MHBwpDDYMQvxP7FzMaax2fINMkCyc7KmstlzDDM+s3Ezo3PVdAd0OTRq9Jx0zjT/dTD1YjWTdcS19fYm9le2iLa59uu3HfdQt4O3t3fruCB4VXiKuMB49jkruWD5lfnK+f96NDpoepy60LsEuzh7a7ueu9F8BDw2fGg8mfzLfPx9LX1ePY79v73wPiB+UL6A/rD+4P8Q/0D/cL+gv9A//8AAAIFA+wFvwezCZ0LYw0jDtEQbhICE4sVDxZ8F+gZQhqoHAwdcB7TIC8hhSLbJCwldCa4J/cpLiphK5YsyC35LygwVTGCMqsz0zT7NiE3RDhlOYM6oju+PNk98z8KQCBBNUJIQ1lEZ0V1RoFHjEiVSZ1Ko0upTKxNrk6wT69QrlGuUq9TsVSzVbdWvFfBWMlZ0FrZW+Fc6V3vXvVf+WD9YgFjCGQRZR1mKmc6aExpYmp5a5FsrW3IbuJv+3EScilzPnRRdWV2eHeJeJl5qXq5e8h8133lfvJ//4EMghiDIoQrhTKGNoc4iDiJNYowiyiMHY0RjgKO8Y/gkM2RuJKjk42UdpVdlkSXKJgMmO6Zz5qwm4+cbp1LniefAp/coLehkaJso0akIKT5pdKmq6eEqF6pOKoTqu6ryaylrYGuXq88sBqw+LHWsrOzkLRttUm2JbcAt9u4tLmLumC7M7wFvNW9o75vvznAAsDJwZDCVsMbw9/Eo8VmxijG6ceqyGrJKsnpyqjLZswmzOXNpM5izyDP39Cd0VvSGdLX05PUUNUO1cvWiddG2ATYwtmA2kDbAtvH3JDdW94p3vrfzeCk4X7iWuM45Bfk9eXT5rHnj+ht6UvqKusL6/Hs3u3R7snvxvDI8dDy3vPw9Qj2Ivc8+Fb5b/qI+6H8uf3R/uj//wAAbmRpbgAAAAAAAAY2AAChlgAAWEQAAEq5AACa4QAAJq4AABLNAABQDQAAVDkAAmZmAAJMzAACK4UAAwEAAAIAAAACAAYADAAUAB4AKgA2AEMAUQBgAHEAggCVAKgAvQDSAOgA/wEXATABSQFjAX4BmgG5AdoB/AIfAkMCaQKRAroC5AMQAz4DbgOgA9QECgRCBH0EugT4BTkFewW/BgQGTAaVBuAHLAd7B8sIHghyCMgJIAl6CdYKNAqVCvcLWwvBDCkMlA0ADW8N4A5TDsgPQA+6EDcQtRE3EbsSQRLJE1QT4BRtFPoViRYZFqoXPBfQGGQY+hmQGigawxtgG/8coR1EHegeix8vH9MgdyEbIb8iYyMHI6skTyTzJZkmQCbpJ5QoQSjwKaEqUysHK70sdS0vLesuqS9pMCow7jGzMnozRDQPNN01rzaEN104OTkZOf065TvQPMA9tD6rP6ZAo0GiQqNDp0StRbdGxUfXSOxKBUsiTEJNZ06PT7xQ7FIfU1RUjFXHVwZYSFmNWtJcGF1fXqdf8GE8Yohj1mUlZndnzWkmaoNr421Hbq1wF3GIcwB0f3YEd5J5J3rFfGp+F3/HgXuDMoTthquIa4owi/iNxY+ZkXKTUZU3lyOZFZsOnQyfDaESoxulKKc4qU2rZa2Cr5+xtbPGtdG317nXu9O9y7/BwbrDucW8x8XJ1MvnzgDQHdI/1GfWldjK2wXdRd+I4c/kF+Zg6Krq9O0/74vx2vQs9oP43Ps5/Zr//wAAAAEAAwAGAAoAEAAWAB0AJAAtADcAQgBOAFwAawB7AIwAnwCzAMkA4QD7ARYBNAFUAXcBmwHBAecCDwI5AmQCkQLAAvEDJANaA5EDywQHBEcEiATMBRIFWgWkBe8GPQaNBt4HMgeIB+AIOQiVCPMJUwm2ChoKgQrqC1YLxAw0DKcNGw2SDgsOhg8ED4MQBRCJEQ8RmBIjErETQhPVFGoVAhWcFjYW0hduGAsYqhlJGekaihssG88cdB0bHcQebx8dH8wgeyEpIdcihSMzI+AkjCU5JeYmkic/J+somilLKf4qsytqLCMs3i2aLlgvGC/ZMJ0xYTIoMu8zuDSDNU82HjbuN8A4lTluOko7KTwMPPM93j7MP75AtEGvQq5Dr0SyRbhGwkfOSN1J70sETBxNN05WT3hQnVHFUvBUHlVPVoNXu1j2WjJbcVyyXfRfNmB5Yb1jAWRFZYtm0WgZaWJqrGv6bUpunW/zcUxyqHQJdXB23nhTec97U3zffnKADYGwg1aFAYauiGCKFYvNjYmPR5EJks+UmpZomDuaEpvtnc2fsaGYo4OlcqdjqVirUa1Or0+xT7NLtUS3Obkruxi9A77swNPCvMSqxpzIksqNzIzOj9CW0qHUstbJ2ObbCN0x32Hhl+PU5hXoXOqm7PbvSvGi8/32Xfi/+yb9kP//AAAAAQADAAcACwARABgAHwAoADEAPABIAFYAZAB0AIUAmACsAMIA2QDyAQwBKQFHAWcBigGtAdEB9wIeAkYCcAKcAsoC+QMqA10DkgPKBAMEPwR+BL8FAQVFBYsF0wYdBmkGtgcGB1gHrAgBCFkIswkPCW4JzgoxCpYK/QtmC9IMQAywDSMNmA4QDooPBw+GEAgQjBETEZwSKBK3E0gT3BRzFQsVpRZAFtwXehgYGLkZWhn8GqAbRRvsHJYdQh3xHqIfVSAJIL0hcSIlItojjyREJPglrSZjJxgnzyiHKUIqACq/K4EsRS0MLdQuni9rMDoxCzHeMrIziTRhNTw2GDb3N9c4ujmfOog7dTxlPVk+UT9NQE5BU0JdQ2tEfkWURq1Hy0jsShBLN0xiTZFOxU/8UThSd1O6VQBWS1eaWO1aQluaXPNeUF+wYRNieWPgZUhmsWgcaYlq92xmbdZvR3C5ci9zp3UidqB4IXmkeyx8uH5Mf+WBhYMshNqGkIhNihCL2I2lj3iRT5MrlQ2W85jems6cwp64oLCirKSspq6otKq+rMuu3bDxswe1H7c6uVa7db2Pv6DBqMOrxafHncmMy3bNXM9B0SnTE9UA1u7Y3trR3MDepeB+4kzkEuXP54XpM+ra7HvuFu+u8Ujy5PSB9iH3wflj+wf8rf5V//8AAGRlc2MAAAAAAAAABWlNYWMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1sdWMAAAAAAAAAAwAAAAxlblVTAAAACAAAADRmckZSAAAACAAAADRpdElUAAAACAAAADQAaQBNAGEAY21tb2QAAAAAAAAGEAAAnGUAAAAAv9ORgAAAAAAAAAAAAAAAAAAAAAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSwgSW5jLiwgMjAxMAD/7gAOQWRvYmUAZEAAAAAB/9sAhAACAgICAgICAgICAwICAgMEAwICAwQFBAQEBAQFBgUFBQUFBQYGBwcIBwcGCQkKCgkJDAwMDAwMDAwMDAwMDAwMAQMDAwUEBQkGBgkNCgkKDQ8ODg4ODw8MDAwMDA8PDAwMDAwMDwwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAFUAVQDAREAAhEBAxEB/90ABAAr/8QAdwAAAwEBAQAAAAAAAAAAAAAAAQIDAAQJAQEAAAAAAAAAAAAAAAAAAAAAEAACAQMDAwMCAwgCAgEDBQABAhEhEgMAMUFRIhNhcTKBkaGxI/DB0eFCUjME8RRiQ3KSslOC0mMkNBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8A9e2GTIUDksVQEZNgpBrBHaY6yJ0FXY2tcRiA7mMwbrgSCZn1oPT00FSyYiF+SupYqKUUEysT7iv4zAc6qMhcogSwE51WQGWagHYTG2gtjCq6O6JiCVIC1Nwb03ECYG86BG8YLOMiq8BiFZSCWAJJkgATM/hvoBkV6iA6+MQwgBRMmSCQARQSacU0GMjLGNmvudWSQ1kibxMRJnmugtiORCPMjITJBWGLCQTKgcE8dfroFtYKA2RsWIKiAKsyBAAa2an0P56BTkAcq0gCAA5oLl7SRtQkCTP3qQTITiIUOEOMhgAABB3tYTvt3bzoGlypSDklVDXgMVNPlMySRzyNq6BsTR4cmQnHkAKqWYBHCyAaEbXSPTbQLKMH8S4zBORrjHyJ9YNDFRHvoAcox5MbZP8AZZWn4wT28zLEccT+GgvjIxY27ybJYy03K+xqRHFfSm+gmouW7JjSbSvkVbQQBuBDTMgCm3Ggqrw+TKBUNaW5CiKMWAHU/wAdBO0h2Ug+IKTcQAsikntBAqaGR9BoFJdMeNmZMuNYQDdiQLbQRO8mZ0E7BjyBXWAR+stwtBAJisD4kAGfvoKhpNxu7p8ZBEwaLU7tFN9orzoECCVFxQ4lP/xugPAJNYiTNKDQPkbJjOTJ5CXDsMaEgAgyOYG9QAa7cUBP9dsgZWy3suQh1qab0AJmpIjqNA9oKYkXFeWWP9g9oYKQG2uH0n8dBsCwl6BmdlNrgxWYhgKbtvX6aB0sCqMkocQsdC8QIJltgTXc0M/TQMoJVcZAuDnyEm4MeVmORQ7CftoAASoOVihQFnZVE2gAiYEDeea7HQcqOSi5FaGxKGCndiO4xWgik/SJA0F3d1IV1DYe1QHBgt8RMiOJPT8wU5AFD3x5A2NcWOeBLHYEHaJ/fQFyMrgLjs8LMAUAYTcdhTYyON60poGGNMdxhnCi31tmIu5k0j7QaaBAZRk8CeRFvZ2uBBXckLWSfWvtoKY1xsuNbGZVAEXme5kBuBFNtqc++g58mV7PJlDE9wtb4kss1rwD600HQwV+0HvWbUBoAsFtweT77caB3HlcHyWEQbSxrKkkFCRBIbcHQTtJcuLkAdfHkRdlYW0kRA3JH/AL5j5bvH2eO26Vttu2mPjd27bV0H//0PX5M6Da4hQFtxigAqJN1a7dx/HQVuuuibmLSTM7AKCTFtzDY/u0ALI7IUORg4hV7kIIgEljQn8j9dACFzlIwsAlVde8sCJ/qgD2bf8AMGjIVLOpEqVgAFax3A9xJIp139BoMyBmU5iFYD/IWBUsCRWRaKnpztoEPjwuWLqwzLNFHau8SpET10FmLBmc3plKTELAImomZIWhj7dAULl8hCG2wkIXopJk1BZiQ0mfXQJ4hLoHAWyGJ2K7AkkzSDt+WgqEx+QIFhREFREkmWoTImftTpoJModFsUsWHwC27kKbXXb1knQMuRxkMqGve4of8gNFWRsJgfn7AiQmQAqcJMHGFuaSINAN135/LQBMrY1JBQPjQKVi0AMwN3dEbx+O2gtkYZWIux4hmS0s3IYmB0nmm/00CAY8vbCiLSgQxSjMAACZBp9eNAhkrkgXguIS0EAGimkzSI499AcYQEogZDBYiJYTsBzRh9/qdBsYyNCI5gdxyKCamhhjFWkzI2qNBMoQSSWMlqEyy1a7mTBFI599BRWWMarlbIcptLGhkQJm6sQNtvtoLPQyiqyrBQkCGDEtGxNBXr6c6DnVUdQsoEzFpxrcbQIIYAEVjmPpvoKW5ZOQVONWcZAoBJIkSBHrIPPOgRSDidMl4Yi7Jkq4FBsQazVqcToCyoK5ceNmDtfDMpVhW4TBiOPtoAq9qjAQRJjIJUK0MT9a804poHK/qXnHepIVAxiHckMZQED98/TQF+9bLmEsEUFipNrSxgk8DfedAUyS7kuwtCgQS1GAIFJMyLTyffQSIjwAkJEEO0iwqQo7eAY3I+2gZUvIxLgZMQC2vVbZhoiRWd4MxT10Axse96I2EAnGgUQBNP6rZ5n+MBnyqoOOy9f/AHCGghWAJikUFK+mgTGMb47rUFgm6bAsmBNKEbbyR1OwVVkcJi8LOrgPeFVoJJIHcImD9uNBghUIgwWS1Qr1XaDTYxT333qBKuqu4xgJhDM1jEBmBqAKikHefpoJHzYyJFmVUFASTVixAigkiB1oNBVmcGCWwqVvhRszUA2kbMaDQSYBGyhCIyY6liVBABJINSTPX1nQW8ieSIWz4+O42xMTZdERX47d3poP/9H2FtdCj41IW2QvbUmNyWE1MgjnQK+MUbMhW2SELCHJNAF22oOQNAr297hijAEYgFKtewBINKloFTvoCA65MmbIihYI7zABAGwidgYPTQMcjhWJC+KYx4pEBBW6efaYj30ECQiCySSAyMWUBJnYqBImvTbQU+CxllHJYY1aBIUmJqRSYp+6QBtQsCFIJZZKkKXUiCqxaCAYGgCoFGMELkJ+KAXCQtwBI+MyTFRoKsSS7EswWioKsKQCRUkbzIp0Ogg6Yggx5mKs1FViKHnuAJqev56DWK3eo7WEM4UghQtaQJEjp7egF28jEWl2CoGDAw0VIIINeRQczoMt9CMt+SQFRCQtSZJgrNDIrvTQOXXC1lpyAqCCGIAeGJWP6RAPtoHcW3B1axu7LdSoANXmIMAU/DQKww4i5UWm1LV3DKFgHc7ETPoPqCuqBAhFghbncBDMQCTAmJ4+u9ALZFIuxsS4JUNdcx2UggQTuIImaSdBFMaKRLImPIsYxkAYmYJmgB+/4aAt8VRgLm/TuNAwBNBJWpEgj220B8OW0hXqfhaCqwAWFAFFS30IpXQUIQK75AWKBgBvIUm5SRFOk9NuoMtxORSSbSGbF3bSQFBaNx99AB5wqq5LMO2HIqGhaiQPap9ugBxIsYkktC5DMwwn47k9oEESN9BlYE/p5FyHLaxBFyg7KGY7+hnjroEZVRxkDIytJJuKkXNSSKgAEftGgIJCDKLRkL9yTC3cLDFYIEdK9eAVXxwUoAUmjEi2DRmmhuJrNQdAQIY3SMuVSpGMAEmTc1RUGJmnHGgnjcs4QSyuT2NBUwQ0yTNF4npvoKXK+MMrnIAD42grDJ8oY9an2npQGyqYGNswKgjyi6kltpP9oWm356DMgZ08JrkJYm4VAU2lSZmNtvfQFDlOMpbPcVkVJAoDRh/bzHpoEzEENKBnCmSzAMF7YmagEbyBvG+4UVvEFk0Q/qAioUNQyAGmDMbV4oNBEMhDOMRMyDlEt3AAkmBSOojroKKoSFVLirXgshWgKsSKlgAa19NBiuJE+VATbBYDtAVpAIO/1im2gacZGYMHbHlMBiwMwKFTUe5n35gBa1vkrHht8f8AVETtdMfj9NB//9L2ALOjJOUqFqwtAMieBaSpM/8AOwbx9pDg3uD5WY95EgFZgjdT7ASToGzKnmDLkJGX/JUWqoAuMmh+P56AMbLzKqgcqyqJVRADGFG/PdxTQZTlyOj5WCFgy2TaTJg79BX6DQABSLWDRk7pNszkiiGo7jUfsdAoftUDEVwAsQSZUGoABrQ8wa/mFJK50CsUtNmRhW4SBAkmOOaaBiznFejUeWuDASA0gUioAgxoFxELbu65C8qR8Ste6kmsb/bQUZwv6iMqCbswImZNwoNjA3ImPXQRuxuWdGKZXURjKmQWF5UEdT+07gGxjHdlDBwYQC2SF+TRFIArJER6bgVbKpvtsIaqC4EKBQNaCSKxMUjrsDN4sIQpjg3AdpIFxMEA0iD1O300DIuMv2wqEAjGXgSSCkdNhMekaBCYBR1cnLJVJuUz3XSsRNdiI6RXQWYHtTKzKrMJZbikbWntpIMbx7baCQx45LLkGFmZlBiASJEdIpwd/poJMczkkKcgx220JUwKKYNSCRFfeRXQUhWzOr5GCst6zjpESwUGSDyT10CgtcMgxkgzfiCkXbAiDU8iBQU0E1ZA7Y2wi5ryKG7arVYVBHA9tBfKzNghgzv/ALNO+kgCVjgQSOBoCCRmhbfkSy2tadjdE0g0u4pxoMt1nw7Va0hlIBqqqIBHUzEjnQKQs5AzhcLSq2lwoPqIqaik0+mgCiXxtExkMqxLCpJJgoIqCJ/noEyK4dgzeIAGxmIUkwBQk+pG9dB0owNuNgWie9mLAySPks1gehGgnaGCFmZvJuhMXBgWHxAEjptXgnQFGFjN5GbHK9zkgMQB/cRN1fwmmg2KUIXLkBd2kg7EGkEXCoUTJ/HQIEQIcZk5bWi4XWs/dJBkkHY7zoEM2gtlUMGtRTNxmjEh4kim9KaC5ON2DJYjqdmEQVBtBAMAiDEinTQT8QaMjIoZGZsiSPkCFgmQDtJr+dQCf5cliAquMM7STepIMCCAIG0U40FBCsjNjKjHvIFoLG65SSJFKDjffQBlxXCbkYqbLYpHdKnZZBO1ProJFGYqgPnV7psuBMMTPT035+ugYf5EcMAHQu5IAYEmhlokTX+VNBWcU/8AVuO/j8cHr8os3is7c6D/0/YPK5x1UKbYDirEEMWAhY2ia/8AIHM0AmiKI8TDiVJlWB52jQLkeVscnvQMAB2N3SKWmKQB+OgYkKyeMl0Ui8oDBkQ1ZCxAHJI340BC4kxEZT23NYpIn5AkW0B7h+22gBwA46oxzMoR2UAGCJAYSAAI6/fQSTE4bO9oNjXM3awkmpECAQB0n00BQraGa5gqkOIQCIuICyRURt/wGALgq8MxYjIss67QasZkTBjrydArvbKgeVMKkgMGBUludqGJ6wNAxyBlUHK11G7lJAmhMMZ24FPpoHnGr+XGyxjxkKwEw0wSJI49fU6BWZzkuxNamRX8VQAVUAQIk0qeOs6DJiWCEYWlrytxWVKyLAf24nQCxnUnySMv+P4ypIIHJ3iN9hoNlAcIpN2XGCob5SQQlzAVk0P7QQmQvk8xBbEo/RIW9QqzAqegM130FWYY7sWNEyICGSbGBASTSlsidAGVlRRJiFl7lFCYqSCIMTFZ69QZr2nIh8ZuDY3VboADqVAoCRU9feBoCoXH2ZKY8amVY2xcYLT6g0k7zXQRvyti+YsyJflYSSoqGYzvSRT6aCuPMmPyG1b0ZvMBdcQpMWqYFABsdtADj/7PkByTjOQKWYA9wUCRwJ/foEyvjLAszm4y0ggRcbZmDEE0H7tBihVrzGRFYKBZcbasKGs2mI6fTQZ8ih3LBPKbf1BsDEgySTAaop09NA4a0DGMuSCYDkXyJ+UAkioio+ldAbrQHfIBjuuZVJIWOjUIkUFa8b6CgEO7ZcsozRfdSBSHBkf1T09tBFTkDZEFX8kPiAYiCBWCK0HJFNuNBgMgyGHDvJCKw2JaCXgRVSNyPadAuOAhusdgkxC/HtYkgRQConn3jQBThbCwTEwe0hCpAHYsgmoEgGugpjTI1zARkBlzMyCSwaJikyKHQBWBx3FwsiEUcGAxtMneINN9BsmUIAuM2HGCbUYiSFmsT8adQNvYLOPJjFmR8djsEBkEj2pzQbaDMjd9zKcIqjETEg1NwNCTJO1PfQQc/FVVMrMoBxxsaAVkECsc/WdAxyqGuQlq2KcrArEhe2a1Hy/nOgrmZwuO0BQCCXBLAg0HdbMgmdvXQT8X+x84SJm7mLbo2i2eNB//1PYLGqOHDXMkxlLsTIHdJoBXYfgRoA6hGZsKlnoWUi6GALCY/umhrX8ASy/F/itZZW0AdskC0VHymZmvryFGZPJBClUAVcpa5yBJZuqkAGPX8AxK5UbESbccXhLTG0gGpknbb76ArlXG1z5C0g/rKkTRSxPHA40CuClyCiIA3gDQyncsAsCIM++1NAXBUrhfIhCogydbpoIEXDen130BYEktkudA7tABA3Gw9QDEdfroGYUQBVVisBjFb4p3RcTJ3HTQLjIzlXyAEK0hrAZkEdxPJoKCeg0Bc5UFrY/HbBVlCmARbJFSYHQD3jQKFdiuQqrDJDsTMkHYGBuJpSnU10DDI7hWYvjVgWlVuIBMwaHnYxt+AOcjRiAe4E3oxBa4KJtkLvMxSaddArKCGd8kQCWIYRQzQwK9wrHXQI6doA/Th78gkmrMVESZkgRUetNABjZbVhFXIJBU9xkAQGuFancnfnQHG4e1goW9ScWIEVkttJAPrWa+ugMFLU/xlggQkHci0UJG0TP4SNBJmxpcmIHG5AJwgVNgmCD95B+/IEsSA12SQWZU8dgDqCDPURwJOgogEg5Lgzy1q9p6GaLUGKnrProFCsAQ6EOyk4kCkxdAF0yNwKH89AyM3kRcxLOKOS5GxuUWgd0H/iNAjXsrk48eSgAylSwn4kjtjfaONAlykIpxsfAiXC6lsHuZZBrO0U/DQVyW7QUTPJKERLH5AM0RMDcaBkRzjWBOVWBcq0RbIqBwCIiOsaDOoONALlditoRYBkWmI63Tv9qnQKFyQPMyks0l8swFkg9p42jbjQMID+TIVdLSXyCTauwiWJ7gCDSdAFuvL5FS4ALhyNJUiBJqTTY0+++gS6HKY1dRhUUEj9M0aCY236z7aBxaWx9qZGxhAMbArWLZEg0XpwZ0E72xBcHhLZIcBnugAUNvMRWnFNAbkCEqtsGcdrTIBJJ7hdK1/wCNAQ99rnIQw7y5hoiSICgV/dOgwDY0ZMhdqAkqSGm4mgA9zJH1pQDyDjyd93xqblaIuFIm6RxPvoKqsgLexkhmUnvABkEwLiJp7eo0EP05UvmLM6EO5BI9CprxNQY5O2grCeW3x5LPFFtxv333n0/loP/V9gc2UsMHY+NzBQzcStCbgNxE+v30C3KB+oiPkZirsRONe6gG3Ue8V50BEKyKuPExVZysIF0m0KamB+0U0G/2D5DlCwVCHHnysQVkCVoSYM0+vXQbvxXBMpW0hWcybd2MV7iJAqPwnQULOOwlYwrIVO0lxJio/wDGYiNAqln/AMlofOoiSAvfsbZJJEQJ9NAmId7KFjxx5REggG5a7wBzzGgOWxWZUVFqWZJkEikkn+2naPx0AR8qtlclrlLIWtJJMU4baKx0G+gKphA4ywWvtUEBSTJMAjav0gc6BrFZka041MAowYyoBEViTQ0rP30EMQRcb+FQ7Mvjy9yhR6bk12Jn24gL18r5GgCyShuRooQZpyAI40BXGzghct3jUXkgXB1MgsDzX6xoJ5GFzlsjK4Rb4lRWTtcST3AV/hoCReuPMIQ2dzsxJUxQA14rXbemgdiplKJ/2GZmcVQgd03Xem+4+2gyhrRZlIRybCk3GQZUTNaEzO+gmC7Y0yJkOOVNyCGMKpaSNjSBO9Y9wZssFsrBgqkI6xG8AqFJ5iRWfwOgisqJ71f/AGVPke0Sa91grG/X6aC5QlVBYqGtAxGrMsw8gxXYz9tAwCK2D9Ulg58ZyEGCy7cE1j7+2gVspKriLLlIUHKsUBWBtTc8HQZELEdwLO1lsEQyEkmtpgAkb9PbQbPlbG1uMXrjIOQNQigC7WiKVmmgxIhS7ISFYszFTILGAGavMVpoCjtCWKWCm05ICEEyFBHo3pA6GJ0AP6kZRhYdwLKoAYkiQQazTpFa+ugi7hWV8aC3yFVAEsGD3QF7d6aDpxlaqxRVWt/aopSSKUMx6jQTxjI5aB5sRAuclTW31EEjqf4aBcWPLkTHky9yAVHaaSIBitQT7DfQEl8lsk3u8KtwCgtJHeu9VFfSN9A748QLKGGPJK+FiZuKijkADr99BPJkGFVVBcqLD42WnUA77EintJ0Dk2M/iUoQxKu4aDLBplQBaYPOw9dAQJa3Iyvms8YADBqR60nrG3oI0GdXKyFCIAS7Vi2AGAANtI+vGgRlZmQsga5j3uBY4JNsxEGB0PE6BgDsCiBUJUkqxAjYMxO8Gm0aA2i7yWpbEeXtt+N10RM+sesRoP/W9gZORTlhX3DY2AgOJE0NJYxJr9NAXxMcbgsjYv8AILVkCBIikUIirbdNAvZK5GKA4j+o5uEEVhVboZ4mtI4Aqcyku12O9YZF/v8A7QAJFI9Y2nfQIQzZrnUHJjdS5mSgBqQGrFZHTQW7lbyZBjyWkuHMQtZm7f0oNBmOTHdCqGYn9WVUBrrboqea1P46CTP8yyYwjCFyQDLN3QxBOxE800DoMZBKLjUqO9mMwK0McRTeg9Nwym7Citixv4mIGIkWydqdQaUnQUzUYnyK4oFJAYiN5iIFOvroJKVWCLh4gzf7HzQmSSDQmu5qdBPwqbWaSMbdyERUkKAAQAxEVA9BoHxq7APkRlORgqsI3k1tIIExJNfTfQbKzpj7ncdzXGCCyxuLmg0PPoOJ0BCEu6JjkyrHIRu4FTQ0JFQTzPvoFZ3gFvm62YEbvZq9wO0cfQ9dgdQqI5XHbiBV1Vq2BWPcDO+9P+NAQuKUIXyihS0AGLaQpIiWBNK00GCt5AthCY4U5CADdFSIICgCKH050Gse6HQjFbbdCks1wG5iZ4Jg6AK+NgxKnKCb4VJNwFRT5QGiSI0Axoq341hFYXqTIAcf1CWOzDaJ0GutMFwXAIRUBW2YCgChmZPWNAy5x3shDFwrQHE7FmUDuO52gHQTv8jAnHXOD5IDSQAdgGitsb/TQNabSPMUZ4vhZoygKC4Own68aBWBYqgvOZbwGWDWAIuImqkVIjY8aCzoFJZcbTgPaQLjcVLE1qfly0aBEQ4wGJZAq1CioFygrJOxrH330EiFLGGWb7zkAi5hX5AgClTX6TOgcElUJxFxjJ8+QkBSeZ+IbkbxMz6g5OYABVJOWAWcih4JWBtb67aBlIHjl2xqFEYwDAJucCTuY/bjQc6Kq5apaAsK6XUZWC7mCdoJia+ugugY3Y2hxiKu4r3BhMCSOePbQKwxuwXKWxB5KMAe4BYoCoAMen8gkn6eJzkuhYCuQQoNYDRNwgAih39dAbhjIZVyI0x43YyzUlRHoAJ2+ugoDjP6yZC3juCu5BPy2umgAEn03poEZ0S0pkAvpZjEEK0zBoBJIgk/w0FhixkBSqDKXKXMC8/1GhMke/8APQJ4xb47P6br5XyW3zMz9dtB/9f2DfIhN5dkbKpgIWBgC6RMCsx+PXQNgElWGEYxFy/EKG5HxkTTrSemgRiVxNhRDltUDxGZrBmZBjgUFaDpoIWMZdSDIDKBABhjb2mK9pOgqRJRVxguWm4gBSGkSUkmJJ3+m8aCig5CfmBb5HBFK8TyCDzvGgQO+bIXx2tkZIAokBlqZEkGdt6aDIrTLqyrkQd9FA4iQRN3HPXbQC2ncL4WbGaSSjsbSRQzUbaAW1OMFlztBBtWBS0FSo2ApPvToAUMzEeNxCXl2n+lgbRIiaSeK6CzSDZeQpNtqkr3MTJiv9XQ/UzoJqqK+NVWjBnvYmApEXNGx36caBbjebjcqrVINJibyCxkHcfXQUGHuXPiYZGLMy27lV44ieY56zQA6BWOJ8Y8biQa3Egwe0GeJpvSs6Bgcj+RTci4aLtdBJhhbGxXYTOgJxq6471gkUAK1rbuJE0HTfQIMITxv4xagATIDaAAJN0xMn0roAoYoiPDHxG2WCgqD8eaECafeNAcLkY1yl4RRaAoCdwAmgMcev0GgCm2wXggmc7BuTFTT+6s/TbQFXdFuOJYtXIHxgmy43bGaUn9p0GDeKCXY5cosyUJrNCwqTxBPH20FA48YdHtGF1BDrBmikEgGIBig/DQSQ5LSqgW4wFxyKPEm5tuooT+MaBIJCCVCqJZTRoJEVgikitNBRnuUY1S8+QghgsNUOYFxJDSJ450AKwGKPCFSGAAAFJMiTUwN46H0AgZMpDM4H6ZFArfKdq0mYEmsaBFfNZaKtbK4k7pkmsqaAEcbaC6kkmMhxJ3Sb5tK9AZ2G8GPpoJMIcKmTy/pymIAwAp5LGImQeY99A+R1ZBlZSpZLPFjILBSJYViaHaKaDMiM6pWDBv7VaT3WydyZikU6xQNltJgQwZ1GVwwEkhpkTI3+22gkPMsM1zq9e0pdRQwNwmZt/DnQOgUOuVQQ2I2hm7b1EdZklSI20DKcpwret1xg4gLHaBzGwroEuGXJhJACqLgFYeOQKKVIIG37RQKnIYdQrOslrwZDFv6SGEAVI+h50ACmMRGH+lUC0aQRJkiaAwQZ0ArHl/9kxbLT5OkbRd+P20H//Q9glyhCDkTJbiF1pYU6mAQCBFPQ6CRyoceQ5CGZHLBQd7jOzExNaRvtxoKBVZiWxEKLbFaP7gApaSKgwQduhnQYF8gOLyXZMRCs1TIUVAaTBOxpXpoG/U8qYxSoaSGNtrMZJnY1FdArK2WvxLW47YZFIIN4EgkiJ9vTkHxuoe0wuQf1sxtuJioJBmF2O8cb6CYe2BcVZWsRKiCXmLRMxESPqNBW/GcZyXfrMBOW3ZgJ3gikVroFyjGoRzksyY1IwB7gQOCRd0/hvTQM64snkC2EM1ryRMSBbNY9PTjoHK2TEWZW7QsPgVoDAiDXgQCYEbaCmSAXkjAqOQciDZiF4AmIk7/u0DDyJdkXGyXbISDABEQpIMrUAbaBgrDE+ZQuPI0qMgliSCRAFxqTz7/UBiD4r2JCCio/dBgLBYGgkb89K6AEAkKIZ8gK4omCKtIYzJqa9d9AfJaUVMVym8FbaINiLQawYnj89A2RCoyKFZ8hpgRiCUPVSSTXj240CrILjujGZa4/IKbiQYFTuK+tAI0DZAMSgl2UyvatomDd8Y6mdufeADY8QXxpcBaGgGlYFSu8gkmpp00Cv3XXqGyB38rIJFFg77ccz7baAhXtxYk2q1+MSpuoJIiYE6AKpc0y0bMRkUkrUGgUEiDSm/HroGCzBCM2QguDctobcwSWHcR+HvoAf08b5lBUXAZTbFprWCJNpb8umgdrMpx8soC5LmFQwJAlQeYIJpO2gUk45OVnGO4lVDbhWpBNT6zuOaaCLFUZnxsA2cMzipUgsamhFBQg6ChZsjrkRVnIbWxC2qVr3Gpp039tBMYspOQdpR4U2KArEAMIBoeu2gqGWwWMVWlygEEcTIuimwNaRoGmFME5LSArg7taCbiDz1mB10CDJ4iUbyNjLkFe0lzIGxJ5JmP46CsI8kucpNlhDCe00JK8SD+4ToFOUT6KoBOSCeyhJAk/1A1g6BW7EZngmGPkbE0bHtAIp1mK6APhSRaEZwokz2xMiaExAih6UA2CcgFgcbESoyXGhAUyRIFQIpuZ67BXyfqPkMdjEO6m4KAN6ERI/hWugmrq9i2nGZjGi3TBgqa06c+vGgtD+efJk8MTb3zdtH90xWOn30H//R9hWGQsr5ERQHtKAMIJIMmaGs6CKEBiFUTiLOgDWxAEEnagoeK+p0DRjYIYEZo8YclgDAa2AYpMDbn6gEUACVDFyzgBRNhIqQJBqNvtXQBmYnI7AdzsEIYLQTFsnqakaA5caov6YaWIX1N9LqMJMg15/HQBXBvxmAVfyjIe2STcGhhxNT00BfIbUH9SMWZWhoCrFJGwjmvrOgOQJlNpABqZktLzQANQjc9K8aCWZHL3kBHI70O5UQPkTNRvUU0HSQEojA3lR3EFlPxuF3cSsfemgRmcXOUKhVg+WLhMzJgmOhB++gi4CYwUCtjEnCaTQmBad5uAP2Og6YWVUraVRbrblBmRFpFZjaPvoIZHIY2ZS8yWGNlHdNDuaEiabVPOgdrcl1oEOAy+QVYViBALEDaszoAxFcqA5WyKFUkdpZxJCjbmoM/wAQJGTDjRMeREdyFZRCsTOwoDsZ/LQOHcDDZ+niKrLsLbm5JIYbE7c10C2gv4zhCjICFhyRyNokzv8ASeNBS0kIr4rlH+TM5DBOSOdwBX676CRyHGmSVIGMgZjkJcsQQBuIgzIgfTQL5caPgDYwECszqooSQBUAAbGeemg02MLW8d7wxYUBAIif6TXjavAGgoreVbxaHATxqO5iBLBWNd4mn10AS7LEEhQwZFsmDAShoIH/AI8aCQS5ET/I+IgLjLKLg0OagxECNzoKS9sAJbhI84eWN0XMaz6in46DFvGTmR18mUFQgK1CmhkAiQGFJ0AXI2d4BlcTBlEkgMeJJBMGnT8tAFMqzsWxuUF+QRdA7t5DRSBz6nQMktYCR4mS1mUFQ8rW0EbyTQdNB0MSFNQSoADhgDAMqzk1p7memg5rGfGEGFIuYskgm6ACRxMEwONAQjY5DoyKxBbJjeQawfWsgEcxoHdXkYxkPmGKxckgt/TIIKyRz99BmxiZMNW7MZFkQSPlAJMjiNttApuRWLOpV0K/66DdiYJO5mSed/6tBPFZChmcwRiRgTsYqCDb7AH76A4iTfjR+y05DjdbVtPqDHuPfYHQUJBF/wAgDAYXAs09vaT3ERyf36CfjWkEI7EYwpWVu6EwQdvXg9dA92Hx+K79Px+SO6z5TvN0z/xOg//S9hHVkfHBOSw97tUsyiIkbU6mK6DnUsrXEtkTyAsrARUlQZAA2HFNBREA/UAkIo7UKhipHcZ6inT+IOr5MjIxjGHC0QAsKwCK9Adxt10C2lnCZgEJZkRQXVWmtDPMGY67aBWF5xYsfyxrIcDlS0CCZB5iZ0Duy35MTtauYTjDGApJDNvWRvWmgK5QoLIsNcGcSHoRaCCGE1Mn30EsmQK7AoGfFVA5utMXSCCTzv7dNBS8ZHbDlUHMw2EgTbQtQGtPynQJTJk85I7GWUEE1IBNKVAJBn+OgouN3PkVIcsSrhSoPIuELJIkTTfQIuQsvY5ZMYW2O6Ay/wBQhjS0/tTQG9LXyDO2Q4O3ZhFRyI+XQ/unQMxcBLoyLMZFJISTABL7yIoSDx76BfIgRlTLLAkpdIBKkkvzJlSemgW8MgJIuyZQiIgWZnuEGhHTf1PQMUC34ioysAP0gFuMGQxHdFDEGkfbQAMMQYkqLSZIEqDcYJKiQZkUG0baByzJfK2rUiBFYkEGq0WkTWPuGcqb1Dh8gFlggRIgAVAgHeRoGyggG0F+03AOBw0sBMVIqenG+gioAXEAETIrCwuQQTyeQKginMaByoyYoEBcYl7qMKzIAJgnf1I0BTHndcipC+RYf+0CTSSCS0fttoKF3yoVDKRcbWvlqSaBRMgViZ66CMlSXcY7YYqzWlXETFOTCmv8tBdpcYovlzcwUkXbkAVpJmIMRzoFVchxBsuRDa0q4JkAqSSfidjzHX00CnxkL5MvjcQDFB8KU2EUPIB20AXE2NcWMFFOFhOO0G5jUHcTt0+vOgdC5QlVuSigMogX7gqtfU1520CKJw5MjYgotJXsoSBuSQN/bmmgnkLuFZL7wGKl7bJmbhtQDnig0F0FqXZFDtYGViBBDEBmJAgR6HbQCARhe8F0jGCyA2sBQtyOOftoGd/9c2uFZqBQE+VGELQ0M1EaBcjBVDC7wyyjPcYWSRQydhHEHQSREYKiiwIBeygAAOxHyJO2+5/CoWKIVvclcpW0MLSbSZJMSABMniNApR1yDExOUlbWDC2hABIJJBJ96n20CkFELFfFepJySQe0khSGHPoJOgScl13nxxZPyFs+0WTFIn10H//T9hQVsyXIFRchlZuqTABUK0Rv9uugUqb1MMzJPeoDzbG5IpsZ9eNBNcaMEuUhXubIyqCFMUA3tgV9eugbvbyTRe6+VG0L8RMcDeafLQBT+pjqqNWCDLKACTcT6EiPT00DCLLTcA0vBFXhZIoTEkT9NAO0zcyzcvkDMQxtNLSWXYU2HM10DLlLqo77UntxwSSRJEjmh2330EwrZEZHZ1ZUByOvwFDBkEXUA5/hoK0hMgDocYUeH4gFjIhbWqT6aCSkIqu+S14k5ZmbZEAzBqII5+50FF8NrEIFCMhAPa0taSB0kL/xvoFUggoO4HfJaHJuBM2i1pMD3GgQQ2JXyFkbHFpXdligBFP6wNhoM8C58b5LVIloBFwgBpJAk/noHxo5LZGUUBvJE1MX9o5IHT30COX8QGR2EkqbiaMCpAms9aCfx0FhYSpCosk42xE91XCyKSQeZ/DQIuTGyJ5G8LY7zjYooUgCjAAwTtt7aCmJlKZCwHbKXje1SBI2Kxv0G+gQwfC7KAqBmZLGZQWNWpxIkTxoNKqSJVywtioPZNxYECYB2NONArZWucoCESGOQXAOaCnoLvwHGgZsqgMMjPiIYHIRAghjSQJIk9Z/HQKS14DXAEFltYKGCmKV7RDHnbQAKrNIBJ7jkzSSU/t2AAp9j7RoLZgO0LKFf/WsCCTMAkdayKCNBz5PGVLllbKGDIpZSADG8QIgDf8ADQGLXJxlhjxhSzqAoFs1PaSRSZroCXLswxh0ys5LgQrKsTETSd/fjQGchVEsrDWpayzSQteJ+g+0gwVoCMilZV72FGLHZjWp2iCdqnQDKRj7BYqKIMiWAntrUEE1r/DQBimP/rigAtTI0wSGNzSaEQYINK6BgqlMikzk7gydxVWYsRJAk7kR19YgFL40XGIsRxFboyAxWT6msn02OgZcqgB1YI4guoabVHYJjfkzEfvBScfkOFnGMfN7zIeKAC+f3xoEUCA7JIhCpc7Ckk1MA7fsBoGfyOQIAQMxutBuMA3CYWv41PpoHXFYRkBMKs5IZVCwBAMAQRt+xGgoC+Lu+GPASoha2ryRWhjf7DQCcP8AlsFt8cRb8d/b+nfjbQf/1PYMo+MT2wjxjy7uLiGJAUQYB2p7aBshLNjYVOO43WUIgNIBmkgVB+0zoJM648iFMRtyrVbYADGVUqKViNAZTEWAAb5B8cqxYDuBasCdpIJ0CkBUcM36riDBUq0CbjaBMgkw1OugARmcs7lwYKxAuaLlk9sgBRoK3oLnN7NLfpt2wHYyCCDIpECa8aADHjYHGzHEzAnIlQgUEhWii+p0DsGTIjEFcQlogdsQACJAEUiPbQTD/wCRVQSFCRkiZikgkESGt/foMDHjxKiZC4H63a3fQdRBhZ34gbaBH8Vx8dqMAA4ukiSZEA2kdf2GgfvtxoSrkMbFKGCAAGiBSJ2+ldApXsZciDFjyARFZIYSSe7mKn0roFNipkynErCiIGrTbuPWmw9hoDcqORY5zA3LMAkVgCQagn7jnbQP58bsCwQJjgqoJUEAUFCQdxQTzzoMrLjuyDCGLPfkJMEA1mNjEz+YGgADNnYHOb3RDjslZJW0kgRtv7aAElFZwtyOHD4yWIDLAkipkmkT+egexncjJl/UFCDOzSABWAx/noJ5MeRrvI4x4pDIqxaVHyNBIImpj92guo8rFAwZAsLkRdgahVpHAMz00GUMpW0rZJawKQoFpBmTvv27/bQSbyB0TxjIqliQ4E2sbriSDHxrI5gbaCwzxkaQPi0urXAgtAYrOwgzBpoJPlCq8CDM5cQY1ESaqeWMT/CNAhVgy41Be9DaAKAsLlgtbwvPt6aA348bPapLDIQwd4NSATC1mnPSdBNS2SwDHd5AFZwYuEGtSsxPIrtPUCWxse0h/wD8QSXYXKOCagRsdA6HHs4FuQFrEDbXCYkCQRMwK/Q6AskJhUgIU7coJPaBKkgiIBiTBH10FHHcFVTIFphSr2gQLQaUmp5440EgPGMIyAd+QKDJS0BgZgbwSYO2gYKyNkDQGtN2VT3iGkEgA2yK/noGAdJxhwyVU247lWRM2gTJAMjao0EfEyPlVDc6EsnaSIKwFahoACu++gbIjnGmK05fishiJoOo4g+3I0FXcdmJGGFwQUWj0aR7SLpPU6BXbHkxpcrlcq/qLEswoIkxsTT+OgnepOMFPAFYliGthSoiBO9QY/noD5B5rvIllt8XD57dIm7mNtB//9X2AYrlcAElST+rcLQAskLsRIEETTQKglYAaFYKogMpDkEEEKsRdI/CNAA4x5QSPHlRJJKySQSDMQT6n9iFGyMmNx/WFWchMlQdrniagkb8UidAxLA+U2uznesG2y0gwCBPSRNNBLZHUr+nIV/kVAu4F0zIPH8NA7MAMeNbFRSzQ5EQQTRgW3BrxEekgFUC0rkZS2QmJCs0qpWK2mJB0FLWdFRlvksztSQtKrJg9AeB+ICYyMiMQ4C2VdaGSRbUx0A0DWujsA4ABXy5AxkqFtqJMTO5O4nQJYXVbFIglvHBvBIZlBHbSRHQz6ToMlgcg9zAB1CAkMFBFCDXkQfYaDKSxbMGVbQfKQQ93cBQsaAxIoANBnUDyYkxXKvxyXqCDBWhMgSZH/GgRk8bKzHwYywOZgpKlgCZUg0GwEfujQMuIJjGJBk/ydjFR2mCRQcjqY/+nQA0JUZAf1IUQpkTPaYoTHHPA30DeOVLIkMgcnDVpp8TETJXfqI0CrjZszM6soxCWk9xFam4kViJmvtOg3kbH5XdYj44lpLAQWJmteQSZ340Gyl1JZbVx41sa1QoBJrBYUmntPpoCL1xhuxPIBY6xaQGuEKwG0zt/IHKRegYEqtzKnc1xEXbiTWaj67aBcjeHKxTKFvNrHoSREyCCAAaE9a6A+VbAwE5hdbbISvdNxtIBP7RuAKOHhcE2gEMoWRMxbtQRSG2p7BNgVDqr4sZsbzFfiQxFsjgAGn7EgzI7MXyoS7MRjxMaFjMRQClomaHQYuni8qVtVfKLjArIAAIqCeTTQZluVwxxY6lA72yKye6tTOwiNAMIFyMSgUEgIQQLTavI3hSD/zoHmHZTjghj5gzASG6zIIM1gUg9dAqNixhRcIgBg4Y3ALE7AACTvQ6BRFyMzkP4pyBAxFtxi00ImkQRoLB/wBWS6sO0RaAxDbLJqaMOPeNAvYreVmFhueZAIFRRoDCWOw0Bw4wpmqjEbbQtQSbQTAWabU50DXEIzKoS1IkUJUGoCzIIqN94+gSdgBdkRLhDOa2MZMNQSZ9oNdAy4SXDHDJOUNeDQRJjc04ER6xoGGRfDYWXGUQX3CQRYF3FK3bg9KaAX5bLaxPj+QuiY8kRO/rM86D/9b18xkErixElJY4sZugESZBYTvSaRX30FEyZk8bhCoXGSLoINBJJpFQOlfxA5FEBSfIiq3jI+JIooABkwafw0GXH5DjRrHORSuXLNxYi2hI2p0P23AOuRsD40YsyFWjJv3KSDIBESTz9fQJWNauL59od8akgWmaDqDIEis+saB1UvllHDqvxftBMFSBNZHr130FIAIYOuTMh7Ce0XMYJAH3MGs+2gi1tohwQrSuykEKFum6KEz7n10BMhgi3PlK2qclxBB3ptWg+x3nQZmJGEKq/wCxkuAYyKgXAKQRwDP399Ap8YYBaRC47lki8hgeyPUgT7egFSaDJ3OoBdXJUGTEtP25nQGYUgKt7GDjkKb7pEtSoIpWvA0DXKobzKCCGZ2EEQTM2tUVO3XjQTbGoe9jauNjcVSFMRcIBkgV6iNBNiQRMlWQMdoAAALKO0zAmOB+AUNj5MuRLla8FWIoYB37h0G/FdA5RQ2RoaP68bdwc4yQSR0jaI4ptoGJOVO4t41QMCQO4gD3kknj+egLkF1Xse1P1FYANLV2YgQLZ9I0GtTucqvja1TYJtUQSHiRsBSP46BF+eS+DlYA3QC7ASIj/wCI/tHQ6BFyOoyMIbwpA8ZcgEQRzbB9KxoFByYygyMsYi8sDyvdaQ0E1/dGgpiKloVWIYs8K7AyAasZ6evNeugUXKylWHkchcdsR8gSq27AHedBRRkYq6uVVmZch7u3eBE8mhj6aAB1dMYxlrVJK+MBiCJp6G07DY9OQCpjfEn6j48i8VPdSQ4igBAFdAVDlLUbI4DXL/RJvBbukAyaAEU0AC5EgOQu3kciQQapFQVqfSugL5+21Vc5UCgoygT3QVMAxPSdAyqMqkY7j5FLFqwQSCygG3ehE1g6CSZUuItTGxhyuxMzazGIBqJH/Gg6CqqVawW1CooAaTJWe6KRPGgm/d3ZGM4u1kWCTAqBcxMtBkc/mCEjHfgbEWVZyspcsaS0c0B6/v0GW1g97eTGFY2KpJlpuLCpmKfKfvoMVV8LLjDx2MSGJugQACaTJjbjag0BL4hbnVljH2lJkrUL/R/TT8fYaDeUZFK5CwA7zMlWFKSWArIiR+egr5Hs8vh//sW22Sbo26zE168b6D//1/X/ABnK2JQWlsZUC2hQGhkgEk02366Cq4sChMpNk9rK42mTQA9pIPH20EfCWxsQjEQhfGT8golbSASQNqD66CmTEW8uNA7JjAYglWMyJgCsmJr60roFX4OwytAYY0QAAsFgAwKbg7/hoClhZUAMYwYNwkSLwBFNhIJMT9NApXKHtDDCz7w17AGnfO4ryKU6HQVbxhAQxLNBxAPbEADeSOu000CuVCix1dCxDLjDSbgTbEnrtSPQ6BMT3KWsSyyzEDUEgm0CDvJ9499A2QBhDNerMQpAHdXulYMCRwDJroEvx9qIpTHDXwDUMwlWkjYRJnQVftyKC/LC1gGZVpcayZjjkV0DgMQbQAq9rIXNCS0fCa1Ext9joIrkYnxlxakjEUZu+gCkQw6Hc12FdAxdWxlwsWioN9pFtrWxSKx6b6BVzMb3bEzwgxm0C0ldhI3DXaDPjKE2qJKv42cm4AEAmTO/4b9dBseVMhV/EKwp7iQ3MGKEwaT6zoFPlLNU48hZQ4gEgt3QKxUgc9PoDJiZ2Vw1hICXoQxU0EEgCoBI2/doAkq1xdKN48qmisCbWasbHjb8NBRgFUOHORwttxBJlyCDQGQdvuIJnQTZjkNj5FwzNsb9hiSe2QDUR02OgwyMXx1sDNebDIUWzArFJk020GKs+NTnCt4hLKptECQSy0PApT16ANiXHEKzKjXEkC1Yr3GS0SJFeOm+gwm8NYxewHGogG0tcCQD1545nQEBfJQMHwKS2AyoaRBINOs1roCXxlsgtbyZrvGIJP8AVEqTuII2/CdBVck5IXJfj7SMZsZQSDIJFxkwTTQRAUWqqs6nuttLC0t3SgJET06aBBkBD+S9gijyI5NpY1+hnpBG9dtBQsuKhyCoQuqLUksLRMsSQJ2r+GgLYpxlrzmliQzN1iCQSoPYOv4HQFcAGLKgV2XI5KLNsBRTf1gVGgUnGcjv8nMlclyhAIksAAbqnkH8DoA7gplJa2BacZYhVuUdokD+Vdt9BQOQpYXeNZ/VUE0FVAJgzUiduugmceTvCkrYIx/7DtSFEAUMA1j7nfQHzQcbpexQMSGBljbNBtyJ/CmgdzcyYSwYKolYNwEGbREzA+8e2gndg8dnlfb+142tiYn5VmPTQf/Q9g0YBh3YnyKgKCB3MAQIPAmP+NBgzZaIgigdyWN1KdStYkzxzoIm0YybVyO7qmOFuW2h3eBQSP4V0DvjyqCECwYlypQ3g/Ke3b7V0ALXuchU5U7XKlaCI7pJFZEe3oI0BLZQGwAEo6qq5S0LNAYMbe+8c6B1ZzOXzqcbEeNViRGTYUqYp+7QJkCwxytIOQAKWtUGJNxCxuTx/HQOWULmxrY2US8gbxvdSJ3knf66BrMalsnamPGSRUEkuRJpEdwjf7DQTDq16sxGPJIV8cyVFTJMndvuY0EywRWV/wDXVGxgn4irD+mPQmZBmPU6DBmzjMjqqNVWVbfnKxMyNxH5ToKgf66DIpBRYVSqwTJaQxAqLY5/loNaztjYKyvlLFwrQDbS4wtQZp/PQABiHYE42BIvykgqWUAQAoA5kj7xoKk+UBUy2nJLPaAGqwFTG4iOsxoAWVZzBHyMACoAhv6QJaJINPxnaNBEsQGCKyBRBAAMPHdasConcfloGOTJiVB5cZxsChVqQGqm4HqNo66Bo8XbkzFyxAfGojuJk7TExwBOgaYVodFOOWzTAraAouJMVHNaaCSePEnjHcrRUKwuO03CKBj9Pc6BgQSHmVvDFTQBgTQAmk7CvJnoAicrNJBMiis0Y2YAEmDERbG4HB9wpf5FxguSVcjGXkBjFCFIJM3Dn2jQbFLdxxsC6lhSpuADN8hFfpH00Dv5FHcT5SVY4VYEgm6gCwY53/LQTdFYM7Bmhv1X2ZlNw7lIkRx139gdjlJHhRlLDsUVZZ7ZcGP6RSTv6bBMhVdGCjJcGYDGPlG3bWJgin10GC4T3tlPb25AiyoWvIAoeSOsCBoKI0uwIacYIUi1EMn8CSOpMzQHYEMnEr5V7C5OUsGUKKVWSCa1oK9eoVtLMpMs7mGJUyrATxbEgiJP330EzlI8YUi6hF/dWGkEqZJmQIFazvoMMasHTDjEY58ZYNdJMNItiCKV6c8BVU7XvLiLWholQoJHyPURJ9vXQSYthCqGtaCpKxDWiPlsALuRv10DgF7shSMTEqVb/ITMkck0mB7e+g1wyOjq3+Mw0TZAIKk8GJrUH35CRCFENgKmnkIJorGWE0JgbR143BfKnk8/kyTMeWwR1t+Uz+776D//0fYAeR8avfeUUhoX4QJpbQ0BG/OgP6pygm44MZDRMkhlEAGa8CByazoHzBSBkK3m0KZMmbgB6CDNY++gx8kSpGMZGJyY75NxrUwIFon+G+gXMvjyHKoL5QrMlv8AbMARXaa7fnoKAXIFzIuMFwAGHbEhrYLRPFNtBBQ6MWLNBuAyKTHxClmNY2pt+GgdgPG2TytjVyWUOZCkkkEAbzx99AMeVmdAynLLRlVmEJeIAgzHIqfzGgDFBXGVCQIsdQSIN08RtMD8tBQqcQW2GF0riEFf1JtgEjYiNh+egmZVhLFgGHjdpxmrwwBpQARt0jgaDIHL48hVRHaysamVADKsDoBtxoDkDlcQyO4LEteY7BPuK0idhPtoJY0hnR3gqfIHXvC929ekbkfu0FjiGNM7mlrLBUVABBqoNJ3pH00DO9VKMVVZCuqhhAYAAAzMRMj00EP/AHScMRchWSe0CKdZYxSK++gqzsMuF3ZEZFYuxNZEyIHsax99tAjOiOVfsZ3HZ2kIZq1ZoZunQbI+QPjKhfFA8AIFQQFt60msn7aBlx5LVZm/UUt4VDXFQbSAY+W1aGmgK4yikswACwgDEmFDBh/SKbUjQZmVmx0OPylJKMR3NuRUgmKGRXrxoAw/SByK5a4qchgsFVogsSB8jwNuugrazhAMt7Y3BZSgJm6RJkCQBWPXQTyKuM472lsgZEUCXqRuWkTUz66CbYlGJcbt48afIQDbyFC/Igkg1/PQKFCZbWAORhae4xeIAItrPvE+mgKOaojNMsrM4l1JhysCJ2PBnQNYS2N3Y/K45LWE3biYngR+WgqPKc0hPGWFpiAWIqSPkKTJrvTQKUKWjNkOWGhsgUiL4Hd0oOa7aB0D4lVVCuwJvYAhS3xgNSDWvJ20GyFGfHNMWM92IBWWDTrAAj8fXQQGSMbG5S0r5WY93cAVALQvUH068g4q7P5LsYNtigGWkAgwbmkCvXfQIFuZciBr8p7mkLE9wMiYaN6baBVxLdAAQFA2PIwEKIYhjESadPr1BmDsAUUzBZ8jKZu2IJBOw9aRXbQM14MHE91QIUx8iWA7YrwR+GgDFUC+QkyVZYMAwJWKAASDX5RoL3C2Lv1PPNtou2m3feKT9NtB/9L2AZlQAorFBEQa23XXdO6J/f0Am9cQ7xk8jKouUL8lLAHiJJ2++gc+RygAaBcMWTYgR2lgbazQSP4kI48LqZyOFvAJJAJljsxM9PXb7g4W8glwgY2lkuAJKzFtKEAVG/5BgrMwCZhjJBPjLFTfUEDak+nXQMa5iVcm095ENDSACT6zECKc8ABATEcmRfEwUAG0gFg0gxaCC0aCncUwhjbkaBb3mSwJEncxaDoI2ZFVFR7lxoIa0DdoWBIIMNya6ABcjFmx43UmUsBhQYlSCOgAEih/MCcoXDjZAcSlnUxUrMnbZfStJ0AMgupYZDhn9M9yoBQ+/aekfXQZcp7VYqpmcVhiDGxiRQ0qOeg0DHIyVyYyAChZnJESSVFxU0Eip2M8xoENxeMZKgAK+QEgXGAADA2n3+ugoilMGMIwIxE90wDDE3HuAIj9ugHE2S9nENhSTcxaoNRN1N6yK886ArZcjSUQiEBgMXWQRPUftvoE8eMXSTkxISExybiCe8WgjbcU9dtAACir+myPhgAsAVBkyFBJJkjf6yBTQEQtZORna3wCYYgEVm4ihmu/46BAxD2k3X9viE2KSJVhXkUjeKV0DHD87ioCTGIBQIIgMQ1ooT99BmtL+FSVbyqCzERIB2cCQZ2/50DyjM6ZRblOP/KVFoNKbwYI59NA2Mlz3E4lVe1zQEULhhIIiadNBBsoIZ2S3I+OWKgjcMTIrNAJ/PQFSAZp+k3dkCkkdsmKRueh5MaCj2mO3Jj7YxgsW2AEFe4AbTJ99AoDBcPaDIUZ1aCHAkCoFu9d+fpoAAC/c0WCtxl7N2uDiTyRTbQFczGLkL5HeqAAgK11AbQJpWePc6DQ2QqlsBgUDhRSYBmmxmdgaxoCEyKp8gUlzGTFQFizRJ4rJqPSNAjOuXIsAiwkd5gwAWI6qeJJ++gaxsYCPjysuOGAoxAqEEiNqmB99BJWfxKHBbGYYxEKVYlltiNj99BYlIIKS9SFUPQA/wBwrcbd/TadBscG7EcZCoTYEi2TFy3HmZAEfWugcQjBpJVrlZyLReTAG25O5I/hoJYmLEyqFXdBkIVmVpFtCdgPUaBvHmnydu1n+I3T/wDH47ds9OdB/9P1+tZsWNcqkqZsAFokwB2mJ3iZAB9NASct6MyF2LGQUEEHtBm2ViOmgJdltYQhyyDlyRIBEhiYp6AdNBMrHkZgc/jJKtG60Bgz1JrO/wBdAZGFnLoXBuOXINrq7UqaEdI4FdAfKjFwFCBnByLcDdUbQYk+g6c6BwEVRcGx5VRlNCMZAkQYMwIAoemgUrkXtyBnRUUHDUm5tpYxA3rxxoGZXKoqhFfGrooYkGYNKlpha9PWNAAy41ORM0+JIGNRESTuJ9YNeOugzKiQhyBijBXLVACtQUG3dX7ToCVyre0DIckhiTLMoaJCSATUCPp7gJt8aBgFLlbEFSrLQEmTyaz+GgBUBrQWOQKUNDAle0ySIJmIjfjqD+IHHix1vNnc62HYkCRzJJEex0BuCIzHIrsLhkYTN0kHhjSu8+wGgxTE0BMkBgqEKLZE3OBaKAgjbpU6CGIgABck5cbMTkEGZkUJHcTA2GgunyBdVOSXyG0kA7hTJG3Q8aDMFxjCUjH4zXGymRIM9xUkkhSKaCJ2BAlxFnytYxIK3GSabe/JjQUQzEHJjEi8EKJIAAPdEUqN6+2gW3G2XwEl0ZTcVaigDciYFTIP4TUhsfiMybla4Yy5ABFCGM03ECn4UALkQqDjF6zHkYoS1AaysU9un3CpfGuK2S1BKMbATsTQnaK/z0CHKmR8gQASQWHp8ZM3KBsZHQfQM7viRkJg4wGyn4rIMgi4EdxBiBvoDixl2drGRXU4mYAtItiTtWYqOh99BR0ZV/8A66EYyocd4ZbiRNKk9aGZ2roJ+KbiHFmMhHfIgmYBkKVoJIP79BIspWMCtbk+ZY1Qn4ggQSK8yNA9q41DDLd42svWjwTsACQBEkbaBmbJK4wCQkjx2EggwbrQBHy2rSkb6AHKgULiyrjEEQgAAQV+RttPufXQbGAHdQ5VMUXMwgEKJDCscHYbfXQNiy4SijuIwpIKsRWJjtrA2kwBoHcs2ZVDEKBcEIF10AKSwLGa7kcc6CbMHUKENnbdK2OzEGhbaSJBpX66CuMZb8tzEzcCs2gXdym0jaZ6/bQcpxtjL7JlyGUBUMxPdsq3DuI340FFXKUyuHh8LBVDGoaVBDVg7fWdBW42/wCJbY+Vbb7rZtt+U8fTQf/U9hVuTIwYHMwJpHco7QQpgddunTQTDf692VzY1ikr3UeN7wQKyQftG2gVvFcyAFbd8oEFVRdw0AkEDrv6aBEyOFyEFHfAS4aVIgKAIANNhX350FUZoyYhjBeLiBADhtrhQ/1df4aDokmCVQMJCi6ACSVAkQaiI9usaCRx2My41MwAQxEKrisVJ3HM6A3lewsxYlO0kzDGhU/JoEzPPTQBggNTdjwuEGMCVUEAGaHpQddAreRnR8QyEBiCD/UQQvFQBA3535Og0kooCAqKvI7bgtxJVAJoaV0E7SrghHXHfLAw3Z2iO3gAevHXQFEUSpyAZALsZFbaG0EE0KxWeBHXQUF9zKbCSVkqOCC09xEzaZBnc10AuxzjFCCDjyK7WMF2IImN54/joEUsMoyISxxxeFAZSbTRbYmh+ntUBViMlQHZVksxI7QSJJNxpSRSI0Ay4wFYKsDEVKrSSYtE+p36/kAmmRCWOVgq2gY88RKqT9zSnTQULWpDBYcxkBNxUsOQtSYG8/u0ADLkzq0SKAlQZYgXK3UAjaugVItxwzZGZVYC4KbjElJiT3bnQUxszi0sqoslFBMREhZAAMdOmgyglWvewrcrXyACxukxaJr9dBJ+1GQZGIkBGNyMQDdNxmRM1PrWNBRMSK7lsbIC4CoCO7ahrT142jjQSGcuwCoBkNquxJ+b9xiaVtjcHpoGKYzkGQqhxdwLwYIhQpECN/SN9A2B3Ihf9eTHelwIYT3QsgCfw0BDEAjIJyGGZQbQTANwHWnt7V0CA5PlaQg/UhipuJFpAasAzWn20CsoIVMliphC2OWAMChBMSCJHHH00DOhJMsrK6lgvapKsDLiZrArTb10AVWf/sG8VDnIEELLbjuBOyyfXbQUKhcylwzAEs0tcpEtWIFRUQBoIXf64BHkcjF3rLEdAGEyIgz199BcVuIyNjC5ZMTbZPIAgCBIPvtoAPGQgftfHsqyxW4BqLErJ6n+IDNgZfjuIgFatYsERUkGnMb/AFBCuVmYlFLX9mR1EFTFizIiY+5HXQMHOPEykYwVUjJNO6ZBAPAJ6RJEU0DNkKIUZzs4Z+3huxhUGYiNBzwl/wDh/Tn4Xd+11tu29P3ToP/V9g3tvvQA41LE1hBIm6F7ibZ30AxhUkFzhhgqiYK71YSBtB9/xBkCMiZC5YzBtkkNHJ7piBXag0APjOMePGGRe1VdCtRMA2gCt0inpuaBK2QqFv1AB4pkSZtWTAqoj26CsgS+RgEVz5MeMo0KtssQQBbI2oPbQUKY8ZZG7bmL+S4hpJKqSdxvuen3CbrkcH9EjFjXshRcstJgTUkD/ncgXUOMjK8t3tlZiSyi0UKgwCbeY9uNAzCfGDA8BtPcZkmbpjaY9BXemgkAoxsZQkkMcoqFKg2maW1gCeNAzA5DONSbwgDhbSp3WbWXiPz2A0DtlyrkyLY1rEkqoJa4ECQRET719AdBRFCnIQhXGswykAnxsJB2EMZ3PXQTDZcbgepC44C2liQCCV2JO8Vp0OgYoyBsbG5MhUWOQLVJJqBSpBrM6DNjQIy+QA5JsuYViatuDFTOgnkbGT471jIptxwqhCygFiZmoY0n00CyV7wTSouMACLiDJYgk9ffQOz5WKgYr8qwC5lSDAmJrMVpx99AzsrItkriKrdjPcWTtEAcGvXnrsEbWxZLgVxtj7Q7XFmJYkiSKU5j89AXISmEBUxsFyKrMWlpUqKzvtIrHpoNjxYxkIyWlZPkx3bCqiQQIIn09PQGVSxLeG7ypRbd5MsxBZZ9PwjQCxlPjym/HiKsmUjuBNABMQKT7fiFQGyC4uqf7E2kgB5G0gA0gned6emgnknHTEjpjAEoqlgdgBtFRoAQSR5MZvBKqECCu47jUUMk0jpoFyG1MTjKqlGXvZbTBoCFFDFTXp9w6A73ZELWWsVgwZlpDAA7waaBQuHGFU/phSWxGbantYXQp/qE/bjQTILXo7pkOU9xUljbVgGOwFdxtSkaDM36toxKq4Qyst1yi6k1gRTbofsANt5xviVyptZlBPaJB5JFAKA/TQNL5CciMt4g5ca7k1NqkGRMHmZ0BDDGyKqef5M+RFu9QVrFYPFOOdArqA2RsgslgMZhYBmJBBHcN+vpA0CyclowgqVa9CsFSzVYElhNaAxoKquMF3xKuUuw8aiLYETUECBIEeg99AVENhJKKQzEGt09SSQamh+3oAxlkD4WAViFCE0tYi6hLCI9KdJ2BvC93yaYiJ56xHSl34aD/9b2CdhiAfsZ8YVUcC4ARQTUgSN4k+lDoCGxXZlVQceNhLM3dcSWqSTT6eu+gRnSE8iMchiSRAgyCpM8LIEx10C242e8k0Lm8QoI2uJA/qiDFDxXQKoZySna4ey9SyyZIrIBLC7mpH10FhKoikuqm4kMTAuWCpjuIDGp/wCQEkD4g6l2dFIXIMYCk3UBtI32H4aCiNMBLiVsGQgSEBHcijoPrvoAxyY1XG4/xTYAxibGKmqz19o0AGRIZjiYpin9PtC0IWSAKNx/I6BzkE4yLWVJl+0CFZSAsgUJG9BOgZMbB8LszVDByv8ASUEAKAI60roJhzNjFS6IFzNAaZNJYkN3e0V0DOQ4JZrLmC5DcYVhaN3pMdBProAwZTaVVHLBxYYB7TbUCTUSARxvoHXI2MjKMwGENacUErANbSQKAGkcfbQK2dExAmjYx2JsVUMFBk+o5EzxoBkBYlTZjdlcAghaySxjeAV3nnQYjuyo+N/9iQt6g7XAwZKgzJjfb20GJLwjMWfE1k2y4IA7gFJNCZJ/joKP43ZScYfyMFyg7C4c71/Hb6hzoMbZMzZFXE7EMFrQkybiZIu2MCg0Dh/EWyGZDFSCIMg/0mY3kxNYjQMMgVQuUk41IAYkEdxqpMgGQRHQHQPjYY/GVRcchQFJW+JkgVO8RHWugAh8YnGcxZlJFoMwtSZAO5/qjQJlVbFTK0M4NhHzhmuAK7zO0U49dBJgl6gyuUkKHMhmIqCVgE7cGfroOhHMm5E3KG0GQ1QQQm8RT230AbJixpcCpcFe0j4TuDaAYqBt6ewSQ4g9rFSypCZFG83STBpIgnb30FAbcYyHx2RCqTCEmQQCSog/tzIMWTBlxo2O0mWFncpr2yTWa9ae2giFa5LQWzElMtkWgCpUwCAN6dd9BZ8mJmu8zYwhtVTaFMRG5gwOTz9NAhZFCm0nLMMSzC0TEAqNyaUHXQYoAylEyfpqWBIItCiVQxGw9d99AVZLb3ys4DhBjaWPdQgr3EHcQf36DNOHMCVJmtQCbEJIA9zBJJ99BPDcXZgMYBcgOPgWglbQdyG/bbQBcq4cQtYm9VC4yolzNRuwG54++gs5U5MZEZIkoxBukxUQeSQdhTnQLH6Xh8dZ8XzW7a75fu0H/9f2AU2yUPlECCxZkS4VkQTFDuffroNjDFMGIgqqvADJaGtB9ed9tAZD4yMOXG9lIcSoVtlk1EGPbQMhAHjyYsasK2lABaS1STIFekiu2gbGFcMAYfGxLPaFKXdwEEnao0AV0VkOU2vjQq6tUipAuNev4iNAFsXFfc9jBjapi0KCYgkSYjeftoFXtK5cjicsjHyIBuuYr0ETtt76BoaBZkLM0KMvDsLgP/p59KzI0GUYnfzKtrRIloX5AnYSRMyfUcaAJkVcaORY+IkMri0STcYgUOxgfjoJWYwiYoEZGtS8EXQYBm0V9jtoOkuzNCqDkBUklIkTG5v6CPpoOVkAEoC3lX5f1i8kHqGJHBPHB0Dl8hKgOoVwxUQDUxVpPruN+hnQUGPG4UMcahHgEG21gSO2BPdANToFCKVW+EOM3sjkCbrjcAQSJ3/doGyWsqMrhTnABQGASwpRT3RP49KaCV7ZcqlM4OMsIRnIPZWh9vv+QCwBoORXUi13TupKiggmTAHPXQWD5RLODIEgUUEXFiWk026mK6CSFXbM16hBILipkgCjNDVk1mNtBbEiyGxgmgVnUiBaGUGZMGCCI266A5cZy47w9+O0nMkKB2y0Dfc+/wBdBLEPHIYeQEqVF1xJJKra1BI670+wFlGO5SP1cyANBkEntB4uJisj+YFsnjK3FRBLMwUyGBlhUz3ep6H00EnlVQKjgBSzMUukEEiZEHcj26V0FT41LqFJe8BsagBioWaAAzI6xSmgNuRIFqtiLC6gCBVBJkiAZknpOgzF3x4xkU2ZCpu5lrRJMCo3p9OoDQwx4h5FhYYqbSVCwaGbdpOgP6jEgKrI2Q5FadiBINDUbGfw20EpR1Uy5m4s9SSBICiZBrWhn66BYVnLBlXxEIBkNLEaV35I/augDh+3K2UKw/yEQpYsswATE9u8DgxoOm4qbZIZSRkIgQSJUQtTXqDPQ6BUKpie4i8rLle2Ga4SDJgyYn92gY2l694VT47qQo+QJiaRQnn10EnazBetpCPJCsJUyhEQsAdRHrvoGPnJwh3YAFQUaFqajfcg+lfpUJoZW7y+RXU1NWJIhQR6kVoZ9RoHtET/AO+66y1vHvP9u/48emg//9D2AEZCB5ZyKZCMlxRgOrLMkieOToJO7s5SAXsLOTBIMBYMUJkU50FMiunkdkDZ5Y4wPSDcKzQjY/loGoUOUFcTIpLZAILOwgEkyoNepofXQXfyJimQ7qkDGwgyYEgV3J6emgktwCszsuTuAeeZlxUxvSY4k00BfM12THkQFXuLLDAUit3ypG8eopoCrXKALzczEgU7iZHbdIiJ39eugmAC+NfMjySIAAJugiRSQYmv0kwdAQA6+PwoCVDlytwIHaCBA3EwDoNjTGcaFHORyxNigLNIJFF266BiMisFVACCYCgsAxBqRCg0IHpoAuJktLqcluMoVkAMFkbE0Ff25AYywxuL2tVmZgatWV2YCRySafbQY5chxJ5SwyJDF1NtCKcc+xGgi+UvhXKyggSkhaAGKgGYiDFNBVsbEoEq4yHyM9olpC1O4BikfwgGL5ja1yKJIbI5B7YBuupIJqNvxEAIZlxupK42It7gStazyRWDO0fTQEAq2TH4wzO2MhCxkwOtdiBzHGgVEhqM7QwRx8iDUsTDRFeZ/PQWEFwhNrCFxqqiTaA1ZETtwNBAhUXGBgNr1GFQVClSAZI54mP5AL0/WxeYEOfHtaRdAJVSQLZmQBP56BLRix5C6hm2C27wKNWtJYmfwjQXABbFe10lfHUjuKzWV5PSopoIlSFQsAZMsakLW2JmJk8mCAPTQEF8jXDGS/cmOVFwKg2mpAXb2pHGgooRWAFzMFChWDSYMwJAakTPXbpoHUs+QhVKPjWRDhhLrUQT/wCNBOggyJjZrWBKMA0AKZEdsVADE9N/TQKFysUyBCrqVVy4pa4FDJmTOxn6HQWY3dhPeSAQXUkEnuFu0U5Jk7+gK8AvapRgK1AETNp2YEmu+ga67KyANkxOD2rMEhgdhQUgVp66DICGaXMAs1hEMpkEEk0gRMzuI20EnV1AORZDAuwCyYgkiYp3b/SdBZGcWhcDMqsV8VAAFJHQAya7n10Axq5JkubmY4ysiDsSAeCTuPrSdBgUkNjF8yDibcKw2FBFfU8nQZWM/pK+LGC7oQoLOeoDAcGOvvoEDeTKuRShue6xyACALQRudj9K6B71m3ymP8l15mJmbJmOf/j66D//0fYFEwh7XAVEUF1MiFm+s0Mn0Br9NAzHGiDIci1hglAwuoZZQYArsNAuNG7hkyFyyKi5ADQAHczNWkHmaewMi5SqNiPeflFEYCIoYAkek/TQQLFaEEsarkU9xaR2QeRH74nQP5WXJnLLQMGfKGA7aFSOOKCPTQDHjuHlwglgtt8zEQak7ye40njnQOqOiN4jeBe2JiphRvEyd4p9540CRjKKgVSuQoBKwBuo2Ekm0yfbQXdVuGPyi8juLAgsSSQVbfdRz00EAFuLZGUKynzmLW7YkVAq0j6aDoDByRkxuBJIiFHdNx6RB3J9qzoIoitYjoFzYWAGKTWQGJBHNPpoHZFdVIUrjNQSCLYUyZi0VNSRx1iADXosrU5u1mKwGuMLQginvt76DNlcAPIaodjceJYQK7bTSR6V0CkM6sGTGxtJLIrAVEUI3rB2iNA136fbkL+V5DKYMgwQLuN/Y19gby9j+Z0MAyQAGBa6bY52520Ad4XC5tVpQPjERsxAqYHHt66CVqKXw4gcXidR3LIugAEL6kzP510DYkEnNBRRk+ItiafJZYCK7VjpoEYp4sgTtyZTJdiVvUGokXSeKfy0FlJyxkRScasYWisSZWJBJqYr1GgQKLnBx1auQd8i70AYCpO4rXjQLKgsUQePLAYiA39toDUmJ6/TQVJxtj2K4ygZscBAVJBHcIAkg/fQFrmQFn8cqpyh1uItUm61i0GnT66BAhYIRe2EAPhDdhuJoJLACoA2PpoG+SsxYoS6ldwL1EmQelZpxOgQhXMjKGDsAcrNMBpZVhj2x6+++gGRHKrAWWACtN0jcEGKKLtxSemgCPc8OhXJUNDTJ3akEzK0I5A0FghqUyHFcBVWkFSehk1gwRUn00EMeTGDJy0rcqdsMkdwMVuAP0OgsoQgB7i/wZiQwQwobciIYg86DJ4kGPuZrybMW0hSD2kxzBkRPNdBQ5DkFkksH7ZkXRsywCD12p+OggSzozoDlR1Ks8nY0N0iuwqBMeugotuM+XETkVmJmlSVGwEdY2Feugic2I+PJ/TjawZlW0VkgAb0EfSeugZCRkYgEu1uMZJ7WJBg0JMGN/UGOdAP+uPH/lFkfO0z8Nr9omkbaD//0vYEM6Dx0yrmMY1JBFKiJIEenM00ClyBjwytmIqcu4DKZBm4RMzM/noKKWdmZjaGIXIjAdLie4bRIg/emgXJ5mOJ3AaFIZhDqCdwwG1JnjQK+NAy4nMY1LN5i3FJA95FPz0ByWuGy3KGKMBjG0gQCIIpEj+Z0FCMqOVxuFLUrBejfKpJNBttGgkr2uHGMFmdy5YmZFRImgHrt+OgfsygOruUFCcgkAk1+pG8DbkaCY8gamNkXOxJDCApIIkSI2mZHrXYBbI2cnKgVmBgKJDTduGA2B6+8HQRDsUVyWWaK/yYmJAgmQSpO8+m+goWGFFKqFK2ghouoIIEAzuIpvvoEyB0CF2UhMhBYAXSK3dx5gE/w0DK5JxPePIWEEQxaQJgkQtG2P8APQYKCcJcqchcMGAAgtMQGAG9RvyYnQFsdxxhBjQmikEm4dpgEChgSDHSOdAgLri/RBD3AkKwPawpPTtP4dZOgqVRThxkrKOodA1do2kcmaCo0CObk8aM+ZoawlwIE9NyDvXjY6DL4ygXHkPjYKzZTdAFaNFNzJFPWmgU3gtKIoR0BcyDNoWKARG/1odA5x2/qC0XsVyFVkAMY2haiSPbjQKiv3Y8p8iBw2Y4xuaypoJqZjpoBjVoUupLFwhggA2mDMjakkfz0AW0KHhDGNUZEgmII3NDUg19PchZirK5RlyoSBjooUQboLAzSJ40HOsgIpW1wzFliF7+2JBkiabH8NBXCxusKIJj/sACilSAqmSST09froATkcLGSctjUcqCH2MgUNBSn10BZMi9pSXMqWmAVMt0gSAABUcddAoJV2JZlaoVoAJNsEkELIoYM6DoQ5GIfIoYszeNQQygCGia1kcA7aCDLDB0Qpd867AkAAqwGyzvt+GgoRJ7cYTBa9yMAvcyme6KU/D20CKuQq4M4lZpDzCrAWDEAj4xX+egLY64s2RiWCtcgUNcu5iACJ6HroNLMyLarJkdPLkYKoYWxbaZO4P10AIjERlYXkWquwxltjcKRQEiKb+ugYE+TGrqqLJdy1ByTKnpG800ElQMcdqjIzLAUn+kwvxIG6xWONtBXECtq5MCjIvdix3SblpSbjtH56Df9pf8Md/+P4rMbe2/Fv00H//T9gnyqVKF1VWUWwe4S1WNwESG5/fQCfGc5mJV1a4SZLEGVBPUCabU9wwEWC7pczjaRK2kAgUpI6aCJvdcgHcaHJJVjcYFYIMiIAgdPcLQ2TL4mBVFbtOOQwJE1kWiY4jQYOLWEv8A9fG1ocLDgwZ9RHtPO2gEPjdkJIQqfCQCo7TLUn2rz1kzoFXuFFlsX6bYgSyHaggkxA+p0GgNgV+1ASSwABoPUhpMST6E0NdAuMrbY6MUxiVVCKr1lSABz66CjXUZcb3GGQRBFBPcOkx7U0ACMDcCVV1kFMcBTWsSOKT99A/iVJu/RDEFTE2hYJurIn3540GOV4QW7i58sMawCSIqOKR6aBVTKHCul3/5ItZjIEljWBMQAONqaChcLjV2uRBIXJBDCn9pBEe3pTQcwBUBWdi8XOpYEysSAACZJ6/xkGGQOVxLfF17BSXYLFe4jaSIjpvoNLP/AK+Iu/cXF7CoWIrBHU1kV6xGgYFi0km85AuZZml5tgGaT06fXQICUN+S0mB44k1dYEWk9PwpvoGo2VoRL54UAhgQZIurUxMx166BsuPHmU5MdkM032laEyTcTBIifvoBcmR1aB2pcpop7ZKiCTuDzxOgzTaWy9qnuIWIUMd5AEkAADc/TQKolSWm3MClAbYJNCDNVMn9/UGfIypnbKzKxCTkAFyDaYMRMmoP2Og2I9+OzIzIxJECte3cxMUnp6jQFXyh0HytZhkIYLJEMwgwKHmn00EglxLWMwabfGe14ZoWQBHvG3TQOzhsnzZyxkE5LQPjAUrT33P56CbW40QKxRAq2BVI7m3ImN7aT6jnQZ2IykP3KBGVn7WKyYWSNiKmBXQdBbJjLKYJgsUkxLEdY3YGPek6BTkyMEy45FvYU5NQVukztBmv8Qz1ZZKNkKBhd3BvkJG3pMCtIHGg2Jz5LMmMu4tfuCAqxNYUdZ366BmABGQiRB8mQtNYgggH1inpGgUFpTHkgJlMMFi4EgpJoRU7yZkx7gMbeMmss+QNlzK4Ip3Ghtp6Dj6aBhYfFkdTkuktjUSzRIllgSPXQKHxjyAomQM4UkkmYld4LEzSk/mdBrh5/liif8UCbfl061n67aD/1PYUZmd0KFmVyXR7ZAABBnbaYif5gjuuRlHcGgLJm9W5tIU+k+/GgZ1ICOhs8ZZ/KV7iSJaAYUe+2gDBH/UU34mFuK4kiu5IkzBE9aV66CauhV2yqRjJBRmIYmgJUhpNKxNPrXQUa1gjkhSzqcCgqtxJIFRJJUEcUjnQLJyurtjfIXS0ZQqmAZ2psYoT+Gga1nKsQExhTKiCYAhhcTAFaViDOgAOcAKFYEHucABiWaWC9sdduk6CRH+wrfokxf24we4wwBmmw5kmPzAFAndk/UGS0mR3LvP9x7Yj9qhYOiFSS03QMMsW4gHfb1+mgkuVWUqp8rKRBooZjQyAFNuxIj8NBRSBYuIXeRicRghgGDb9ykwBvP5aAqAUClhAt/UAIPc6waEQDH2rvsDycxscFlDwUtBqGm6rExBHpoAuN6lhOQDtymSQYkXQNwIqf3jQFsVw7ybre3IwBiWoSCWHHpoIq6YwpdVN0Vx2kCQSwkCD69BzoKkHIHyLjRBjgY8rnZlNRQmk+v0OgZoJAKKHQdgOM7AmgaafE0J9PXQaACwXLaH/AFEZVyMQSZrUjY7c9NBhiKhCCexmMTRVBESJNxURP8dAmOVCMzFiCHcggSTIEQayfTbQDJdcEVw+WbgodbiB8oakRESa78aCcNkMqQ5cG4hrQEJgmGHpUfTnQK1yDwrAyUAAibiBBho3oIOwpoNdcotBYi69lFJQlgwO4JBP8NA6Njc9wHiQHxdloA/qIkN0NOfyAhcIQueCHyj+mgFQZHQkc/joDbC5Mgzhw6lWLLO4gVmIkATtOgfGhbttUKisuXKQFPyqYIYbg0/loJw6FWyOmNVUnxyoK1jtG0UED6zOg2QYVVmKFExvJBIa6gmASQJMfloLM6qGZUJYIQHt3EirbQIgkU0EizCxUyH/AF1LCpIJWAQAwJnpII+ugKo6glUBy2hirCbnUCpgzNfwPXQZQIONrpAYAMFJuXuJaSRux3/noMxjBjx0x2qbGWaCTJg2VWK+vGgXG2S/IBkLLjFYtLMQSayeJ9p50C5UynLjxjGnaB5Aq3JasQABWhJkfu0DkOoxMxW0jYmQBPZIhoWm86DWGbbk8kXeSW+0/Leu/rtTQf/V9g1XI5KtkvByXLBtJWBuBBiD+1JBStylbgrE3B3YAwBNSpmIAPqa6BQruAb1hlLrXcgMCzAEiZIniKemgdSnjVUXG4aTtPdGyg805+tdwqTmfMWGMxcptViDHN8NExxoOfMHUPmDBGgFSGAuI+RYTBEA/wA99AxaWjGHEuWIcXKGYzECeta/jGgJvd2KqUZpAuLhSVKksTx8Y+2gVpZwQTkGNRczFuhErLUmJG/WugVhjc+Bj3MFeRJJIPd/5Hc0ProC7rk8bnFNg71BDEKrESsQO09f46A4sjYTkQqqNIvXe4mpAW7oeB9BoAiK5DsxyXMSzqYhlUkVmaUifX20DqVcNlIh5YKgMAk7sG6UM1iNAMrEtkyJkCoVk5bQSsHYU2io/PfQaGZxlbJaoZXdg8ju7RBrABn8tBrbBkORjkVVaPEhWtZagiaRXQOXx4LVBJxn9RVLFSs7TUmJkmmgkyhRlJyTiS4KzEgzUGY+Ukg13n7BYEjGrgM2QAHJd6AGvcAY3qac76CLsT5Lna5YiTBLLyJi2o29R7EC+Owuc7/KtwFJVSCTBJBg8U5jfQYBkVwREteqpLMxLAE1mo2ieugInHkxhUZblJQPBbtEgkCDImIqdA5cjFkcY4cgW5IBAQsSD3ECJ/j6AJk4yO0QzFqMJtVTSik2gHn/AJAOFyktbcHcTMSAV3FAwFZ5nrJ0DIsOjO1oxhwcgpUUgQYoF2A686BMhQm0KAZaVdmMwJhkAg0iB9NAvaj1BXHjxwyuAwaWaoO1TyR+egKkIEytLrkdsqXMVjZra0Fag7HQNlYJcr5SEj9YC7ciO0RtU8+22gByKQyuMYGUhxQtBjY8EwBEGvroB/r5CqMhYuYuACwxAEwTGxOgVZbJMOvjaZyPJBgwYIhfWZ30BZcjYXkH4ghlFxJMrEhazQbSJ99AVctZOM5bWGRq2kSI7azIgxz1rXQVS4YgzfINDqJJFCKQZBANfTQBPHePg73EvkJEqtKn5CoA2j89Aj5sik5hVlS5UEhTAIkgbjkf/doElVZQhXxubMQgMI2AMsTTpHpSdArLcypkLzcB2Gi282iRMA7H22jQLeY8/mM2z4L13v267aD/1vYRQh8eHEoUBlyOskiPkO4UpTem1aaCY8jlScdrSWJAYVNywbedzI0HQcQBZTa0hVIrHQUJfrSaUOgnbiZciMb1xiVJkKCAoWh7amTzOgbKxR8mQsFUAwCAxBMUiRvvH350EHxADGWyM4ZaWkG5jBIoYJJG5njnQL8Ec5CcoMk9oVgd2gi7eZPv76CzLjTynJRSwhZitxAHqO3aNthoFylsljW+Qst2MfFu6IUkdJptt1roESAqqMQZ7lLowZgu8kKAAJkkfu0DoqM6/pqxeQ2YBnBZCBPETJP79AECg5BkAxOjFXbcWxuQwI9J50GyK7EDE7GAVV61YdoBmCDUSesaCwsUB0w+JcZDsoEQGQgHYyQOKRoNifEt1uTsyEkNLbEmSQZPFTI+mgj348aIwOJIIk1CsO4kQTyZFaxEaBxkDteSHLGEQ0MAq1pmlBPPOgijKEOML25BagBobjyVIH9QnY7b8AxTKzubB40JAQsCpk0oTEEjafy0DEhQ2NT3KGe0KwuIqpc1IrwToMA7lwcrW2BMrKbhd8RaDUVJ6z6aB7iiqP1wTS/5XsADcJJ4G329Qx3fFiyoQWUJjoQAZMW1BFTO0R7aDnvZmF4K+Ol6ds/3TINRIO0/XQWC2qBjUjwnbG1wYEFgQ0SIk8V2roFSxmJVLJMsGDFQ7RAI2rPQaAhSW8jgtMEgKIIJYBQCv1E+3roMyTYSAwGMsyqpsYKZUREDad9BSwWlGW8Khl6g+MEwJhpEiaH6RTQIEBQsMl/Y3y3JIElo7vWPTfoGUtjuIUKCLxcCSotNd6ARG1dBNWw2Wu4AyC4ugIIVQF7lFagz09+QZnY2IDav+OwhWAZd0qTOwI0ADnEPJkxKUzENeSpYhlmiwBQ1O310Gy3hXaA9jDcMe5TWpMRv6x+APjkugViAtAhkGD8QszS3+NY0AsOQOzWuxZRkLgWIVMNIBiafbQNZBIuOEqh8bJLCFgtzNJIrH30GTxgFikYGttm4kSJhpkQf2HOgXDBL4XZrZjDjMmB0DGhBHBJG2+gnaVYXhFBUBDIgXkkGSYMkGk/XQPYYYl2y5CWjIoErcQqlWJiSQOdunILdmm+3unyWT3zZZfbERNdvw0H/1/YQBVVcgeFyKWvUlVmALZiggUpNNBJmawYoVmDBQFkSKqQb69J9DoAynxqyEoW7bUaV2OxJihJknkeskKlScqnE4GNGolGCGIMAxUGvtoFW6tceEIFGSBuCIMEQa/zB20GxXh1ClcTBQlDcO/uAtJJJEzM/x0GdAGZfK5Fh/VSnAMAjYAGYoNBmvnIGVskYwHrDQYkQOQSTPuOaBj40byZVIyX/AKmSCVvkEBQDXaD7eugEY1d/EbfKAggCqwsAEjkddzseoOtjG5Q6rBK3cyW7xMkmAYkfnoFTHaRlUM3iJXH5ZWm0K1BNYEj20B/SChXTybY0dqCpqBWe33MRoMq5JtV2ZMnwfcKSoqeNyRBjfnQbMtxCA2juDAm6ccySA28A7ivGgdvnkQFYeFIUhRIJmSQZ3E+vvGgIyQ+O8M9k2vMloNTaYHrz99AgDl8YxLkVLQtYae4SWWR7NH/IBP8AYbJekKMkE4yty1JZT/aamPz9gzBsf+veMZlJGUitQwNwWgoR0/Cug1sHJJ2yQylvrJLRIhoI5+ugy4SUVHNUFyBgpMd0KZaOTwNArBUJX/YCBUgYUaYFamQJMx7+mge/HkQBcZRLpcKkXEEMAIJrT76Af64VFXK4tvNqYpYgQN1EFq/kdAGZVUNbICArllVBbcCALaH+MHQMxxwIJxuxU+Mz1uk1HcF39Y0AIJdcIymcYVlyWVFwIiDFK9KbaBjm8TLjBk1AGUyQIAEGI3EGvv6AuRsbFnZbpa3LjukrFxBG8GkRIH0roDc4XOEJVWYie2Q+x5IFYmT9dBPGqZGZwrKwRmDFqhHEgyCTSuwpPPIUgDGRnQ+NVAIpDDcGJgGKUPttoERrGyIhNV/TytcGKkC43Gn9NIHGgYS5XGknGxDVZjyQaiYruaj1FNAhZ7WL5jAxBkVgGIkb1gGRT7++go62rZcqnESclqkG2DdNsQIgj250CrjZsaIzg48c/pYjFBtUwawa6BkN1SbMiIAlYoTBrWoA4FOSdBIgNlGW+7HeCirapiWAo0T8QOugfGgdgmR3YoZQksCsLF1RQn16aBVAYKym1XL5XNGKhSBIqYoRtBp9NAbMHh8F39VnksaL5m3+6YpvtoP/0PYJMlgZxYzJ8grKItNtu9QYpI/HQM2TxqyY8gXIQLmyFmFYBBIqDJ0DBSbAmVhcZAfeFY0JoaE/z20EmUmIyoFZMfkESZEGigV+vGgwS53x5e5SVVixJYMYoSCOCax03jQUAxgABHLpDrcCKmICiik0266BVGJkCeQFUcHITQwR3AmJncEdBWNAjnC5YAZHP9KxcDbdLSegPEfv0CBsbYwys9wEY1RhKgUAgmSdyP5ToHkixgpF+NWcqzXKD2yesTM+mgzNlwBmEKB8cQUgEsSaDesdd/QaAQTJyAE/7B8YyC6WEC0hSYk/h76BxlepIxowYT3QYm4krHIiTAOgXzC/JjbJVzbNCrjgihA9aHQEFMaYw+MMpUIWFCpK2kNANLp/aNA6iWCNORlE5RcGNwMRYRArz99BIKGUWGwvkBBKyKnde3ah946U0CjE6kDGVVkPYJB7lHd8qdD1Gg6ULPAGNsa9rlXgjesHciTJn6RvoEyOFUuqnvPezBRAqSCYNeIIpFdAVLG8YxbwhItm64q/Ux/Op0DBlAAlmGJlUsxPZsINRWGrEwNBLCqkHKqojlVLKWHb2wsVmoYb7+mgQdwd3dQ1wKQBBug1ExJ9bTFdBTGDDYyMiOg2SZIWdupMjeBXbQRbIMYyFcqkgqWiSAwAqO5iQPX+RC8hMaYy8Olrl5L/AAJiTOxjmg0EzlWw2OSMVbB3G0k3DtJEAERX00G758fmdXajiCxC9IEQJiN/TfQOFkiljiVboxYQOVE8bVn66B9mamQ90ZcbAHtJ26xE+lNBBcVroGVVlQApqzKJIBF1SYHFdqaAeNiiFWkqzHMptBVzAHeQINd69NBQKzYl/RLqrGVMEgIVWEBrQjY+vvoNcXUlvIyYwwyBEADFgDyd4M0+/OgbGBjPcrjxEQwNwIi0EncwG2GgXG62+MmcmUB8oIIAaGLSKChFZidAUY96ywUMSGcXFlNTyKECYpSeRoJjxw2J87W3yzmVNFMAJBoDT8OmgarJIUZGRxBRpJEA0Kjcweke2gGa11sCjJjxpc2SGBCLBTiJqfp9dA+NTLY8pbEUCoqqO2JmbhMt05B0E4Mf9q9rYstuF1l2+3WkfjGg/9H1+RUZCgBAYLj3gQGC7bdeKH1oAoMtxGUAXOhDKymIurQsIFNyI6noE+/CExiH8gkz2bbdDQ8/wnQO9BmDKDjWAEgwOtIE/PkyfTQBVKdjNcog3WhpJUGDIiKcGf3BseJnYqKWqyMs7sGtJkgkiDyDGgKqCqrc9jICEN1ASRvQVisj2MaALkR2GMdyZQ98hb95EAMTQR/Tx7QBBIxZA7kqGDKB2bsG5NKsKxoGhUjG6g+VMgyZF+ULSfWQNuv10E+5kSxjjR3ATti27u2IFxECugbxl2hExsJEhrjQ90Ai6JumRsfSNBsYLeVVAW5CHU0HaIEAi7es7aB0Zbm8SkFbsYeJIti2AFYDmfvyNBI5CUCAgJ3KAAD3AwsLLQIEERO/voG8TY0hMjY7nYY2UEwlQRAgTMmBUfkEsJgPjXfICyNcDBALKbACQfT8DoKhiqFBIOMlcRvgUNsHaKesjQMAckZGZr3JuCgkCRbIgGCIoSK9edAGVTkymKORCDaSpEyJAJmoI++go5zxapSARduJVmkDmZ2/KSdBNlxN3rKgEORaBuvLqQBvNSK+40ATIuS3HaQ4x2giV/qgCsmPpA+saBPM2VMdwVyXNrMVBIkgAmgkXce8dQS/txNJVkMKKMFaYkcER6UOgqBLowotFYlLiwOORcYjmCaU0C4xjVsSHGtQCCTc2xruDWNgI+tNBdELKgzKreQMwZWiPpsYmRxNdAzHF/2JCspKNkYqGViBArt02j89BAqUxlj3eJrEAvCjuAHaN4rBn8dAwGNigllHe7EEF6ggxW4+8fx0DuGHlIyEDGD2zSyQYt+W3/IGggJLogylwXIZHCkFgKmB7zBEzoOlFgIks7Y2sMyFIgj5AH+7afTQCB+qakuQshSJrW4AQdt/tEyQPjfG6OBjpKntpNAIiP6j16+wCYCZGNuNQA9QZtChgsADtJmvvoHfyKJQLOQfpuZLUI3iSafu20B8HjJ7nVRIDKbjBXgBQF6+v10HK2RFRAREAlcqgBpD0AUECB0r+GgfzZpIfx3XECt4k3RCkzQtxWPTcHNpZcQxgSFLrG4EUNJPymo399Anny+O7s3mLP6buu0T+HM6D//S9hKYlDwFz5awStSu4MgDttmft00CM6uqM2NsZe1yJFpUCBUkxVjEfw0Dm0AImO0OxQMTZDKCFnYtSI/PQISy2B72Rf8AGSe3aQTG9RMg0nfQVH6TeJRcEJILESotI/unrxFdBCwZlcKimwqEhStTWImbYp6SYoNBYl1DzkkoqFVGOAYB4O0+lBoFGQ2NKuAxKYwVkwfkIqRERAED8NAoxuVC2b3A5ma24Ciwa7DenEidA6jxqLfjEhgwUQ0Fj3SI7SaUjQTVbqklcrFCTet0uCWIUDtP7hProC97FVVw0sUClzBVqiYAG0bHQKB2hFZUxjGSqglgCVa9qGgk7g/v0CnLitxIMRekkTcZelIoT76Brsd2JivZjaOSqGT8TbBNKmfWuge/xSFYLaoCoSQFKGgPobh6esRoFBK5swJJTGrHIlwiJBMrFNj9OugrjdrMKZGN6hyQzf8AyjurwD7aCVgDO2P/AGDQ/MsogEAGWBPyidpnfQVdCxWY+IuxA9xO7AGhE1967b6DnPkDKx7DkbtV171cyJFO6DtXkaB0F5/RUXj4SqQJJFBuIqY+8zoMyWq4KHHhUgFYBBCypmtJBFd966DMquodgLpZ7Xu+L1JAlQIBk6CthVSMb2kE3ZWIMRSbp4tFwiDtoEdEYBypBiSENCi0IkgUg/sI0GyEYSqC1b71UlGWAYAkyQAZk+vE6BDi/UTxq5QMTCSJtOwJIAod/wAZ3B7zjc3NkDAbCWDGJEiJDUn0FNtAgUNKNOXGojISLQLVIPdMitTH8dA4JyY3tR08jEIymGmQZ5HHX+OgN+QBnAZ2YkgRAtCkbNHyNSBxoJIWIyuhAunteYQIoIigNJ6aB0TErHI03WmzJRZVwCB3NIMyJB6130CIEXs71OVWOIDua07qQJidx/zIOqsR57GJY3FnQEhQIVgY3gSaGugOHEnjMZP0gZTLVaf1E8bSK7R66BcyKLUxY3EgmwBpAINwAmKrx1OgqFvQIuMESIM0daGWAUjn7fiCspAyYP0yCAbAItUSYJgyPWnuNAoaZN/jOQBceNSWBM3SQTXoevvoOZ4yZRiYxAAXK1AACZvBM8UEx7aDsufxzb+nN10CLbY3nea7zxM6D//T9fnUy6FGtKqxxGQibg7cbneugrcEdmKhVAJyKZ72rzJmDv09aaAm7IsOgOS+hNVkMO2TvINabe2glR2PjYsGEOx7lFFJF7A7xzt00GubwmFYK8za4qE4BINIG3uKaBg6XNmJVrnDK0zaVgxb9edvtIMVW1QHBWScjAqb2kVKm7eBt120GUWt3OwlCceMLuZAPAmsUIpoECZcjBgYCi1goQ0kbivAPPH1IBkVSJYqxAGEr8gLR3GDAMUJmscROgoqTkEwoKkvdd3VgkqREbbj+QJcuO/GwKuxEqtSAtQqxQkRNdAoZgDCLhZGdFILUnuiVBmCdojQPk8JDIp/xv3tIB72tYEQB1G/GgwLY2Zox2WXY26qdt6xQsRP8NAWZbcYgDKDXGB3EGPWQTFfSd9Ay3SjwrqoS6rN0giQa28b/U6DnzZAqBVKfpkeXKAI5AIJFTG//Og6QQiuS6oMfbLcMJkbUoaUI99AvzITExqSYZJiBANTEREe1TO4Iy/7CzkDk+T47GrEAdwEAR6j+AUOIusKpZSaqosKiWkrIiZHJ5PXQTGRmsD2phADCTFt0GAQadB0B9dARjQL4SFXyESFbuLDeJI2NBJ3r6EEKlcduPJMoRjxtXeEkRNpqRtvT10DeOVDPiAIYExAKhakG4kbbDp9tAspaSxLYXucBTuDQF6QPpXp00BLQXAuyZHQDMir3EUX4wOBsPueAz5HyBsVqt3dhaqxXIFJkAzaNqR+IMuTJdkxG1YQKFikzbG0kVFK0+2gRT5AuN7XuWmNSLYLVMqdiO3aZ/ELlycb5MOYk3RdEm20cQ3pP4xwCkMqrmab1uZRICqHisgwRPUiedBgFVWJBGK60MsAQD3sDUiokD7aBshOJWRK+JV7mkgQKlhMGkx68U0Egr42xAKiXA3XKEggSTSKU3H1jQZsxJCTYC3ZkK0ZQfpvJmvvEmAOFBhYlnJhRaBAoQ5kXEdCYOgGFJXwlWPcWa0AE0Ne4U2AjQUKyVxhUKLbfjmLW4mpFSafQaBMqOblysVDTaZFsXSd943iB9dwCsosID3jFWQiqAVIm0gg3QCY6aC3hfyzIsifHY1kdYn5cR00H//U9gyHDrk8hxhFAQFrryQT8tprtB9ONAzHL5Lf7WbxubzBOxMCI6fbQIS4WLbHQhUyg8jmonYfhoFHZcQwaTaq2MVW/lOI5AA6e+gwbHjYY/HGPJJKr8jtWpJ3WI39J0BZ1IbFjxl3RChP9NRaq9tOKV/HQUi1b8qyskOjSknIQZEmKTEe9eoQIKY7cSsvcDjVw00BhYWZJVd9A7liMhAMAlZAuIcilsbKRAEc6Bkx5TnlDKlAXzG6tQdzQmnTnQJaWwDJkeuNv028hJUmNyZ+0bfXQJbabEeDhZy8EiADIEgNSa1++2gqMpNneqAXTaRdRVAAuY/b9+gTLhZGGZgEKRdXtZyCVLAzQk2zP20DYmyFSX7EhkK7w1ZBiZJ9eTsZ0E1MjysqlLSmVQtAGM3bAMB6ffQdKpjyY3b4i4S8CTEPvtBpFYoNBO9VON1awqCsG9ZiQAJBFJ6SNACJYM2SI7QiLUAQJAglaAmBtoHKKjrkF6OzsSWEgMQYFOOafv0CHIyAl1JRwJFoJSSZrwKRUcfTQZFVC6siO+MMqoUUdzAQIpMgfXidA7OQzPkRe35csccyO07GSOOPbQIWFqMirifyFMhBIqZWVWp4oI0DN2PkYMbsQIGXI0iDaZhfUR+0aDfqY1wh2m0GXWltorcASDCn8NAhezx0hD3sgYyQoE7AbRTiPTQYXBiRkhVKljLNLWyx6CgJ3n7jQVbGpZhBDeQnLBqyg8Fj278H+GgTETkDeYOlrq6uCIYtCmCJpPQ0nQTKhHPk+ZZniFJWBMkCPkB6fgDoHAxup7LsiHxgCQGHyqNyDBJpX10G8WYDJa6shEWAAgx2iRJIIEGgroGOMr0xvDDwhiF75tEjiaRPtvoJoQQ6lhId2KkAGXFKGaRNJH79BQrkS0gscjL43cqS53jcmKne4DQEP2qIgos0gKXHBaooTSaToEMLfjxA3NQ5JdyWLFTMxFVknb30G7cyEANieLT2SCbqiAYBNJk/XQa1yjQWAeQ5YKBdFoi6g6EAdRJpoMFVrcmAhMTEA2yGpSYUACf23I0GfHkRFDMqwpdQw+BELSCSLQaGug1v6Pg8g3myw3/K35e/NsxxoP/V9ghiysM0DxNNqYyoFCQQZFBIMHrH00BKpYXIqwFQQi5CogbNsBGx9uZCc5DGS3McqvLYJoFK2gi4bgMJnQVCChbIpxiceRzFRPNuwJinT7aCf+uEUq4zNk7izlxabbdzQnYzJ9NAz2scd2YtCrC1JI33WhOxofodATiSMgxiCTbka+IgETyYERMdeNAQkTK4yVBcW0x2mpJk8iRP4QNBFyy9mK4tcCFSoJiRyeIiKCsbaBcnmuh8QDu5C5DUATBgTMVmpj00HQzYzIdRkDNa1QqmALASJntr+0aDN4iXVgWVR2IDaaMTAAM91IPMDmNBgEZmkfFiMzlrUkAybdpk/ShrXQTKL5nVrP02UDFUyLYj4TUATAjj2AvF4hQWxUQQeCAKBYmkSNtuh0EvmQEysgUFImsc7ttCkxNNA2O8OztkQm4KL6vtEBgd6RP150F8bXsxWGDkXoymStwao9JMVroA5EZHDtJhXIJDSNjE8Cpih30E1UtldEo6syrYYIXuJgxAqY9J9tAcYxYpT4I6lCWIIlTt3Lz9v3AtmSQmRZQ5HvYBSACAZJYAxJqY6emgI80uwcqL48gG0rERU7t7zvoL5AGJOTGc0wbCUhWFWUExxvT9+ghemYKuQBQwW1nqTDUK3QTQ7/hoAtAwZodWCvkLQSaXEsSZApEbaDI+NizPjIIkF2lmlVta6RA+VSaaCZkHyMniyKhhAAApDki2ARND+PGguFVkVFIXAXBtZSLiwEChgx6g+u1QQpkKYjYc2JA8JNpAHaFneZ6e22gDPkaHULiJAIUTdkYUImhIFAINNAwCRkySmS5Q9uSAY7ibgLqgVkCugDugATKSpFpCoi1EQBHP5fTQWxllsyNmlu1XYRbU0kbRxIAroJjFYc2NgMxtsLlSFIIWJO8g8T0jQOMrOL2/UKBSChkiAJMQYrO1T7DQcZQjGqg+PFkJJMgqx2/prQ7Cs76C6nCqm9xkUglmdZ7mUG4rv9v36AIzNGQgZLEItFFYg/ICzdp4/foNke8SQo8hCsxJEuAVIJmgmNtBRhKur4Vv8bLasloJikrQHjfQGF8hIIxYsaWKRUsqgkxQzEfxGgPiWy28REXz3REXTE/WYjQf/9b1/ZVyDyZVJo8X9vbKgSRMESOnr6hRsZxS+MoLhLK5EUoVA+Ig28/fQI1v/wDoNkuWRxK7QSoBMrUcnjQTW0H/AGsl9+RAGvWSbQDIBaSCAZ33GgqiL+mqkMFEZSvbLCQBLRNaD+B0GvzIgZch3ZmQmilIpBMkGDz/ADDBPEMxB8bKvcEUFQsXC4E1gAj1meugZkq4CqgcgPuquSbRwaz9vzBWxM16KXTHlgI7GQTAqBSIjn6dNBsyLjxh2xqoIPYDWszBIBAr09+dAyYwwS3HP/XJIFFJgCDT+4RU10CwEIz+QDKYCirO4WhBBCyajj+Ogw7fJAV0ADOHTtgEky1u8itPynQKuQuExlbhKhFIMGhAMiensYPWgUi2cjYZeTOUCIjlljq0xv8AbQE42xqt0gWlGKfFpEiTVj0/LQSZ2cBVPmRjCqxD1mt0VihMRsOuwPjAQeQBhNqZSryotBESGOwNBHpoCPHkKKMYxCScVxmW33IIBkfXaDoFC7MexyVNhIMAMwBLNW6JG+40GtCY1yeNKAKXNyS0wCZFZBr120DFsgE2lWDg9pXsoQJHNzE+ugUeRWfFYrq39IJehCj1iBEzO/TQK2Nycw8JZQwPfBrwAVqBQU9uDOgYFvIcjXFpkC0gblVIkkdTU6A48njG4IZi14cRMAQBtSJroHZ3b4pZgQlTJBBmJG8SKxMroFYxjVoa4KUACUF1D2GZIArWKHQKA4uvUeJQcaYrjVbSQKHkeh29KgiK7ZHeTjNSV/pLsRWDQwTBnbQEI+MEMEJDLccdzEGJDQBNYA+/XQNlW1UxPKoEvGP+lmm60Dmo5p7U0C5YEH4YhBZrSEYGTW2TIpGgauF0xswyFmCuCtLTatoJFTETXYaDF3ZXYMrKpNuVmBIIWYEGlpEV6ztoJhnJUswcPAKM6sFFtCAZ34JO++gvjRseNcci9IuVYUkwSCIBqqnav8QDNGTuHaFuu7SXmpFrR8gOPX6BhKkhl8mdXDNQEkW1AmJilTE6BSwH+VWgghkAI7SbQIYGJrQHYaBhlvvOPJkEMsoFqCxERPX2n8ZCZlMDAYwbMhYkiFDVHLbkmOY67HQPB8U3/pW+Txc3ff4zz9fXQf/X9grFLKhQy1HcAG1KEX3TMVAkeu40FlLsrMQz5FDFCwBgyQIJAAI/bbQQCBgAqKi5xDhSLSxmdpqIER+Ogay5Syrjzo5Igg9zcEGoFNzG40DAAre3idkBNqkxLbMRMRBJ29RvoIt35AwIUAkZLz3cgXQxFT1EbUidA2MIULuCSqeNgUkATBJmQCOZ440CqMdMgyMTB8gUSoAniT2ggU0GKhiwUTlyNCNEAMA/xJ4pQz7baAuy+IsQHGRQUXxkD5CgkDtp19dBQvlxHKxDMmMgEtAkjY1Etxz/AA0HPMtk8UsAptYkuDNxJImBJGxG+gs63BcOzGAhK1KiCAZgdaTI+8ATmPakWLlizIrEEXKAGgxST+x0EisqVHxcBQpWdiOTEkRFPtTQdAgkZExeUyCp3owBlSdjUbgdeSdAuWxCM0hThJQogBiTK3gE8idvx0AW8JIN4F65b5cSYNYFYWkjfbQQtwZHdGzeMMpQYl7VW0k1Mlab6CxAVjmUtJDNkMi9QBsDBmJP2jQTWBLRJi8hSHUWQTbBAi2BHSnXQVJXPjBxyXcyRcCTbUGCSsXesffQHLckKihUyHtKDutAmD9aGn47hlmy9AVckIgYKIpIiCPkDTpO9dAMhznGkYyMq2wxAZVJNoCkzWannQG093gPe7ADK46TJnqdjSZ+mg5yBlKOzKxcoy+xFpoxB395p6nQWKKgKCwKq2jJNs2iJJk1kdOJ40C2o7vCq+R4xqsmtDdJMGRz6RoF8mFnOdvkbT5A8Fgpj4rJH7RoKL48YvVQzKbGxAECagXEkgb0mDGgqKqiHKca/KQ8NBB3k8RMinTQQwIpaxSq32sQJUmQZoDLKDEcV0GhWCASozgXsAoDMwFpIngwY/OdBLvYBFcvbTLVQpAMAiWigXcjQWXGq5UBUMuQ3qAAQFIbtDdCSPT76BDdiRS4AS4qosttMAyrQTUUnfQF2KXuEjOqMjEEm47xdU0Fd9BhiGVjhLqASASJVzux7THIG4O9PQKlnyPawVcayrSDaSACT0UW7fh10GKY7iDCNLuzxaSLg3Q7H1230CAq75PErLlUd2O7tM716Az6caC0m/8A/wBgsmduYnrFttfx0H//0PYEBbc2PKQi5JVzaJuALS0CCYrPtoKWIpliXYAeQT+mSGAYknkCjHn8NAj4wcpUdpJopclpIapC921K9dBgVdkJ/wDWFIw2yVioDMtRFftsa6CqoAgnJ5BkKqTRCwHbwJPMDQc6ichnxsbf6x2y8sSSDFQK+npoBeQuV1NrZCXRbh1IMyIBp69JqNAyYyMlqllAKl0EEDHUC+sGd/adBRXd4JyYhAvwy0mYNfjGxJ20EcJxKmVQuNKgOryoB3qTO30PXQUY3LjfJkVz2qxlRuTRgAdqU250CkZnvKOofK0FlBUDuKiYBkSOdBsgW5cZZGyZRPnYkCRETWsniKU3jQUyCcQxhCEZmU7XUBWhuFeI5roEIdXxY2xXg3KoUwGERQRT1/hoCiQ+PIJTDhF7YiT29tSInrMTOgksDIi3FGQshkdpWNgKzJoKTEdNBZF8lmN8UXAuQWJJr0as03PG3oCwnksy5ASoPhP9Kl6gggyPSa/bQVZcjBlAsfGAcjrNTAgAzQTxFBWlNApVv0imK2yoEwYgAXA3QZJj79dBNkZVUlIZlIOFQLiLZAUgTSBTj7aBjIyloh0Y9oMCNxM1liKkcaAsUSCzDM7lz3AGQRdDWtBC80PpoDlXCtpOIgUAxGskHb132u+lNAis9uQO4AiuQQCsw0xTap2n20GOQ/pqCAQ36iAkdgECLTAoZmfc6BQuO48DASzsJvDSGvArIMxJ430CuGcErbbCjKKdykdpA9o5iduugpifx241SFbxu5uJmYmAI3kCn5aDB+wqX8aZQ1orAoCRMqIBMV9p0CDEZKoxBxqTbUzEgEcmC3AFdA72Gxg0sjIACIMGLRLHYxPXQC0ZzkZQVbIA5moBMRvA4HFfWh0DlhkhUqCB5MYuJhBVZBkQDFBU6DMC6q4IV4H6gmatF19qyYiBSn00EMjZGTxLlLOC65UkCFHJjag/H6aDoarY7uxFCeFCzGbKyeIjcnaNBzhXJbGGGQnHAUKaCtetRzBHGgsXM45txUkqvaLYAkClIUmoO0dNBNcYVcdrnKqvLGYAmCBABIkkjpoGXECVCshxl4vY33AEipiJIam/TjQT86TdYfF8fLxPxnaZtrF3roP/0fYE+Lx4/nd3eL5WTItm2tu1scaCSTall/j8dZ2ml13MTO3O2gy3eN/LFkGbouvn9SI/qnafT10Fntl//wAt3f47Y3S/fjefx0Dfq+NLLLv04v3m7unn5RM/noBk8sN4ZurfbZHyNsxW6I0Es1t+O6bbf0brYugT8e2I/GZpoMI/U/8Azy1szbs13y533pG+g6O+cs3een9sxB6Unb0mNA3dI8l1sHxz8d6et3tSNtBE+PyLMRLeOYtthotmsbf+P4aBU88LM+Kvxm31/wDLadq9f6tA+Dzy3lt/7EiZsi2DbMV+Ufu50C4LZxWxbaP8k/3H8bZjjf10GHk83+xvdcnjiJsu4upH79BJfLelnl8d4t+Xx4u/8d96dNBQeD/1X+SwTbN0Wn+2kzt/+3QWabeyPFKx5L95/Tj62/jOgmkePFdfP6l/wmZbbm67aNAH/wDb4vJfP6e19s8XVtmf+NB0Gf8AqtbM2vF3ziv4z+06CdJzTN9xsum2azPEdY40E8cSvljyW/q3zbFduP8A5R/HQNkj9C/bts/unyCI4mJmPrxoIZLrj4IurM/OZp8/SJj1mugo/nvPht+S9PJdH9cV3mdBscXYI8fmtX5770iK7Tv/AOOgknjj9O6Lx47Z/uE7V2j161jQWMeMTb4PGLIi2eN+fld/HQMZuptYfPbET29azMxNZ9NActvmPlnxwu+01n5cxbtoHxeGG8s7NPm+dsibvrEToEW7zNbb4rG/us/8bvSPpvGgLR4Wuu89N7L5gREc9JroES2xrrfD5zHymJM+SaztE8xoA8WLZd45fzWzfMj48RERP56BO23FfffYLbPjNo/yTWLutIjQdWHwzhtj4i2+L/gI+sRPO3EaCb/DP47bJN9+8R3bf/pia6BT5fHj8Vt8L8bLfjS6PWbeNtA62+Zf+ttdWI+FwviaWz9ZmKaCTWRlu2lrbI2keTenWJ4+mgPb5f8A1XWf/wAls/8A223/ALToP//Z",
            "type": "image/jpeg"
        },
        "$:/themes/tiddlywiki/starlight/styles.tid": {
            "title": "$:/themes/tiddlywiki/starlight/styles.tid",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n/*\nPlaceholder for a more thorough refinement of Snow White\n*/\n\n@font-face {\n  font-family: \"Arvo\";\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Arvo\"), url(<<datauri \"$:/themes/tiddlywiki/starlight/arvo.woff\">>) format(\"woff\");\n}\n\nhtml body, .tc-sidebar-scrollable-backdrop {\n\tfont-family: \"Arvo\", \"Times\";\n  background: url(<<datauri \"$:/themes/tiddlywiki/starlight/ltbg.jpg\">>);\n}\n\n.tc-page-controls svg {\n  <<filter \"drop-shadow(1px 1px 2px rgba(255,255,255,0.9))\">>\n}\n"
        },
        "$:/themes/tiddlywiki/starlight/themetweaks": {
            "title": "$:/themes/tiddlywiki/starlight/themetweaks",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "Star Tweaks",
            "text": "Demo of a control panel tab dynamically loaded with a theme.\n"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/tiddlywiki/tight/base": {
            "title": "$:/themes/tiddlywiki/tight/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\thtml body.tc-body {\n\t\tfont-size: 13px;\n\t\tline-height: 16px;\n\t}\n\n\thtml body.tc-body h1,\n\thtml body.tc-body h2,\n\thtml body.tc-body h3,\n\thtml body.tc-body h4,\n\thtml body.tc-body p {\n\t\tmargin-top: 0.3em;\n\t\tmargin-bottom: 0.3em;\n\t}\n\n\thtml body.tc-body code {\n\t\tfont-size: 0.8em;\n\t}\n\n\thtml body.tc-body section.tc-story-river {\n\t\tpadding: 0px;\n\t}\n\n\thtml body.tc-body div.tc-tiddler-frame {\n\t\tpadding: 12px;\n\t}\n\n\thtml body.tc-body div.tc-sidebar-scrollable {\n\t\tpadding: 12px 0 12px 12px;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-subtitle {\n\t\tfont-size: 0.7em;\n\t\tfont-weight: 700;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-subtitle .tc-tiddlylink {\n\t\tmargin-right: .3em;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-tags-wrapper {\n\t\tmargin: 0;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame button.tc-tag-label,\n\thtml body.tc-body .tc-tiddler-frame span.tc-tag-label {\n\t\tfont-size: 0.8em;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-body h1 {\n\t\tfont-size: 1.5em;\n\t\tfont-weight: 500;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-body h2 {\n\t\tfont-size: 1.3em;\n\t\tfont-weight: 500;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-body h3 {\n\t\tfont-size: 1.2em;\n\t\tfont-weight: 500;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-body h4 {\n\t\tfont-size: 1.1em;\n\t\tfont-weight: 500;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-improvement-banner {\n\t\tmargin-right: -15px;\n\t\tmargin-left: -10px;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-info {\n\t    margin: 0 -13px 0 -13px;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-fold-banner {\n\t    width: 13px;\n\t    margin-left: -15px;\n\t}\n\n\thtml body.tc-body .tc-tiddler-frame .tc-unfold-banner {\n\t    margin-left: -13px;\n\t    margin-top: -4px;\n\t}\n\n}\n"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/tiddlywiki/vanilla/themetweaks": {
            "title": "$:/themes/tiddlywiki/vanilla/themetweaks",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ThemeTweaks/ThemeTweaks}}",
            "text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n\\define backgroundimage-dropdown()\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"\n\t$value=<<imageTitle>>\n/>\n\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n\\end\n\n\\define backgroundimageattachment-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\" default=\"scroll\">\n<option value=\"scroll\"><<lingo Settings/BackgroundImageAttachment/Scroll>></option>\n<option value=\"fixed\"><<lingo Settings/BackgroundImageAttachment/Fixed>></option>\n</$select>\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n<option value=\"auto\"><<lingo Settings/BackgroundImageSize/Auto>></option>\n<option value=\"cover\"><<lingo Settings/BackgroundImageSize/Cover>></option>\n<option value=\"contain\"><<lingo Settings/BackgroundImageSize/Contain>></option>\n</$select>\n\\end\n\n<<lingo ThemeTweaks/Hint>>\n\n! <<lingo Options>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><<lingo Options/SidebarLayout>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\"fluid-fixed\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><<lingo Options/StickyTitles>></$link><br>//<<lingo Options/StickyTitles/Hint>>// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><option value=\"no\">{{$:/language/No}}</option><option value=\"yes\">{{$:/language/Yes}}</option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><<lingo Options/CodeWrapping>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><option value=\"pre\">{{$:/language/No}}</option><option value=\"pre-wrap\">{{$:/language/Yes}}</option></$select> |\n\n! <<lingo Settings>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"><<lingo Settings/FontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"><<lingo Settings/BackgroundImage>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<<backgroundimage-dropdown>> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\"><<lingo Settings/BackgroundImageAttachment>></$link> |<<backgroundimageattachment-dropdown>> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\"><<lingo Settings/BackgroundImageSize>></$link> |<<backgroundimagesize-dropdown>> | |\n\n! <<lingo Metrics>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\"><<lingo Metrics/LineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\"><<lingo Metrics/BodyFontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\"><<lingo Metrics/BodyLineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\"><<lingo Metrics/StoryLeft>></$link><br>//<<lingo Metrics/StoryLeft/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\"><<lingo Metrics/StoryTop>></$link><br>//<<lingo Metrics/StoryTop/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\"><<lingo Metrics/StoryRight>></$link><br>//<<lingo Metrics/StoryRight/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\"><<lingo Metrics/StoryWidth>></$link><br>//<<lingo Metrics/StoryWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"><<lingo Metrics/TiddlerWidth>></$link><br>//<<lingo Metrics/TiddlerWidth/Hint>>//<br> |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\"><<lingo Metrics/SidebarBreakpoint>></$link><br>//<<lingo Metrics/SidebarBreakpoint/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\"><<lingo Metrics/SidebarWidth>></$link><br>//<<lingo Metrics/SidebarWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" default=\"\" tag=\"input\"/> |\n"
        },
        "$:/themes/tiddlywiki/vanilla/base": {
            "title": "$:/themes/tiddlywiki/vanilla/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\define custom-background-datauri()\n<$set name=\"background\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\n<$list filter=\"[<background>is[image]]\">\n`background: url(`\n<$list filter=\"[<background>!has[_canonical_uri]]\">\n`\"`<$macrocall $name=\"datauri\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\"`\n</$list>\n<$list filter=\"[<background>has[_canonical_uri]]\">\n`\"`<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\"_canonical_uri\"/>`\"`\n</$list>\n`) center center;`\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\n</$list>\n</$set>\n\\end\n\n\\define if-fluid-fixed(text,hiddenSidebarText)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" type=\"match\" text=\"fluid-fixed\">\n$text$\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">\n$hiddenSidebarText$\n</$reveal>\n</$reveal>\n\\end\n\n\\define if-editor-height-fixed(then,else)\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n$then$\n</$reveal>\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n$else$\n</$reveal>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\nhtml button {\n\tline-height: 1.2;\n\tcolor: <<colour button-foreground>>;\n\tbackground: <<colour button-background>>;\n\tborder-color: <<colour button-border>>;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\n\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour page-background>>;\n}\n\nbody.tc-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\n\tword-wrap: break-word;\n\t<<custom-background-datauri>>\n\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tfill: <<colour foreground>>;\n}\n\n<<if-background-attachment \"\"\"\n\nbody.tc-body {\n        background-color: transparent;\n}\n\n\"\"\">>\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tpadding: 14px;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n\tquotes: \"\\201C\"\"\\201D\"\"\\2018\"\"\\2019\";\n}\n\nblockquote > div {\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n}\n\nblockquote.tc-big-quote {\n\tfont-family: Georgia, serif;\n\tposition: relative;\n\tbackground: <<colour pre-background>>;\n\tborder-left: none;\n\tmargin-left: 50px;\n\tmargin-right: 50px;\n\tpadding: 10px;\n    border-radius: 8px;\n}\n\nblockquote.tc-big-quote cite:before {\n\tcontent: \"\\2014 \\2009\";\n}\n\nblockquote.tc-big-quote:before {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: open-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n    left: -50px;\n    top: 42px;\n}\n\nblockquote.tc-big-quote:after {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: close-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n    right: -80px;\n    bottom: -20px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\nbutton, textarea, input, select {\n\toutline-color: <<colour primary>>;\n}\n\ntextarea,\ninput[type=text],\ninput[type=search],\ninput[type=\"\"],\ninput:not([type]) {\n\tcolor: <<colour foreground>>;\n\tbackground: <<colour background>>;\n}\n\ninput[type=\"checkbox\"] {\n  vertical-align: middle;\n}\n\n.tc-muted {\n\tcolor: <<colour muted-foreground>>;\n}\n\nsvg.tc-image-button {\n\tpadding: 0px 1px 1px 0px;\n}\n\n.tc-icon-wrapper > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\nkbd {\n\tdisplay: inline-block;\n\tpadding: 3px 5px;\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tcolor: <<colour foreground>>;\n\tvertical-align: middle;\n\tbackground-color: <<colour background>>;\n\tborder: solid 1px <<colour muted-foreground>>;\n\tborder-bottom-color: <<colour muted-foreground>>;\n\tborder-radius: 3px;\n\tbox-shadow: inset 0 -1px 0 <<colour muted-foreground>>;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <<colour table-border>>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\t/* next 2 elements needed, since normalize 8.0.1 */\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <<colour table-border>>;\n\tborder-left: 1px solid <<colour table-border>>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <<colour table-footer-background>>;\n}\n\n.tc-csv-table {\n\twhite-space: nowrap;\n}\n\n.tc-tiddler-frame img,\n.tc-tiddler-frame svg,\n.tc-tiddler-frame canvas,\n.tc-tiddler-frame embed,\n.tc-tiddler-frame iframe {\n\tmax-width: 100%;\n}\n\n.tc-tiddler-body > embed,\n.tc-tiddler-body > iframe {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\nbutton.tc-tiddlylink,\na.tc-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: 500;\n\tcolor: <<colour tiddler-link-foreground>>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tc-sidebar-lists a.tc-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tc-sidebar-lists a.tc-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\nbutton.tc-tiddlylink:hover,\na.tc-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tc-tiddlylink-resolves {\n}\n\na.tc-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tc-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tc-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-tiddlylink-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tc-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tc-tiddler-dragger-inner {\n\tposition: absolute;\n\ttop: -1000px;\n\tleft: -1000px;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <<colour dragger-foreground>>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour dragger-background>>;\n\tborder-radius: 20px;\n}\n\n.tc-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tc-dropzone {\n\tposition: relative;\n}\n\n.tc-dropzone.tc-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"<<lingo DropMessage>>\";\n}\n\n.tc-droppable > .tc-droppable-placeholder {\n\tdisplay: none;\n}\n\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\n\tdisplay: block;\n\tborder: 2px dashed <<colour dropzone-background>>;\n}\n\n.tc-draggable {\n\tcursor: move;\n}\n\n.tc-sidebar-tab-open .tc-droppable-placeholder, .tc-tagged-draggable-list .tc-droppable-placeholder,\n.tc-links-draggable-list .tc-droppable-placeholder {\n\tline-height: 2em;\n\theight: 2em;\n}\n\n.tc-sidebar-tab-open-item {\n\tposition: relative;\n}\n\n.tc-sidebar-tab-open .tc-btn-invisible.tc-btn-mini svg {\n\tfont-size: 0.7em;\n\tfill: <<colour muted-foreground>>;\n}\n\n/*\n** Plugin reload warning\n*/\n\n.tc-plugin-reload-warning {\n\tz-index: 1000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour alert-background>>;\n\ttext-align: center;\n}\n\n/*\n** Buttons\n*/\n\nbutton svg, button img, label svg, label img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n    \tcursor: pointer;\n\tcolor: <<colour foreground>>;\n}\n\n.tc-btn-boxed {\n\tfont-size: 0.6em;\n\tpadding: 0.2em;\n\tmargin: 1px;\n\tbackground: none;\n\tborder: 1px solid <<colour tiddler-controls-foreground>>;\n\tborder-radius: 0.25em;\n}\n\nhtml body.tc-body .tc-btn-boxed svg {\n\tfont-size: 1.6666em;\n}\n\n.tc-btn-boxed:hover {\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n}\n\nhtml body.tc-body .tc-btn-boxed:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded {\n\tfont-size: 0.5em;\n\tline-height: 2;\n\tpadding: 0em 0.3em 0.2em 0.4em;\n\tmargin: 1px;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n\tborder-radius: 2em;\n}\n\nhtml body.tc-body .tc-btn-rounded svg {\n\tfont-size: 1.6666em;\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded:hover {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tcolor: <<colour muted-foreground>>;\n}\n\nhtml body.tc-body .tc-btn-rounded:hover svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-text {\n\tpadding: 0;\n\tmargin: 0;\n}\n\n/* used for documentation \"fake\" buttons */\n.tc-btn-standard {\n\tline-height: 1.8;\n\tcolor: #667;\n\tbackground-color: #e0e0e0;\n\tborder: 1px solid #888;\n\tpadding: 2px 1px 2px 1px;\n\tmargin: 1px 4px 1px 4px;\n}\n\n.tc-btn-big-green {\n\tdisplay: inline-block;\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <<colour download-background>>;\n\tcolor: <<colour download-foreground>>;\n\tfill: <<colour download-foreground>>;\n\tborder: none;\n\tborder-radius: 2px;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n\ttext-decoration: none;\n}\n\n.tc-btn-big-green svg,\n.tc-btn-big-green img {\n\theight: 2em;\n\twidth: 2em;\n\tvertical-align: middle;\n\tfill: <<colour download-foreground>>;\n}\n\n.tc-primary-btn {\n \tbackground: <<colour primary>>;\n}\n\n.tc-sidebar-lists input {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-sidebar-lists button {\n\tcolor: <<colour sidebar-button-foreground>>;\n\tfill: <<colour sidebar-button-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\n}\n\n.tc-unfold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 100%;\n\twidth: calc(100% + 2px);\n\tmargin-left: -43px;\n\ttext-align: center;\n\tborder-top: 2px solid <<colour tiddler-info-background>>;\n\tmargin-top: 4px;\n}\n\n.tc-unfold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n\tborder-top: 2px solid <<colour tiddler-info-border>>;\n}\n\n.tc-unfold-banner svg, .tc-fold-banner svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n.tc-fold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 23px;\n\ttext-align: center;\n\tmargin-left: -35px;\n\ttop: 6px;\n\tbottom: 6px;\n}\n\n.tc-fold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-unfold-banner {\n\t\tposition: static;\n\t\twidth: calc(100% + 59px);\n\t}\n\n\t.tc-fold-banner {\n\t\twidth: 16px;\n\t\tmargin-left: -16px;\n\t\tfont-size: 0.75em;\n\t}\n\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\nbutton.tc-tag-label, span.tc-tag-label {\n\tdisplay: inline-block;\n\tpadding: 0.16em 0.7em;\n\tfont-size: 0.9em;\n\tfont-weight: 400;\n\tline-height: 1.2em;\n\tcolor: <<colour tag-foreground>>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour tag-background>>;\n\tborder-radius: 1em;\n}\n\n.tc-sidebar-scrollable .tc-tag-label {\n\ttext-shadow: none;\n}\n\n.tc-untagged-separator {\n\twidth: 10em;\n\tleft: 0;\n\tmargin-left: 0;\n\tborder: 0;\n\theight: 1px;\n\tbackground: <<colour tab-divider>>;\n}\n\nbutton.tc-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tc-tag-label svg, .tc-tag-label img {\n\theight: 1em;\n\twidth: 1em;\n\tmargin-right: 3px; \n\tmargin-bottom: 1px;\n\tvertical-align: text-bottom;\n}\n\n.tc-edit-tags button.tc-remove-tag-button svg {\n\tfont-size: 0.7em;\n\tvertical-align: middle;\n}\n\n.tc-tag-manager-table .tc-tag-label {\n\twhite-space: normal;\n}\n\n.tc-tag-manager-tag {\n\twidth: 100%;\n}\n\nbutton.tc-btn-invisible.tc-remove-tag-button {\n\toutline: none;\n}\n\n/*\n** Page layout\n*/\n\n.tc-topbar {\n\tposition: fixed;\n\tz-index: 1200;\n}\n\n.tc-topbar-left {\n\tleft: 29px;\n\ttop: 5px;\n}\n\n.tc-topbar-right {\n\ttop: 5px;\n\tright: 29px;\n}\n\n.tc-topbar button {\n\tpadding: 8px;\n}\n\n.tc-topbar svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-topbar button:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.tc-sidebar-header .tc-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-sidebar-header .tc-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-advanced-search input {\n\twidth: 60%;\n}\n\n.tc-search a svg {\n\twidth: 1.2em;\n\theight: 1.2em;\n\tvertical-align: middle;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\n}\n\n.tc-page-controls .tc-drop-down {\n  font-size: 1rem;\n}\n\n.tc-page-controls button {\n\tmargin-right: 0.5em;\n}\n\n.tc-page-controls a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-page-controls img {\n\twidth: 1em;\n}\n\n.tc-page-controls svg {\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tc-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tc-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tc-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.tc-story-river {\n\tposition: relative;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-sidebar-header {\n\t\tpadding: 14px;\n\t\tmin-height: 32px;\n\t\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-message-box {\n\t\tmargin: 21px -21px 21px -21px;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 71px 0 28px 42px;\n\t}\n\n\thtml[dir=\"rtl\"] .tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\n\t\tpadding: 42px 42px 42px 42px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-story-river {\n\t\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\n\t}\n\n\">>\n\n}\n\n@media print {\n\n\tbody.tc-body {\n\t\tbackground-color: transparent;\n\t}\n\n\t.tc-sidebar-header, .tc-topbar {\n\t\tdisplay: none;\n\t}\n\n\t.tc-story-river {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.tc-story-river .tc-tiddler-frame {\n\t\tmargin: 0;\n\t\tborder: none;\n\t\tpadding: 0;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tposition: relative;\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n{{$:/themes/tiddlywiki/vanilla/sticky}}\n\n.tc-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n.tc-view-field-table {\n\twidth: 100%;\n}\n\n.tc-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n\tfont-weight: 200;\n}\n\n.tc-view-field-value {\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\n\t\tborder-radius: 2px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\">>\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.tc-site-title,\n.tc-titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.2em;\n\tcolor: <<colour tiddler-title-foreground>>;\n\tmargin: 0;\n}\n\n.tc-site-title {\n\tcolor: <<colour site-title-foreground>>;\n}\n\n.tc-tiddler-title-icon {\n\tvertical-align: middle;\n\tmargin-right: .1em;\n}\n\n.tc-system-title-prefix {\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-titlebar h2 {\n\tfont-size: 1em;\n\tdisplay: inline;\n}\n\n.tc-titlebar img {\n\theight: 1em;\n}\n\n.tc-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tc-subtitle .tc-tiddlylink {\n\tmargin-right: .3em;\n}\n\n.tc-tiddler-missing .tc-title {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.tc-tiddler-frame .tc-tiddler-controls {\n\tfloat: right;\n}\n\n.tc-tiddler-controls .tc-drop-down {\n\tfont-size: 0.6em;\n}\n\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\n\tfont-size: 1em;\n}\n\n.tc-tiddler-controls > span > button,\n.tc-tiddler-controls > span > span > button,\n.tc-tiddler-controls > span > span > span > button {\n\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\n.tc-search button svg, .tc-search a svg {\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\n\theight: 0.75em;\n}\n\n.tc-search button svg, .tc-search a svg {\n    height: 1.2em;\n    width: 1.2em;\n    margin: 0 0.25em;\n}\n\n.tc-tiddler-controls button.tc-selected svg,\n.tc-page-controls button.tc-selected svg  {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tc-tiddler-frame .tc-edit-texteditor {\n\twidth: 100%;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor,\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tbackground-color: <<colour tiddler-editor-background>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\n.tc-tiddler-frame .tc-binary-warning {\n\twidth: 100%;\n\theight: 5em;\n\ttext-align: center;\n\tpadding: 3em 3em 6em 3em;\n\tbackground: <<colour alert-background>>;\n\tborder: 1px solid <<colour alert-border>>;\n}\n\ncanvas.tc-edit-bitmapeditor  {\n\tborder: 6px solid <<colour tiddler-editor-border-image>>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tc-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tc-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n.tc-tiddler-body {\n\tclear: both;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\nhtml body.tc-body.tc-single-tiddler-window {\n\tmargin: 1em;\n\tbackground: <<colour tiddler-background>>;\n}\n\n.tc-single-tiddler-window img,\n.tc-single-tiddler-window svg,\n.tc-single-tiddler-window canvas,\n.tc-single-tiddler-window embed,\n.tc-single-tiddler-window iframe {\n\tmax-width: 100%;\n}\n\n/*\n** Editor\n*/\n\n.tc-editor-toolbar {\n\tmargin-top: 8px;\n}\n\n.tc-editor-toolbar button {\n\tvertical-align: middle;\n\tbackground-color: <<colour tiddler-controls-foreground>>;\n\tcolor: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n\tborder-radius: 4px;\n\tpadding: 3px;\n\tmargin: 2px 0 2px 4px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\n\tmargin-left: 1px;\n\twidth: 1em;\n\tborder-radius: 8px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\n\tmargin-left: 11px;\n}\n\n.tc-editor-toolbar button.tc-selected {\n\tbackground-color: <<colour primary>>;\n}\n\n.tc-editor-toolbar button svg {\n\twidth: 1.6em;\n\theight: 1.2em;\n}\n\n.tc-editor-toolbar button:hover {\n\tbackground-color: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour background>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\n\twhite-space: normal;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\n\tdisplay: inline-block;\n\tpadding: 3px;\n\twidth: auto;\n}\n\n.tc-editor-toolbar .tc-search-results {\n\tpadding: 0;\n}\n\n/*\n** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n<<if-fluid-fixed text:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 0;\n\t\tposition: relative;\n\t\twidth: auto;\n\t\tleft: 0;\n\t\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 42px);\n\t}\n\n\"\"\" hiddenSidebarText:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 3em;\n\t\tmargin-right: 0;\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 84px);\n\t}\n\n\"\"\">>\n\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n  fill: <<colour toolbar-new-button>>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n  fill: <<colour toolbar-options-button>>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n  fill: <<colour toolbar-save-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n  fill: <<colour toolbar-info-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n  fill: <<colour toolbar-edit-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n  fill: <<colour toolbar-close-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n  fill: <<colour toolbar-delete-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n  fill: <<colour toolbar-cancel-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n  fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-type-selector .tc-edit-typeeditor {\n\twidth: 20%;\n}\n\n.tc-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tc-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tc-edit-add-tag .tc-add-tag-name input {\n\twidth: 50%;\n}\n\n.tc-edit-add-tag .tc-keyboard {\n\tdisplay:inline;\n}\n\n.tc-edit-tags .tc-tag-label {\n\tdisplay: inline-block;\n}\n\n.tc-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tc-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tc-tiddler-preview {\n\toverflow: auto;\n}\n\n.tc-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 49%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 0 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n<<if-editor-height-fixed then:\"\"\"\n\n.tc-tiddler-preview-preview {\n\toverflow-y: scroll;\n\theight: {{$:/config/TextEditor/EditorHeight/Height}};\n}\n\n\"\"\">>\n\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {\n\twidth: 49%;\n}\n\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\n\tmax-width: 49%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tc-edit-field-name {\n\ttext-align: right;\n}\n\n.tc-edit-field-value input {\n\twidth: 100%;\n}\n\n.tc-edit-field-remove {\n}\n\n.tc-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tc-edit-field-add-name {\n\tdisplay: inline-block;\n\twidth: 15%;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n\twidth: 40%;\n}\n\n.tc-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Storyview Classes\n*/\n\n.tc-viewswitcher .tc-image-button {\n\tmargin-right: .3em;\n}\n\n.tc-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-storyview-zoomin-tiddler {\n\t\twidth: calc(100% - 84px);\n\t}\n\n}\n\n/*\n** Dropdowns\n*/\n\n.tc-btn-dropdown {\n\ttext-align: left;\n}\n\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-drop-down-wrapper {\n\tposition: relative;\n}\n\n.tc-drop-down {\n\tmin-width: 380px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\ttext-shadow: none;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-drop-down {\n\tmargin-left: 14px;\n}\n\n.tc-drop-down button svg, .tc-drop-down a svg  {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down button.tc-btn-invisible:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down .tc-drop-down-info {\n\tpadding-left: 14px;\n}\n\n.tc-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tc-drop-down svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-drop-down img {\n\twidth: 1em;\n}\n\n.tc-drop-down a, .tc-drop-down button {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n\twidth: 100%;\n\ttext-align: left;\n\tcolor: <<colour foreground>>;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\n\tdisplay: inline-block;\n    width: auto;\n    margin-bottom: 0px;\n    border-bottom-left-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.tc-drop-down .tc-prompt {\n\tpadding: 0 14px;\n}\n\n.tc-drop-down .tc-chooser {\n\tborder: none;\n}\n\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\n\tfont-size: 0.4em;\n\tpadding-left: 1.2em;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n\ttext-shadow: none;\n}\n\n.tc-block-dropdown.tc-search-drop-down {\n\tmargin-left: -12px;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-block-dropdown.tc-search-drop-down a {\n\tdisplay: block;\n\tpadding: 0px 10px 0px 10px;\n}\n\n.tc-drop-down .tc-dropdown-item-plain,\n.tc-block-dropdown .tc-dropdown-item-plain {\n\tpadding: 4px 14px 4px 7px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-block-dropdown a:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-search-results {\n\tpadding: 0 7px 0 7px;\n}\n\n.tc-image-chooser, .tc-colour-chooser {\n\twhite-space: normal;\n}\n\n.tc-image-chooser a,\n.tc-colour-chooser a {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: center;\n\tposition: relative;\n}\n\n.tc-image-chooser a {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 2px;\n\tmargin: 2px;\n\twidth: 4em;\n\theight: 4em;\n}\n\n.tc-colour-chooser a {\n\tpadding: 3px;\n\twidth: 2em;\n\theight: 2em;\n\tvertical-align: middle;\n}\n\n.tc-image-chooser a:hover,\n.tc-colour-chooser a:hover {\n\tbackground: <<colour primary>>;\n\tpadding: 0px;\n\tborder: 3px solid <<colour primary>>;\n}\n\n.tc-image-chooser a svg,\n.tc-image-chooser a img {\n\tdisplay: inline-block;\n\twidth: auto;\n\theight: auto;\n\tmax-width: 3.5em;\n\tmax-height: 3.5em;\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tmargin: auto;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 900;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 2em;\n\t\tleft: 25%;\n\t\twidth: 50%;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-header img, .tc-modal-header svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical  {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tpadding: 3px 5px 3px 5px;\n\tmargin-right: 0.3em;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\tmargin-right: 0;\n\ttext-align: right;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-right: 1px solid <<colour tab-background-selected>>;\n}\n\n.tc-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tc-tab-divider.tc-vertical  {\n\tdisplay: none;\n}\n\n.tc-tab-content {\n\tmargin-top: 14px;\n}\n\n.tc-tab-content.tc-vertical  {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n\tborder-left: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 70%;\n\tflex: 1 0 70%;\n\toverflow: auto;\n}\n\n.tc-sidebar-lists .tc-tab-buttons {\n\tmargin-bottom: -1px;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tcolor: <<colour sidebar-tab-foreground-selected>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tcolor: <<colour sidebar-tab-foreground>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border>>;\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\tdisplay: block;\n\twidth: 100%;\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Manager\n*/\n\n.tc-manager-wrapper {\n\t\n}\n\n.tc-manager-controls {\n\t\n}\n\n.tc-manager-control {\n\tmargin: 0.5em 0;\n}\n\n.tc-manager-list {\n\twidth: 100%;\n\tborder-top: 1px solid <<colour muted-foreground>>;\n\tborder-left: 1px solid <<colour muted-foreground>>;\n\tborder-right: 1px solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item {\n\n}\n\n.tc-manager-list-item-heading {\n    display: block;\n    width: 100%;\n    text-align: left;\t\n\tborder-bottom: 1px solid <<colour muted-foreground>>;\n\tpadding: 3px;\n}\n\n.tc-manager-list-item-heading-selected {\n\tfont-weight: bold;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n\tbackground-color: <<colour foreground>>;\n}\n\n.tc-manager-list-item-heading:hover {\n\tbackground: <<colour primary>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-manager-list-item-content {\n\tdisplay: flex;\n}\n\n.tc-manager-list-item-content-sidebar {\n    flex: 1 0;\n    background: <<colour tiddler-editor-background>>;\n    border-right: 0.5em solid <<colour muted-foreground>>;\n    border-bottom: 0.5em solid <<colour muted-foreground>>;\n    white-space: nowrap;\n}\n\n.tc-manager-list-item-content-item-heading {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: left;\n    background: <<colour muted-foreground>>;\n\ttext-transform: uppercase;\n\tfont-size: 0.6em;\n\tfont-weight: bold;\n    padding: 0.5em 0 0.5em 0;\n}\n\n.tc-manager-list-item-content-item-body {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-manager-list-item-content-item-body > pre {\n\tmargin: 0.5em 0 0.5em 0;\n\tborder: none;\n\tbackground: inherit;\n}\n\n.tc-manager-list-item-content-tiddler {\n    flex: 3 1;\n    border-left: 0.5em solid <<colour muted-foreground>>;\n    border-right: 0.5em solid <<colour muted-foreground>>;\n    border-bottom: 0.5em solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item-content-item-body > table {\n\tborder: none;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-manager-list-item-content-item-body > table td {\n\tborder: none;\n}\n\n.tc-manager-icon-editor > button {\n\twidth: 100%;\n}\n\n.tc-manager-icon-editor > button > svg,\n.tc-manager-icon-editor > button > button {\n\twidth: 100%;\n\theight: auto;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 28px;\n\tleft: 0;\n\tright: 0;\n\tmax-width: 50%;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 14px;\n\tpadding: 7px;\n\tborder: 1px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 7px;\n\tright: 7px;\n    line-height: 0;\n}\n\n.tc-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tc-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n    font-size: 0.8em;\n    margin-bottom: 0.5em;\n}\n\n.tc-alert-body > p {\n\tmargin: 0;\n}\n\n.tc-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-static-alert {\n\t\tposition: relative;\n\t}\n\n\t.tc-static-alert-inner {\n\t\tposition: absolute;\n\t\tz-index: 100;\n\t}\n\n}\n\n.tc-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n}\n\n/*\n** Floating drafts list\n*/\n\n.tc-drafts-list {\n\tz-index: 2000;\n\tposition: fixed;\n\tfont-size: 0.8em;\n\tleft: 0;\n\tbottom: 0;\n}\n\n.tc-drafts-list a {\n\tmargin: 0 0.5em;\n\tpadding: 4px 4px;\n\tborder-top-left-radius: 4px;\n\tborder-top-right-radius: 4px;\n\tborder: 1px solid <<colour background>>;\n\tborder-bottom-none;\n\tbackground: <<colour dirty-indicator>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a:hover {\n\ttext-decoration: none;\n\tbackground: <<colour foreground>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a svg {\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: text-bottom;\n}\n\n/*\n** Control panel\n*/\n\n.tc-control-panel td {\n\tpadding: 4px;\n}\n\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\n\twidth: 100%;\n}\n\n.tc-plugin-info {\n\tdisplay: flex;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tfill: <<colour muted-foreground>>;\n\tbackground-color: <<colour background>>;\n\tmargin: 0.5em 0 0.5em 0;\n\tpadding: 4px;\n    align-items: center;\n}\n\n.tc-plugin-info-sub-plugins .tc-plugin-info {\n    margin: 0.5em;\n\tbackground: <<colour background>>;\n}\n\n.tc-plugin-info-sub-plugin-indicator {\n\tmargin: -16px 1em 0 2em;\n}\n\n.tc-plugin-info-sub-plugin-indicator button {\n\tcolor: <<colour background>>;\n\tbackground: <<colour foreground>>;\n\tborder-radius: 8px;\n    padding: 2px 7px;\n    font-size: 0.75em;\n}\n\n.tc-plugin-info-sub-plugins .tc-plugin-info-dropdown {\n\tmargin-left: 1em;\n\tmargin-right: 1em;\n}\n\n.tc-plugin-info-disabled {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n}\n\n.tc-plugin-info-disabled:hover {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n}\n\na.tc-tiddlylink.tc-plugin-info:hover {\n\ttext-decoration: none;\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour foreground>>;\n}\n\na.tc-tiddlylink.tc-plugin-info:hover .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info-chunk {\n    margin: 2px;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-toggle {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tline-height: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-icon {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tline-height: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description {\n\tflex-grow: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-buttons {\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tflex-grow: 0;\n\tflex-shrink: 0;\n    text-align: right;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description h1 {\n\tfont-size: 1em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description h2 {\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description div {\n\tfont-size: 0.7em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-toggle img, .tc-plugin-info-chunk.tc-plugin-info-toggle svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-icon img, .tc-plugin-info-chunk.tc-plugin-info-icon svg {\n\twidth: 2em;\n\theight: 2em;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tmargin-top: -8px;\n}\n\n.tc-plugin-info-dropdown-message {\n\tbackground: <<colour message-background>>;\n\tpadding: 0.5em 1em 0.5em 1em;\n\tfont-weight: bold;\n\tfont-size: 0.8em;\n}\n\n.tc-plugin-info-dropdown-body {\n\tpadding: 1em 1em 0 1em;\n\tbackground: <<colour background>>;\n}\n\n.tc-plugin-info-sub-plugins {\n\tpadding: 0.5em;\n    margin: 0 1em 1em 1em;\n\tbackground: <<colour notification-background>>;\n}\n\n.tc-install-plugin {\n\tfont-weight: bold;\n\tbackground: green;\n\tcolor: white;\n\tfill: white;\n\tborder-radius: 4px;\n\tpadding: 3px;\n}\n\n.tc-install-plugin.tc-reinstall-downgrade {\n\tbackground: red;\n}\n\n.tc-install-plugin.tc-reinstall {\n\tbackground: blue;\n}\n\n.tc-install-plugin.tc-reinstall-upgrade {\n\tbackground: orange;\n}\n\n.tc-check-list {\n\tline-height: 2em;\n}\n\n.tc-check-list .tc-image-button {\n\theight: 1.5em;\n}\n\n/*\n** Message boxes\n*/\n\n.tc-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n.tc-message-box svg {\n\twidth: 1em;\n\theight: 1em;\n    vertical-align: text-bottom;\n}\n\n/*\n** Pictures\n*/\n\n.tc-bordered-image {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 5px;\n\tmargin: 5px;\n}\n\n/*\n** Floats\n*/\n\n.tc-float-right {\n\tfloat: right;\n}\n\n/*\n** Chooser\n*/\n\n.tc-chooser {\n\tborder-right: 1px solid <<colour table-header-background>>;\n\tborder-left: 1px solid <<colour table-header-background>>;\n}\n\n\n.tc-chooser-item {\n\tborder-bottom: 1px solid <<colour table-header-background>>;\n\tborder-top: 1px solid <<colour table-header-background>>;\n\tpadding: 2px 4px 2px 14px;\n}\n\n.tc-drop-down .tc-chooser-item {\n\tpadding: 2px;\n}\n\n.tc-chosen,\n.tc-chooser-item:hover {\n\tbackground-color: <<colour table-header-background>>;\n\tborder-color: <<colour table-footer-background>>;\n}\n\n.tc-chosen .tc-tiddlylink {\n\tcursor:default;\n}\n\n.tc-chooser-item .tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tbackground-color: transparent;\n}\n\n.tc-chooser-item:hover .tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-chosen .tc-tiddlylink,\n.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-chosen > .tc-tiddlylink:before {\n\tmargin-left: -10px;\n\tposition: relative;\n\tcontent: \"» \";\n}\n\n.tc-chooser-item svg,\n.tc-chooser-item img{\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: middle;\n}\n\n.tc-language-chooser .tc-image-button img {\n\twidth: 2em;\n\tvertical-align: -0.15em;\n}\n\n/*\n** Palette swatches\n*/\n\n.tc-swatches-horiz {\n}\n\n.tc-swatches-horiz .tc-swatch {\n\tdisplay: inline-block;\n}\n\n.tc-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 0.4em;\n\tborder: 1px solid #888;\n}\n\ninput.tc-palette-manager-colour-input {\n\twidth: 100%;\n\tpadding: 0;\n}\n\n/*\n** Table of contents\n*/\n\n.tc-sidebar-lists .tc-table-of-contents {\n\twhite-space: nowrap;\n}\n\n.tc-table-of-contents button {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents svg {\n\twidth: 0.7em;\n\theight: 0.7em;\n\tvertical-align: middle;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n}\n\n.tc-table-of-contents ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-table-of-contents li {\n\tfont-size: 1.0em;\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li {\n\tfont-size: 0.95em;\n\tfont-weight: normal;\n\tline-height: 1.4;\n}\n\n.tc-table-of-contents li li a {\n\tfont-weight: normal;\n}\n\n.tc-table-of-contents li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n\tline-height: 1.5;\n}\n\n.tc-table-of-contents li li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n}\n\n.tc-tabbed-table-of-contents {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents {\n\tz-index: 100;\n\tdisplay: inline-block;\n\tpadding-left: 1em;\n\tmax-width: 50%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n\tbackground: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tdisplay: block;\n\tpadding: 0.12em 1em 0.12em 0.25em;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\n\tborder-top: 1px solid <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-background>>;\n\tborder-bottom: 1px solid <<colour tab-background>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\n\ttext-decoration: none;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour background>>;\n\tmargin-right: -1px;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\n\ttext-decoration: none;\n}\n\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-left: 1.5em;\n\tpadding-right: 1.5em;\n\tborder: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 50%;\n\tflex: 1 0 50%;\n}\n\n/*\n** Dirty indicator\n*/\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\n\tfill: <<colour dirty-indicator>>;\n\tcolor: <<colour dirty-indicator>>;\n}\n\n/*\n** File inputs\n*/\n\n.tc-file-input-wrapper {\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-file-input-wrapper input[type=file] {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tfont-size: 999px;\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tfilter: alpha(opacity=0);\n\topacity: 0;\n\toutline: none;\n\tbackground: white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n\n/*\n** Thumbnail macros\n*/\n\n.tc-thumbnail-wrapper {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin: 6px;\n\tvertical-align: top;\n}\n\n.tc-thumbnail-right-wrapper {\n\tfloat:right;\n\tmargin: 0.5em 0 0.5em 0.5em;\n}\n\n.tc-thumbnail-image {\n\ttext-align: center;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-image svg,\n.tc-thumbnail-image img {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n\tmin-width: 100%;\n\tmin-height: 100%;\n\tmax-width: 100%;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\n\tfilter: alpha(opacity=0.8);\n\topacity: 0.8;\n}\n\n.tc-thumbnail-background {\n\tposition: absolute;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-icon svg,\n.tc-thumbnail-icon img {\n\twidth: 3em;\n\theight: 3em;\n\t<<filter \"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\">>\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\n\tfill: #fff;\n\t<<filter \"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\">>\n}\n\n.tc-thumbnail-icon {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: -webkit-flex;\n\t-webkit-align-items: center;\n\t-webkit-justify-content: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tc-thumbnail-caption {\n\tposition: absolute;\n\tbackground-color: #777;\n\tcolor: #fff;\n\ttext-align: center;\n\tbottom: 0;\n\twidth: 100%;\n\tfilter: alpha(opacity=0.9);\n\topacity: 0.9;\n\tline-height: 1.4;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n}\n\n/*\n** Diffs\n*/\n\n.tc-diff-equal {\n\tbackground-color: <<colour diff-equal-background>>;\n\tcolor: <<colour diff-equal-foreground>>;\n}\n\n.tc-diff-insert {\n\tbackground-color: <<colour diff-insert-background>>;\n\tcolor: <<colour diff-insert-foreground>>;\n}\n\n.tc-diff-delete {\n\tbackground-color: <<colour diff-delete-background>>;\n\tcolor: <<colour diff-delete-foreground>>;\n}\n\n.tc-diff-invisible {\n\tbackground-color: <<colour diff-invisible-background>>;\n\tcolor: <<colour diff-invisible-foreground>>;\n}\n\n.tc-diff-tiddlers th {\n\ttext-align: right;\n\tbackground: <<colour background>>;\n\tfont-weight: normal;\n\tfont-style: italic;\n}\n\n.tc-diff-tiddlers pre {\n    margin: 0;\n    padding: 0;\n    border: none;\n    background: none;\n}\n\n/*\n** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\n}\n\n/*\n** Tree macro\n*/\n\n.tc-tree div {\n    \tpadding-left: 14px;\n}\n\n.tc-tree ol {\n    \tlist-style-type: none;\n    \tpadding-left: 0;\n    \tmargin-top: 0;\n}\n\n.tc-tree ol ol {\n    \tpadding-left: 1em;    \n}\n\n.tc-tree button { \n    \tcolor: #acacac;\n}\n\n.tc-tree svg {\n     \tfill: #acacac;\n}\n\n.tc-tree span svg {\n    \twidth: 1em;\n    \theight: 1em;\n    \tvertical-align: baseline;\n}\n\n.tc-tree li span {\n    \tcolor: lightgray;\n}\n\nselect {\n        color: <<colour select-tag-foreground>>;\n        background: <<colour select-tag-background>>;\n}\n\n/*\n** Utility classes for SVG icons\n*/\n\n.tc-fill-background {\n\tfill: <<colour background>>;\n}"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize",
            "text": "15px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight",
            "text": "22px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/fontsize": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/fontsize",
            "text": "14px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/lineheight": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/lineheight",
            "text": "20px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storyleft": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storyleft",
            "text": "0px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storytop": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storytop",
            "text": "0px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storyright": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storyright",
            "text": "770px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storywidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storywidth",
            "text": "770px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth",
            "text": "686px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint",
            "text": "960px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth",
            "text": "350px"
        },
        "$:/themes/tiddlywiki/vanilla/options/stickytitles": {
            "title": "$:/themes/tiddlywiki/vanilla/options/stickytitles",
            "text": "no"
        },
        "$:/themes/tiddlywiki/vanilla/options/sidebarlayout": {
            "title": "$:/themes/tiddlywiki/vanilla/options/sidebarlayout",
            "text": "fixed-fluid"
        },
        "$:/themes/tiddlywiki/vanilla/options/codewrapping": {
            "title": "$:/themes/tiddlywiki/vanilla/options/codewrapping",
            "text": "pre-wrap"
        },
        "$:/themes/tiddlywiki/vanilla/reset": {
            "title": "$:/themes/tiddlywiki/vanilla/reset",
            "type": "text/plain",
            "text": "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n  line-height: 1.15; /* 1 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n   ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n  margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n  display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n  box-sizing: content-box; /* 1 */\n  height: 0; /* 1 */\n  overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n  background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n  border-bottom: none; /* 1 */\n  text-decoration: underline; /* 2 */\n  text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n  border-style: none;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit; /* 1 */\n  font-size: 100%; /* 1 */\n  line-height: 1.15; /* 1 */\n  margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n  overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n  text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n  padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n  box-sizing: border-box; /* 1 */\n  color: inherit; /* 2 */\n  display: table; /* 1 */\n  max-width: 100%; /* 1 */\n  padding: 0; /* 3 */\n  white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n  vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n  display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n  display: list-item;\n}\n\n/* Misc\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n  display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n  display: none;\n}\n"
        },
        "$:/themes/tiddlywiki/vanilla/settings/fontfamily": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily",
            "text": "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\""
        },
        "$:/themes/tiddlywiki/vanilla/settings/codefontfamily": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/codefontfamily",
            "text": "\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,Courier,monospace"
        },
        "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment",
            "text": "fixed"
        },
        "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize",
            "text": "auto"
        },
        "$:/themes/tiddlywiki/vanilla/sticky": {
            "title": "$:/themes/tiddlywiki/vanilla/sticky",
            "text": "<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n``\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tbackground: ``<<colour tiddler-background>>``;\n\tz-index: 500;\n}\n\n``\n<$list filter=\"[range[100]]\">\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`<$text text=<<currentTiddler>>/>`) {\nz-index: `<$text text={{{ [[200]subtract<currentTiddler>] }}}/>`;\n}\n`\n</$list>\n</$reveal>\n"
        }
    }
}
0px
770px
pre-wrap
fixed-fluid
no
fixed
auto

classic
* добавлено правило "[[Вскрытие замков|Вскрытие замков]]"
* добавлено правило "[[Особые материалы|Особые материалы]]"
* добавлено правило "[[Плавание|Плавание]]"
* добавлено правило "[[Пороки|Пороки]]"
* добавлено правило "[[Удушье|Удушье]]"
* добавлено правило "[[Улучшение экипировки|Улучшение экипировки]]"
* количество предметов и особенностей местности, с которыми вы можете взаимодействовать [[свободным действием|Порядок сражения]], изменено на два
* добавлены новые способы использования [[Очков Героя|Очки героя]]:
** //''"В этот раз наверняка."''// Ваше следующее попадание атакой в этом раунде считается критическим.
** //''"Даже не почувствовал."''// Вы можете потратить одну Кость Хитов.
** //''"Есть ещё порох!"''// Вы можете восстановить одно использование умения, которое обычно восстанавливается на коротком отдыхе.
** //''"Погоди, костлявая."''// Вы можете один раз перебросить третий проваленный спасбросок от смерти.
** //''"Я с тобой ещё не закончил!"''// Раз в свой ход вы можете совершить одно дополнительное действие.
* внесено исправление в [[бонус владения стрелковым оружием|По принципу действия]]: "Владение стрелковым оружием позволяет вам в начале своего хода, ''если ваша скорость не равна нулю'', снизить её до нуля и получить преимущество на первую в этот ход дальнобойную атаку этим оружием."
* изменения Боевых стилей:
** добавлен стиль "В полторы руки". "Пока вы держите одноручное рукопашное оружие в одной руке, которым можно наносить удары двумя руками, и не используете другого оружия или щита, вы получаете бонус +1 к броскам атаки и урона этим оружием."
** добавлен стиль "Морпех". "Пока вы не носите средних или тяжелых доспехов и щитов, ваша скорость плавания и карабканья равна вашей скорости ходьбы, и вы получаете бонус +1 к КД."
** добавлен стиль "Тоннельная крыса". "Бонусным действием вы можете встать в оборонительную стойку до начала своего следующего хода. Пока вы в этой стойке, вы можете совершать провоцированные атаки, не затрачивая свою реакцию. Кроме этого, вы можете совершать провоцированные атаки по существам, которые передвигаются более чем на 1 м в пределах вашей досягаемости."
** изменен стиль "Сражение большим оружием". "Если у вас выпало «1» или «2» на кости урона оружия при атаке, которую вы совершали рукопашным оружием, удерживая его двумя руками, то вы можете перебросить эту кость, и должны использовать новый результат, даже если снова выпало «1» или «2». ~~Чтобы воспользоваться этим преимуществом, ваше оружие должно иметь свойство «двуручное» или «универсальное»~~."
** изменен стиль "Сражение двумя оружиями". "Если вы сражаетесь двумя оружиями, вы можете добавить модификатор характеристики к урону от второй атаки. ''Оружие со свойством "механическое" является исключением.''"
** изменен стиль "Стрельба". "Вы получаете бонус +2 к броску атаки, когда атакуете ~~дальнобойным~~ ''стрелковым'' оружием."
* изменения [[черт|Черты]]:
** черты "Крепкий" и "Стойкий" объединены в черту "Живучий"
** добавлена черта "Альпинист"
** добавлена черта "Бойкий на язык"
** добавлена черта "Закалённый"
** добавлена черта "Крепкий орешек"
** добавлена черта "Крепыш-коротыш"
** добавлена черта "Оплот"
** добавлена черта "Оппортунист"
** добавлена черта "Предприимчивый торговец"
** добавлена черта "Чистый разумом"
** добавлена черта "Эквилибрист"
** добавлена черта "Эксперт по настройке"
** "Лекарь":
*** добавлено свойство "Вы получаете владение набором травника"
*** добавлено свойство "Вы совершаете проверки Мудрости (Медицина), необходимые для оказания Первой помощи и Реанимации, с преимуществом"
*** изменено свойство "Когда вы используете комплект целителя для стабилизации умирающего существа, это существо также восстанавливает ~~1 хит~~ ''количество хитов, равное вашему модификатору Мудрости (минимум 1)''"
*** добавлено требование владения навыком Медицина
* удалено правило "Серебрение оружия"
* удалено правило "Адамантовое оружие"
* изменение правил [[Падения|Падение]]: "В конце падения вы получаете 1к6 дробящего урона за каждые 2 м падения до максимума в ~~20к6~~ ''100к6''."
* удалено упоминание состояния "истерзанный" из правил [[хитов|Хиты]]
* изменения правил [[Оружия|Оружие]]:
** Лёгкое оружие
*** "Атаки, наносимые по схваченным целям, совершаются с преимуществом."
** Одноручное оружие
*** "Атаки, наносимые неосновной рукой ~~или по схваченным целям~~, совершаются с помехой."
** Двуручное оружие
*** "~~Атаки, наносимые по схваченным целям, совершаются с помехой.~~"
*** "Требует как минимум одну свободную руку для переноса, если не является "стрелковым" (не имеет возможности ношения в ножнах или быть другим образом закреплено на персонаже)."
* изменения правил [[Действий|Действия]]:
** [[Захват|Захват]]
*** "Вы совершает свою проверку с преимуществом, если вы больше цели, или с помехой, если вы меньше."
*** добавлена опция "Удушение"
** [[Толкание существа|Толкание существа]]
*** "Вы совершает свою проверку с преимуществом, если вы больше цели, или с помехой, если вы меньше."
** добавлено действие [[Рокировка|Рокировка]]
* изменения [[Классов|Классы]]:
** следующие классовые ресурсы теперь можно восстановить количество раз равное вашему бонусу мастерства (а не модификатору основной характеристики):
*** вдохновение [[Барда|Бард]] (с 5 уровня)
*** дикий облик [[Друида|Друид]]
*** божественный канал [[Жреца|Жрец]]
*** ячейки заклинаний [[Колдуна|Колдун]]
*** проклятие крови [[Кровавого охотника|Кровавый охотник]]
*** очки ци [[Монаха|Монах]]
*** божественный канал [[Паладина|Паладин]]
** [[Друид|Друид]]
*** добавлено владение болас и бумерангом
*** добавлено умение Дикий спутник из UA - Class Feature Variants
*** добавлено умение из UA - Class Feature Variants, позволяющее заменять один заговор после продолжительного отдыха
** [[Жрец|Жрец]]
*** добавлено умение Божественный канал: Поглощение божественной энергии из UA - Class Feature Variants
*** добавлено умение из UA - Class Feature Variants, позволяющее заменять один заговор после продолжительного отдыха
*** умение божественного домена 8 уровня (Божественный удар или Могущественное колдовство) заменено новым умением 8 уровня жреца Благословенные удары из UA - Class Feature Variants
** [[Изобретатель|Изобретатель]]
*** изменены владения инструментами и навыками в соответствии с Eberron - Rising from the Last War
** [[Монах|Монах]]
*** добавлено дополнение к умению Ци "Если вы совершаете действие, тратящее очки ци, вы можете совершить одну безоружную атаку бонусным действием." из UA - Class Feature Variants
*** добавлены умения ци Зоркий глаз и Ускоренное исцеление из UA - Class Feature Variants
** [[Паладин|Паладин]]
*** добавлено умение Божественный канал: Поглощение божественной энергии из UA - Class Feature Variants
** [[Следопыт|Следопыт]]
*** изменены требования к мультиклассированию на "''Сила или'' Ловкость 13, и Мудрость 13"
* изменения [[баклера|Доспехи и щиты]]:
** + 1 ~~+ мод. ЛОВ / 2~~ КД.
** Атаки, совершаемые баклером, не лишают вас его бонуса к КД.
* изменения правил [[надевания и снятия доспехов|Доспехи и щиты]]:
|!Вид|!Надевание|!Снятие|
|Лёгкий щит| свободное действие |<|
|Средний щит| бонусное действие |<|
|Тяжёлый щит| действие |<|
* изменения Боевых стилей:
** добавлен стиль "Благословенный боец". "Вы изучаете два заговора на ваш выбор из списка заклинаний жреца. Они считаются для вас заклинаниями паладина, а Харизма - базовая характеристика для их использования. Когда вы получаете новый уровень в этом классе, вы можете заменить один из них на другой заговор из списка жреца."
** добавлен стиль "Бой вслепую". "Отсутствие возможности видеть цель не накладывает помеху на ваши атаки по ней, если она не скрыта от вас."
** добавлен стиль "Единство с природой". "Вы изучаете два заговора на ваш выбор из списка заклинаний друида. Они считаются для вас заклинаниями следопыта, а Мудрость - базовая характеристика для их использования. Когда вы получаете новый уровень в этом классе, вы можете заменить один из них на другой заговор из списка друида."
** добавлен стиль "Перехват". "Когда видимое вами существо попадает атакой по цели, которая находится в пределах 1 м от вас, вы можете реакцией уменшить количество урона, получаемого целью, на 1к10 + ваш бонус мастерства. Вы должны держать щит или рукопашное оружие, чтобы использовать эту реакцию."
** добавлен стиль "Рукопашный бой. "Вы можете использовать к6 вместо обычной кости урона ваших безоружных ударов, либо к8, если обе ваши руки свободны. Когда вы успешно захватываете цель, вы можете нанести ей 1к4 дробящего урона. Пока вы удерживаете цель в захвате, вы можете наносить ей этот урон всякий раз, когда попадаете по ней рукопашной атакой."
** добавлен стиль "Техника превосходства". "Вы изучаете один приём на свой выбор из списка архетипа воина Мастер боевых искусств. Если приём требует, чтобы цель совершила спасбросок для сопротивления эффекту приёма, Сл спасброска равна 8 + ваш бонус мастерства + модификатор Силы или Ловкости (на ваш выбор). Вы получаете одну кость превосходства: к6. Эта кость подпитывает ваши приёмы. Кость превосходства тратится, когда вы её используете, и восстанавливается после окончания короткого или продолжительного отдыха."
** удален стиль "Тоннельная крыса"
* изменения [[черт|Черты]]:
** добавлена черта "Базовая боевая подготовка"
** добавлена черта "Продвинутая боевая подготовка"
** добавлена черта "Элитная боевая подготовка"
** полностью изменена черта "Дикий атакующий"
** "Артистичный" и "Мастер маскировки" объединены в черту "Актёр"
** "Отличная память" и "Языковед" объединены в черту "Академик"
** "Второй шанс": 
*** изменено свойство "Когда существо, которое вы видите, попадает по вам броском атаки, вы можете использовать реакцию, чтобы заставить врага перебросить этот бросок. ''Если существо промахивается в результате нового броска, вы можете совершить по нему провоцированную атаку частью той же реакции.''"
** "Воинский адепт": 
*** изменено свойство "Если у вас уже есть кости превосходства, вы получаете ещё одну; в противном случае вы получаете ''две'' кости превосходства: к6."
** "Живучий":
*** удалено свойство "Увеличьте значение Телосложения на 1, при максимуме 20."
*** изменено свойство "Когда вы бросаете Кость Хитов для восстановления хитов, ~~минимум восстанавливаемых вами хитов равен удвоенному модификатору Телосложения (минимум 2)~~ ''вы добавляете к ней удвоенный модификатор Телосложения, вместо обычного.''"
** "Исследователь подземелий":
*** добавлено свойство "Увеличьте значение Интеллекта или Мудрости на 1, при максимуме 20."
** "Исчезновение": 
*** изменено свойство "Сразу же после получения урона ''от враждебного существа'' вы можете использовать реакцию, чтобы стать невидимым до конца своего следующего хода,~~ либо пока не совершите атаку, не нанесете урон или не заставите кого-нибудь совершать спасбросок~~. Использовав эту способность, вы не сможете использовать её вновь, пока не совершите короткий или продолжительный отдых."
** "Крепыш-коротыш": 
*** изменено свойство "Вы считаетесь на один размер больше при совершении проверок Силы (Атлетика) для совершение особой атаки Захват, ''а также для определения вашей грузоподъемности и веса, который вы можете толкать, тянуть или отрывать от земли.''"
** "Мастер большого оружия": 
*** изменено свойство "''Один раз в ход'', перед совершением атаки двуручным рукопашным оружием, которым вы владеете, вы можете принять штраф −5 к броску атаки. Если такая атака попадает, вы добавляете +10 к урону от этой атаки."
** "Мастер владения топорами": 
*** изменено свойство "~~Всякий раз, когда вы атакуете с преимуществом в ближнем бою, вы наносите дополнительную кость урона оружием, если каждое значение из двух к20 попало в цель.~~ ''Один раз в ход, вы можете нанести дополнительную кость урона оружием цели, по которой вы попали рукопашной атакой топором, совершённой с преимуществом, если наименьшее значение одного из бросков этой атаки тоже попало по ней.''"
** "Мастер щитов": 
*** изменено свойство "Вы можете снимать и надевать ''тяжёлый щит бонусным действием, средний щит свободным действием, а лёгкий щит ''частью того же действия, которым вы вынимаете или убираете оружие."
*** изменено свойство "~~Если вы в свой ход совершаете действие Атака, вы можете бонусным действием попытаться оттолкнуть щитом существо, находящееся в пределах 1 м от вас~~. ''Вы можете совершать особоую атаку Толкание, используя щит, бонусным действием.''"
** "Меткий стрелок": 
*** изменено свойство "''Один раз в ход'', перед совершением атаки стрелковым оружием, которым вы владеете, вы можете принять штраф −5 к броску атаки. Если такая атака попадает, вы добавляете +10 к урону от этой атаки."
** "Налётчик":
*** добавлено свойство "Увеличьте значение вашей Силы или Ловкости на 1 при максимуме 20."
** "Оборонительный дуэлянт":
*** добавлено свойство "Увеличьте значение вашей Ловкости на 1 при максимуме 20."
** "Одарённый": 
*** добавлено свойство "Выберите один навык или инструмент, которым вы владеете. Ваш бонус мастерства удваивается для всех проверок характеристик, используя этот навык или инструмент."
** "Страж": 
*** изменено свойство "Если вы попадаете ~~по существу ~~провоцированной атакой п''о существу, которое размером не превышает ваш, больше чем на одну категорию,'' скорость этого существа падает до 0 до конца текущего хода."
** "Убийца магов": 
*** изменено свойство "Вы совершаете с преимуществом спасброски от заклинаний, наложенных существами, находящимися в пределах ~~1 м от вас~~ ''вашей досягаемости''.
** "Эквилибрист":
*** изменено свойство "Вы игнорируете первые ~~6~~ ''4'' м падения, когда определяете урон от падения."
* изменения [[Рас|Расы]]:
** добавлена раса [[Кованый]] (с некоторыми нерфами: -навык, -инструмент, -язык; без перевода описания)
** добавлена раса [[Перевёртыш]] (без перевода описания)
** добавлена раса [[Шифтер]] (без перевода описания)
** добавлена подраса [[Людей|Человек]] - [[Калаштар]] (без перевода описания)
** добавлена подраса [[Эльфов|Эльф]] - [[Бледный эльф]]

<<<
//Расы и подрасы, за которые голосовали в ноябре. Драконьи метки слишком уж специфичны для сэттинга, и их трудно рескинить во что-то нейтральное, поэтому пока решил оставить их в стороне.//
<<<

** изменено "Мощное телосложение" [[голиафов|Голиаф]], [[устрашающих драконорождённых|Устрашающий драконорождённый]], [[людоящеров-чернобрюхов|Людоящер-чернобрюх]], [[медвежатников|Медвежатник]], [[орков|Орк]] и [[фирболгов|Фирболг]]: "Вы считаетесь на один размер больше, когда определяется ваша грузоподъемность и вес, который вы можете толкать, тянуть или отрывать от земли, ''а также при совершении вами [[особых атак|Атака]] и [[Пробегания|Пробегание *]]. Кроме того, вы совершаете проверки и спасброски Силы против немагических эффектов, делающих вас [[схваченным|Схваченный]], [[опутанным|Опутанный]] или [[сбитым с ног|Сбитый с ног / Лежащий ничком]], с преимуществом.''"


<<<
//Давно витала мысль дать крупным расам больше преимуществ Большого размера, при этом не создавая Больших рас. Рассматривал также возможность использования Большого оружия, но такая сильная особенность потребует серьёзного нерфа других интересных фишек этих рас, чтобы они не выглядели автопиком при создании боевых классов.//
<<<

** [[людоящеры-чернобрюхи|Людоящер-чернобрюх]]:
*** удалена особенность "Агрессивный"
*** изменена "Мёртвая хватка": "~~Если вы в свой ход попадаете по существу атакой укусом, вы можете бонусным действием попытаться схватить цель своей пастью.~~ ''Вы можете совершать особую атаку [[Захват|Захват]], используя свою пасть вместо свободной руки.'' Пока вы удерживаете цель в захвате таким образом, вы совершаете броски атаки укусом по ней с преимуществом, но не можете использовать укус против других целей."
*** "Ночное зрение" заменено "Сумеречным зрением"
** [[горные орки|Горный орк]]:
*** изменена особенность "~~Мускулистый~~ ''Прирождённый атлет''": "Вы владеете навыком Атлетика. ~~Если вы совершаете проверку Силы (Атлетика) для совершения, поддержания или высвобождения из Захвата, вы добавляете к проверке удовенный бонус мастерства вместо обычного.~~"

<<<
//Усиление "Мощного телосложения" потребовало ряда ослаблений других особенностей, чтобы вернуть эти подрасы на прежний уровень.//
<<<

** [[серые орки|Серый орк]]:
*** изменена особенность "Увеличение характеристик": "Значения вашего Телосложения ~~и~~ ''или'' Мудрости ''на ваш выбор'' увеличиваются на 1."

<<<
//Лишний стат был опечаткой при добавлении подрасы в справочник.//
<<<

* изменено правило [[Очки героя]]:
** //''Героическое вдохновение.''// "Вы можете принять решение об использовании очка героя после ~~совершения~~ ''объявления результата'' броска к20, ~~но прежде, чем Мастер объявит результат броска~~. "
* изменения [[Барда|Бард]]:
** Вдохновение барда: "Существо может принять решение о броске кости Вдохновения барда уже после ''объявления результата'' броска к20, ~~но должно сделать это прежде, чем Мастер объявит результат броска~~."
** Боевое вдохновении [[Коллегии Доблести|Коллегия Доблести]]: "Оно может сделать это после ''объявления результата'' броска атаки, ~~но до того, как узнает, попала ли она по нему.~~"
** Острое словцо [[Коллегии Знаний|Коллегия Знаний]]: "Вы можете принять решение об использовании этой способности после ''объявления результата'' броска существа, ~~но до того момента, когда Мастер объявит результат броска или проверки~~."
** Непревзойдённый навык [[Коллегии Знаний|Коллегия Знаний]]: "Вы можете принять решение об использовании этой способности после ''объявления результата'' броска проверки, ~~но до того, как Мастер объявит результат этой проверки~~."
* изменения [[Волшебника|Волшебник]]:
** Инстинктивное очарование [[Школы Очарования|Школа Очарования]]: "~~Вы обязаны решить, будете ли использовать это умение, до того как будет известно, попала атака или промахнулась.~~"
* изменения [[Жреца|Жрец]]:
** Божественный канал: Направленный удар [[Домена Войны|Домен Войны]]: "~~Вы можете решить, применять ли это умение, после того как увидите результат броска, но до того как Мастер скажет, попала атака или промахнулась.~~ ''Вы можете принять решение об использовании этой способности после объявления результата броска атаки.''"
** Божественный канал: Благословение бога войны [[Домена Войны|Домен Войны]]: "~~Вы можете решить, применять ли это умение, после того как увидели результат броска, но до того как Мастер скажет, попала атака или промахнулась.~~ ''Вы можете принять решение об использовании этой способности после объявления результата броска атаки.''"

<<<
//Решил избавиться от антифаного правила, которое работало и против Мастера, и против Игрока, заставляя первого делать паузы перед объявлением результата, а второго выкрикивать вперёд Мастера и регулярно тратить ресурсы впустую. Я легко мог упустить аналогичные формулировки где-то ещё. Сообщите мне, если найдёте что-то похожее.//
<<<

* изменения [[Чародея|Чародей]]:
** умение Фокусировка заклинания (Использование заклинаний) заменено умением Внутренний фокус: "Врождённый характер вашей магии позволяет вам сотворять ваши заклинания чародея без необходимости в материальных компонентах, если для них не указана стоимость."

<<<
//Небольшой баф, который напрашивался из описания класса.//
<<<
* важные изменения в правиле [["Дополнительная атака"|Дополнительная атака]] в случае [[Мультиклассирования|Мультиклассирование]]
* правило "Наблюдая за работой заклинателя" удалено и теперь является частью нового правила [["Сокрытие сотворения заклинания"|Сокрытие сотворения заклинания]]
* увеличен лимит [[Пороков|Шаг 6. Выберите Пороки (опционально)]] с 2 до 5, добавлен лимит на очки навыков с Пороков - 24
* изменения [[Барда|Бард]]:
** изменено умение 5 уровня - Источник вдохновения
* изменения [[Жреца|Жрец]]:
** восстановление божественного канала отвязано от отдыхов
** перезарядка после успешного божественного вмешательства увеличена до 30 дней
* изменения [[Колдуна|Колдун]]:
** добавлен альтернативный вариант, позволяющий создать колдуна на Интеллекте
** добавлено умение Мистический ритуал, изменяющее метод восстановления потраченных ячеек Магии договора
** добавлено умение из UA - Class Feature Variants, позволяющее заменять одно заклинание после продолжительного отдыха
** создан [[Актуальный список таинственных воззваний|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=1448348621]] колдуна:
*** внесены множественные мелкие изменения в перевод и формулировки воззваний из PHB и XGTE
*** реворкнуты все воззвания, позволяющие накладывать заклинания
*** удалено воззвание Жаждущий клинок
*** добавлено 11 воззваний из UA - Class Feature Variants
*** добавлено 32 новых воззвания
** изменен [[Договор клинка|Договор клинка]]:
*** изменены ограничения на вид призванного оружия
*** возможность использовать Харизму для бросков атак и урона, а также дополнительная атака на 5 уровне встроены в договор
** добавлен предмет договора из UA - Class Feature Variants - [[Талисман|Договор талисмана]]
** добавлена возможность заменять таинственные арканумы при получении уровня
** усилено умение 20 уровня
** ослаблено умение 1 уровня [[Ведьмовского клинка|Ведьмовской клинок]]
** усилено умение 1 уровня [[Великого Древнего|Великий Древний]]
* изменения [[Монаха|Монах]]:
** восстановление ци отвязано от отдыхов
* изменения [[Паладина|Паладин]]:
** восстановление божественного канала отвязано от отдыхов
* добавлено правило [["Перемещение"|Перемещение]]
* изменено правило [["Окружение"|Окружение]] (с преимущества на +2 к атаке)
* переоформлено правило [["Действия"|Действия]]:
** добавлено действие [["Ложный выпад"|Ложный выпад *]]
** добавлено действие [["Метка"|Метка]]
** добавлено действие [["Наскок"|Наскок]]
** изменены действия [["Кувырок"|Кувырок *]] и [["Пробегание"|Пробегание *]]
** добавлена особая атака [["Захват"|Захват]]
** добавлена особая атака [["Потеснить"|Потеснить]]
** изменена формулировка особой атаки [["Обезоруживание"|Обезоруживание]]
* добавлено правило [["Реакции"|Реакции]]:
** добавлена реакция [["Поднять щит"|Поднять щит]]
** добавлена реакция [["Отступление"|Отступление]]
* добавлено правило [["Мгновенная смерть"|Хиты, урон и смерть]]
* добавлено правило [["Состояния"|Состояния]]:
** изменены состояния [[бессознательный|Бессознательный]], [[ослеплённый|Ослеплённый]], [[парализованный|Парализованный]], [[схваченный|Схваченный]], [[умирающий|Умирающий]]
** состояние [[истерзанный |Хиты, урон и смерть]]лишено каких-либо механических эффектов (осталась только визуальная составляющая)
** добавлены состояния [[захваченный врасплох|Захваченный врасплох]] и [[скованный|Скованный]]
* изменения [[Барда|Бард]]:
** добавлено [[Описание бардов|Описание бардов]]
** добавлены [[Классовые умения бардов|Классовые умения бардов]]
*** добавлена новая опция Вдохновения барда из UA - Class Feature Variants: "Если существо сотворяет заклинание, оно может бросить эту кость и один раз добавить результат к броску урона или исцеления заклинанием."
*** добавлено умение Заклинательная гибкость из UA - Class Feature Variants, позволяющее заменять одно заклинание после продолжительного отдыха
** добавлены [[Коллегии бардов|Коллегии бардов]]:
*** [[Коллегия Доблести|Коллегия Доблести]] и [[Коллегия Знаний|Коллегия Знаний]] из Player's Handbook
*** [[Коллегия Мечей|Коллегия Мечей]], [[Коллегия Очарования|Коллегия Очарования]] и [[Коллегия Шёпотов|Коллегия Шёпотов]] из Xanathar's Guide to Everything
*** [[Коллегия Красноречия|Коллегия Красноречия]] из Mythic Odysseys of Theros
*** в выбор боевых стилей Барда [[Коллегии мечей|Коллегия Мечей]] добавлены [[Бой вслепую|Бой вслепую]] и [[В полторы руки|В полторы руки]]
*** Мобильное цветение Барда [[Коллегии мечей|Коллегия Мечей]] отталкивает на расстояние до 2 м (вместо 5 фт. + результат броска кости Вдохновения барда)
* хотфикс умения Благословенные удары [[Жреца|Жрец]]
** Когда существо получает урон от ~~одной из ваших атак оружием или заклинанием~~ ''одного из ваших заклинаний или атаки оружием'', вы можете нанести ему дополнительно 1к8 урона излучением.
Если вы нашли что-то ценное во время ваших приключений (драгоценные камни или произведения искусства) вы можете продать это в начале вашего продолжительного отдыха.

Некоторые ценности могут быть слишком экзотическими для рядового торговца (магические предметы, археологические находки, проклятые реликвии) и вы будете вынуждены потратить неделю на поиск подходящего покупателя.
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAEmklEQVRIiXVWW2xURRj+5nBou7V7trSybQnQwsOW0AICFoIlIKQgbVH7gCUYjUaboEJCjMZLTIxNDAkPJGqREI08oA9SNFIqWGOiiZeigkqL4NpqpEClWYrt7vaye+bmw5k5ly1MMjvzn/8+/20JTvyEOy25tTgfwKYTt1jLJym+7gdbVEYIIkmJZH0eGdphmWcfKTVPAvgGVix7Jznkdkrk1mIzzeVTu65k3zg9nK3ANAekBKQBQAIQHnHIQMv8gsRHi0IH7ppFDsGK2TOVdP6oGAkgJeS2kur9w9nO1wanl2OaKa0OzqGDumtd6l5IsL863P/qgtBOWLF4UMnxXtcw2VRaF4tP9Az+PV0SEAYBCKLkyaBCCJ8RwLrqorHemuJGWDH3iQxwAUgB2VS6pD6e/mpwYLIEjMPbDGAC4Azg1DkFBzh37kw4NNzZZy+NzWm8+N+XSA0s8ZQwDtk8d/aBa1PHe+PpiMPMg8JcIVqwgpkPZgxgFGAMPf2jkYP/pDqRGpitPGEYyfJ9r/w+tjxgrZ/RFUzxTFUhLmwuUwJthaeuAge28eL5G8tGMmwfABCZ/LOg5fLYUNfF8SikBIh0nluKnBgAKM1DtqESeaYBcuxyEK9pJFffgNaV5YnjqyoqDQDbu/4aj7oe0ByrqONFx4o5kNsWIc80HGHMBrit6G21sw4fZQC10RlPRCHlg+ZnI5PNGM/kWCQ8WBAcWlOGPbVRDI1P4/qEjfr5EceAXE901kmVmbfS6LqebDJ6RidXg2srbO+dqdqcYiCZweEL/6Lq5CX0jU4oT3weaFo/n8J/nUjdaw5O0YWgtldkOh5unUi8c2HYtZAI4Sm5HX3AI4mhycwCM5+LSIBBuwvhue0GVcAQ3LlTOvOJIL2EUTymEBETgqXAqAWR0zICxDLn9CnRtAFFHh3hPGVW5xvXeiirmUEYUCrdJyHaE2bfIYV1wjjw4gLzurF5btE5N9g6mFQXmA1QHVgnvb2YqBS3aQDvBd7BbyiL/Gw+tLDkDMJ5T+LWBNT7+AKqPREqqyWIDvLtYpITdNxdhObFZWcMENLdVjsv4bYG22cN9aWz8jSQXbpoNZ6rAlW43SurbsIg3bPaJ6Ps9I61ONh3ZSsmM4AQABdOcxRc3T1YzpKYTk/h1B9X1XemTuHRSg6EQzjVur49HK391gCjKA+H3u5oWNYPrgvQ9hWm2tyJU3ffFTz9aa+vGfJAA9Ud+vD2uovzIkVvAYABZoO8cJTuXbV45+P3L016/Ui3cx1E1ZNcwdTDc+rBnKFty8rks2uXtMKKUUeJYiT7jsSPNdU17NxYk4DwtXrXUi1Iw9xRKpg33DjDYw33JN5/uH6LfwQb/vlBnus4/3HLfXUdj276FUX5njdUbT3AqG9wUTVBrRDefeKB3z7csXENrNg5+BbBrj1qhug/BxLyvefN4bF025vf9b9+5Gy8AjfHZxYcVCFGi7F33dIbL29Y0T6/xPoAVowhZxG07vYx6x9HoDz6UgGA7V9cHmr+/urI6hvpqUqTEIsJkaoIFw6tryz/pXFp1WkAn8OKZXKF6/U/H3+1Ct6/t3gAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFU0lEQVRIiXWVa2xURRTHf3e7Xcqju22xxRLaKtGlAvKqFQGxYqVBQCU+wBchISRKRDFGo8ZoJDEaTPgkiNEQiRoV0KDyEN+CaEURBFqpgJaFkjZLy9Ktbemdlx/m3r27qJNM5s7cM+d//ucxx2HLPv5vmIaiQcCsLV1ywYdpNW230FXDIdZt6J4RcRJ3RcONdw8Pfwx8SzQ+8H96nP8CMQ1F4R5llt57cuCFHWfccvqk9yNbSoMxMCSPBaMGJd+9fMjqoXnOWqJx998gm3/K0m4wc0rGvHRmYPOzJ/onBMqztBtyz7S3DnF4aUzh4WcqBi8iGm/JBfmgMWOVmVtaG2/p3XX8z/4SMLnKtfHkspk4VsYAjt1PGzMs9eO4oluIxjMuCqEVaIOZW1o9o6Xny+PH0iUoAVKCVN4qQXl75Z9pe6Yk6EC2sTlVPLvp3Oekj1UHIFJh5pXmrz7dt+nHlp4Yyr+sgtUHUSo4z4BnGSIFSMFXhztja1rTm0kfy7cgStIxoFY+3ZSaEFgcWPn25BjvTI55e6sEJaE4xDs1xfxWX872aaXcVjE4ABeSJ/a3X91xQa4EcEz3HwV3NKcSW5tSZUFAbTweuiLG+toyDnX2M2nXqcw5hWHMgisB6OoXDB+cD8CKxjbWHT1n46Vh4ZQRyU1TyqtCwPytrefLAroS8jTf15WzvtbiOsaAcj33CA7NGIkrFVd/cYJL3mui5vPjdPW5rJpYBnLAY+uyuSVZhjG3hrZ29M4j1RcAKJdDN47i+pHDOHy2l5Pd/ZaBFCBdKI4woXQoX5/qpqk1BUJw4K9zbDp2luFDIiwaHQPh2tnVwydt3XNDuzp7axDC+ltYnzd19fLoDwkmbj1KekBZF3lMHy2JANCa7ssEGil4P5ECoK6kICsRXL5Jpq8JH+8TlTYNvVhguP/bPzMF5/i1ImwhVw+1/n8/cc4y07ZC87Qt3JDWnqyNX2vvhYpwnlYxhOsVmQkCr7P3gJCAsUoARynL3FiZPGVBHK0tO69II1rHwhGl00gRzQHJnhgcg7Uag6MVAGElA2UYwkp57FXOuaNUOnTlIOe0HwtE1vRi4PjMpAAhaWw/D8C9FUVegK18SGcx8fW5gtEF4bbQTaXDfrGCrqfIDQAztP2LLhvbOgGoihZkUhohWDrmUgA+PtHhAdiivGFE7OfQbZUlO4lGAgAlMwqzfZ6xuj1Fc1sXDWMreLNhHERCvHJjnNvHV9Lc1snOI6fIZGtxAfNGj9gZwnG2LRs/MplNMbMKieNnmJQZdvds/xnXFSybcRXm2Tt5sn4SkUg+49/b7RWtrZMHJ1edJeRsy1vVWyZ33DWVNb+dbKDvAmgFStsAakUs3+FIe4q9J5PWbVqS7PqbF5sSVCrFwUSSjw6eoP7d76Az7d3VUFjApwtnriosG7/H4aHnMKsfyF974K/9j2zaOwHtZ5UO0jeTbWRqyS4Xf/v/4bXF9UeWT62uIRoXIZSL8/hbYsWU0YuW1F3VjfTo5jzf/jPvvcBCBq9xTr+xsktnT+5ePrV6IdG48PqJfa+cla+3bJxbe/OiunFJ24RkoMRXkNNbfLCs/qIVi+snJTfcPn12dgsOZVvkPLx2/wcLpte+et+sAwwbFCjzu6LwLVd2ar+JKYgOZt2ShoNv3113LdH4L2QNh/setv7UgT/NG4+Fz6R6lr2858jz6/YdLSd5Ptf//jAayopYcd3Y9qfqJq4aVRLdQDQuuWg4LHwwN7j+twNmw5MFwPzPfk/M23uqo6Y93V+VFyKqtE6XFw5NzKwc8euccZftALYTjV+4WLk//gHZqa7B3crxUgAAAABJRU5ErkJggg==
* прописаны владения и стартовое снаряжение всем [[классам|Классы]]
* изменения правил [[оружия|Оружие]]:
** Одноручное: "Атаки, наносимые неосновной рукой ''или по схваченным целям'', совершаются с помехой."
** Двуручное: "Атаки, наносимые по схваченным целям, совершаются с помехой."
** Стрелковое: "Владение стрелковым оружием позволяет вам в начале своего хода, если ваша скорость не равна нулю, снизить её до нуля и получить ~~преимущество на первую в этот ход дальнобойную атаку этим оружием.~~ ''бонус +2 к броскам дальнобойных атак этим оружием до конца вашего хода.''"
** Механическое: "~~Вы можете перезарядить такое оружие, потратив на это бонусное действие.~~"
* изменения таблицы [[оружия|Оружие]]:
** множественные изменения цен
** добавлены гномий пиломет, катана, тонфа, шестопер, ятаган
** удалено огнестрельное оружие, кувалда
** полэкс перенесён в топоры
** люцернский молот перенесён в дробящее
** сюрикен перенесён в воинское
** абордажный топор: ''6 м''
** дварфский самострел: 3к4+1 Д/К -> ''1к8+3 Д/К''
** дварфский топор-молот: 4 м -> ''6 м''
** двойной арбалет: 2к12 К -> ''2к6+5 К''
** землелом: 1к12 Д -> ''2к6 Д''
** крис: ''6 м''
** кукри: ''6 м''
** легкий арбалет: 3к6 К -> ''2к4+3 К''
** легкий многозарядный арбалет: 2к8 К -> ''2к4+3 К'', изменено особое свойство на "Вы игнорируете ограничение на количество атак в свойстве "механическое"."
** люцернский молот: 4.5 кг -> ''3.5 кг'', ~~длинное~~, ''особое'' "В качестве бонусного действия в свой ход, вы можете увеличить дальность атаки люцернским молотом на 1 м до окончания этого хода."
** мечелом: ''6 м''
** палаш: 1к8 К/Р -> ''2к4 К/Р''
** походный топорик: ''6 м''
** пулевой арбалет: 3к4 К -> ''1к8+3 К'', крит. 20 -> ''19-20'', ~~летальное~~
** рапира: 1.0 кг -> ''0.7 кг''
** ручной арбалет: 1к12 К -> ''1к6+2 К''
** сюрикен: 1 К -> ''1к4 К'', ~~особое~~
** тяжелый арбалет: 3к6 К -> ''1к12+3 К''
** тяжелый многозарядный арбалет: 3к6 К -> ''1к12+3 К'', изменено особое свойство на "Вы игнорируете ограничение на количество атак в свойстве "механическое"."
** хунга-мунга: крит. 20 -> ''19-20''
** эсток: 1к6 (2к4) К -> ''1к6 (1к8) К''
* изменения [[черт|Черты]]:
** "Мастер владения арбалетами":
*** удалено свойство "Вы игнорируете ограничение на количество атак в свойстве "механическое"."
*** удалено свойство "Вы можете перезарядить арбалет свободным действием."
*** добавлено свойство "Вы можете добавлять 1/2 своего модификатора Ловкости к броскам урона при стрельбе из арбалета."
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAE6UlEQVRIiXVWW2xURRj+zulZtkvbs6WlrTXQgspSLdRgLRcrNtxli0KMhUBCSAhRwAsx2kSiMfCC4YEnwUQTiDHESCEqoRfUByJVEKkYWlKWIluQS0uBlu7Ctnvm5sPMOWe2hEn+c2bOzHzf/89/mWPg8Bk8roml+UEACw7fo6uOJNi83wgvLwTCwwLDteOMa2/a1umGQusnACdgR9KPwzEeIREGxLKwlWRi49qr6R0tN9OlGGGAAAABCEOtEwA4MN7CqknBgYNTQ7tzsoy9sCPOoyRNf7ro8rmsYPqum+mmT/4dqUKKSyAh/DU6CXe/CSDXxK5IXuf2yaE1sCOxTJLv/1AbOUS0qObZiw+Px+KpAp9XacwNzRrhKeXNQQACmFeRO3SqMn857Ih3RCaYADiDiBZV1MaSv8YuPygAowBl8N6Eyz6nACcAc+e0dUpOXxiasKxr8Gckeio0Egqxojiw+3rq0KmLybC+AZT64IzJMWEAdyS4R0JUnwKM4JfOu+E9vYkmJHoCioShP822fXxhqMoH52oDA0yG9tqJeGtqyCcnvvbN8ybiYHUhQIlPxhx81NE3s3+UbgMAU7wxKXvzlWQjEo62SInJ0LuoFC8/MR4zQqYEoq7WBC21JagvtzEzP6j2OlIIARIpbOu+04hET7YJYMXR+FCxt5lJgOkl43C3vgxT7KCMEM4UCAVyDJxfXo7olLAfaYRI0ZRoig0UQ4jXzB/7H9ZjcESBKy0mWIgtLENhKIDW3iFFoo6QOkivnIaqohy0xe/5oa0fF3UA4gCDSRy9MRw1j99NVYO5WlBP2uKDMA51YUfsjk+iNO3oS2J2SzeibZfknOCShBAJ7uEQnLideNGKp5wyEOLHvhBA3yiit+4DQsDKycoEgkDtD51eXnj5RBWGm7icAwCupkYnW+AsDOrIhTqRGmcxmukTF0QDNASXFujJqiTIedgax3gClNgSlCst/Iy2GNN8QjRNtawXyic6CReAIUAZS1jTgsZ1UFLp1yGXSI4t1xKhfAKljNCOCwIg1N/vknHgmWzrhrmwKPcsCPVjnFJpOpNjY6wlxNHyxSUV8rtDJBmhsk8JXikJ/2W+XlbQityAHx1unKu4N7lLwhQIkW+HepYZ7nF5opTNz0b9UyWtJgzj2KaZTw5IdqWB44d0gGlHxKgW6mMs8fJDzbE0tswqvwPTOJa180ERbWmYiz3ne5diJK0qLQc4AxhHDwQmM4bmy3241H9fknEqHcspykIBtMdvoT1+W5vjQF4IR1fP35lXPOOkgc2fQuxeH9h77krHe4faq+S9oe4QLZRh6BElMpzr3zFexODL9Yu7tsypqIYdISYog/HhAfLuC0+v2VBXOZwRAHqxJHrZYMqH7jVA1Do5v3HJrOEtcypWw44QADBBZfU13v8q9k20ZvHausoBcI1AL5z6ZcWYJCBEln7KAMawftGsgf0ra5foV7Dpl3cCY+veju9WvVTzxboF55Ab9K1wSYlf2zzhEhzhbOzbsPSfbxvqZsOOnIXWDKx7J/NHgQuIrz+wbg4lN31+svOzfWdipRi4ryXfGJ8U52Pr3Of6ttc9v3NSgb0fdoRiTDPQ8LZPkPFXAogDjdkAVrR1X6v//b/+6r5EqjzLNGzGRaI0b/y1+WUlf79aOaUFQDPsyOhYcLf9D6P9pkMrxXDBAAAAAElFTkSuQmCC
* [[Таблицам критических попаданий|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=1952211726]] придан более логичный вид:
** убрано разделение ранений на лёгкие и тяжёлые
** уменьшен шанс более серьёзных ранений
** к каждому виду урона теперь приурочены шесть различных ранений, по одному на каждую сложность от I до VI
** сложность излечения ранения лучше соответствует его серьёзности
** удалены ранения, ослепляющие сразу, а также лишающие конечностей
** успешные операции теперь следуют логике, по которой они понижают необходимый уровень магического лечения на 1, а срок без лечения вдвое
** удалены ранения без эффекта, с эффектом, требующим излишней математики, а также ранения, следовавшие упразднённым правилам Стресса
* изменения [[Предысторий|Шаг 2. Выберите Предысторию]]: 
** добавлены [[Азартный игрок]], [[Антрополог]], [[Археолог]], [[Атлет]], [[Дальний путешественник]], [[Дознаватель]], [[Караванщик]], [[Кочевник]], [[Портовый рабочий]], [[Потомок знаменитого приключенца]], [[Преследуемый потусторонним]], [[Провалившийся торговец]] и [[Шахтёр]]
** добавлена разновидность [[Преступника|Преступник]]: Контрабандист и Заключённый
** добавлены разновидности [[Солдата|Солдат]]: Городской стражник, Наёмник и Рыцарь ордена
** изменено умение "Странник" [[Чужеземца|Чужеземец]]: "Кроме того, вы ~~каждый день можете находить еду и пресную воду для себя и пяти других товарищей, при условии, что вокруг вас можно найти ягоды, дичь, воду и так далее. ~~ ''находите вдвое больше пищи и воды при сборе еды в дикой местности.''"
* изменения Экипировки:
** добавлен Набор охотника на чудовищ (50см; 16.8 кг): маленький сундук, ломик, молоток, 3 деревянных кола, священный символ, фляга святой воды, кандалы, стальное зеркало, фляга масла, трутница и 3 факела
** вариант выбора Набора охотника на чудовищ добавлен в базовую экипировку [[Кровавого охотника|Кровавый охотник]], [[Паладина|Паладин]] и [[Следопыта|Следопыт]]
* изменения [[Волшебника|Волшебник]]:
** Знамение [[Школы Прорицания|Школа Прорицания]]: "~~Вы должны сделать выбор о том, что так поступаете, до броска, и~~ вы можете заменить значение броска подобным путём только один раз за ход."
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFXUlEQVRIiXWVfUxVZRzHP+dyeFO4FxFRmO/WBUURQ2K+TMuUEq3Yelupq5ktnDbWil5WWc2WM9cfzazW1D/MSq2ttCx7m4tKS81AURGUxJdAUOBeBOE+zzlPfzzn3nPAOrtn59lzf7/v9/f+M/jsD/7vUSVpicDtn12VZZ+HrRk/C3vMUAiEFKFZCUbT/X7z4ANDzS+B/fiDff+HY/wXiSpJM7sstfzhc32v7b3Ul8V1CxSgDPTBdgQVDIqjbGRi6/Zxg9YPjjPexR+M3Eiy6/cotP7dlZ7z5qXIrpcauvO5bjn3Pg2sDA2M0iq2q8dggzdzUo+9OCr5IfzBuv4kO36LWaVKhxVNPHVtX13j9fQoTsxy23CtV8o9xwzUZDNyUzoO5KUtxB+MhciHrcCyUaXDcmfVdf1Q19CdjiXBskBK57XBcs6WBFuCJfTZe29JDtZ2DFlQ2/4d4fpcl0RaqMWZ8esv9Ow8UBcKYFmusveVlgsoPSTSSyTAEvx47Erg7b/DuwjXxzskgpY+q+KF2o58bbFwLbckHxUE+Kgg4Ny7pOXjUqm+I4vq+VlUz89mY34axNlaRgiePdI8paVXVgD41H2jksrPhisJ93ks1YDl4wazdEKAKYEE11Ip2D59KO8XZTI1IxlDKaZmJLM6L4O9RZkgI1o23EPFybZKwvVJJrB495nOTKR0qybe4JfZ2czOTtHVoRRYEV1dqSZLbk4nIi0SvzgN4T5I8FFz502UjhsCVeegV4BS7Kprzdw5bcTdvi9auhcR6tUgUoKMUHP7SGZnp3CsrZtzoeuaXAiQfeSnxAHw0/kQtHeDiMC1Xvb8fRWAtbnpjjcC2rvYfTFUau670l2IjLilqRS1V7vZXN/GxhOt1JRN1N5Jbd2xxisY713pV7YoxbysVABOdfaAkE5fwf7L4elmQ48YjRBukynFkv1nY01mRHtBSgfUvqE3GJHCzNFDiAjJJ2dbtSdOHzX29I4yTcsOICKuoh3taNdKQIel351+k0cE6LyvAIAnvjsBXT2eqECCbQfMeFuGkcIfA+gXBtvjiaBfpytFZeFo3rgth4R4k+e+r2VbzXmPvpY1LCts3pzou4CUeXp0MEDIM6f6kdhUFo3lrQV5RIRk4acH2NfQ4noZ1bVhfJJ50Zw3LOXwOzKS53UxRhSbT051OffPFY9nfUk+kYhg8rYqGpra3VzFMGxQijnDA4fMe0anf0Nq4mO0d8VC5A1JjMwSOl8ZKaydlwfAq99Xk5sQR/CmDADiUOxp64LWkNbLSGXR+OHfmBjGVysmZ7Vu/qk9M+oiyo5FyYh6EtGebC4cS0JCPADrFhcx8NladZzHvzwESvHktDFt+IyvTOPlHb3Nz9+7YfPBhg2ErnmSrl3+uPqMJpYCFDReDbO16vgAaHfkf336Hy0bGMSa4pwN+IO9BuWvoNYvjX/36NkjT+38LR/bmxvLxbgh5m5fuXl0/jcU7y2bf3xlcW4h/qDwISMYz2wRq2+Z8NCyuRNDerwIPWYsZ1h6x3pstAvPvonuFv1dvmBaaGVx7oP4gwLAF90VRsUHddtKi+Y/PCevFTuq7F1c3t0i9FKzLGfPWCD0d8kdBa1b7p21wLuCfd7RbqzaeOSTsplFGx+57SgpiS6YcEiEd3k599EtGkhi06Mlf21/YO6t+IOHvRkzeGSVjqPtJk99+LR5qaNrxbqq42s2/XEqi8udbnJjM84RHx5gdfGk5ufnTn19ZLp/C/6gHFhxBg8+OSCRUSBQWyuTgMXfnmxa9Ov5lsLmcM+YOJ/hl7YKZ6cmN80eM+LPhZPG7gW+xh/svaGenedfc6tsi3Q2KY4AAAAASUVORK5CYII=
* добавлено правило [[Испытания навыков]]
* правило "Путешествия на дальние расстояния" заменено испытанием навыков "[[Путешествие]]"
* правило "[[Плавание]]" дополнено информацией из Руководства Мастера
* правило "Показатели выживания" заменено правилом "[[Голод и жажда]]"
* упоминания Показателей выживания удалены из правил "[[Отдыха|Отдых]]" и "[[Грузоподъёмности и нагрузки|Грузоподъёмность и нагрузка]]"
* удалено дополнение "Еда и вода" из правила "[[Грузоподъёмность и нагрузка]]" (неучитываемые рационы и бурдюк)
* изменения правил "[[Ночлега и лагеря|Ночлег и лагерь]]":
** удалено правило "Полезные заклинания"
** упрощено правило "Разбивка лагеря" - единственная проверка необходима только при поиске природного укрытия
** упрощено правило "Караул" - удалена проверка подготовки лагеря, удалён запрет на лагерную деятельность, удалено правило ложных тревог
** упрощено правило "Лагерная деятельность" - персонажи с трансом могут выполнять 2 деятельности, у большинства видов деятельности удалена необходимость в проверке, изменено приготовление пищи и напитков, вдохновение заменено очками героя
** упрощено правило "Сон" - удалена проверка сна, удалено правило короткого сна, изменён сон в доспехах, добавлено правило "Без сна"
* изменения снаряжения:
** ёмкость бурдюка 3 л -> ''4 л''
* изменения Черт:
** удалены черты:
*** "Борец" - не актуальна с текущими правилами [[захвата|Захват]]
*** "Одарённый" - почти полностью повторяет расовую черту людей "Вундеркинд" и при этом лучше неё
** "Вундеркинд":
*** Вы получаете владение ~~одним навыком на выбор, владение одним набором инструментов на выбор и обучаетесь бегло говорить на одном языке~~ ''любой комбинацией из трёх навыков, инструментов или языко''в на ваш выбор.
*** Выберите один навык ''или инструмент'', которым вы владеете. Ваш бонус мастерства удваивается для всех проверок характеристик, используя этот навык ''или инструмент''.
* изменения [[Пороков|Шаг 6. Выберите Пороки (опционально)]]:
** "Ленивый"
*** ~~Вы совершаете проверки Лагеря с помехой.~~
*** Вы не можете заниматься лагерной деятельностью, кроме ''"игр" или'' "отдыха в одиночестве", и основной деятельностью продолжительного отдыха, кроме ''"азартных игр", "кутежа" или'' "рекреации".
** "Мстительный"
*** ''Пока в пределах вашей видимости находится существо, атаковавшее вас последним,'' вы совершаете броски атаки по всем, кроме ~~существа, атаковавшего вас последним~~ ''него'', с помехой.
** "Обжора"
*** ~~Вы получаете голод в 2 раза быстрее обычного.~~ ''Вам требуется в 2 раза больше еды, чем обычному персонажу того же размера.''
** "Страдающий бессоницей"
*** Вы ~~совершаете проверки Сна с помехой~~ ''не можете спать'', если у вас нет хотя бы одной степени истощения.
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFaklEQVRIiXVWa0xURxT+7mWBReDuCrJKi1LRLqgFQ5FaFR9ViyLaEhsxtVqbxqY+2hrT0miaNtWkppr4S6upVWO0TSo28f2O0Si18YUKYsliEKogBQHZZRf2zqs/ZnbvrtVJJrP3zpnvu+fMd85ZDQev4kVDFDvjAbx1sJOW/eFlE/40eWaSDkcvR09RrNb8nsP214JU22EAF2C4gy/C0Z5HIoqdNh8TH7/fFPz+REswHQEGQABCAzQBCPUbAAZoKMuwt/86PGFTYoy2DYbbfD6J4AA0QAiI2SnZG1vMym8aAnnoowqMKwJugQsh33OLbGN2cs26oQkLYbjro0kOXFEHAFEyqNBd33u6oTGQAiFJwcP+KTsRQRJ6FGrlKMpO7r48xlkCwx0OkQ7GAcYhSgblTKr3nWvw+FNAGUApwBjAKcAIwCjAGaS92mNUTqpsKENVXffAWbVdZ+D15FgkhEHMdcVuehg4cOVvn0Me4hKEMgXGngELgT+PiOJszRPHlgfeSng9sZKEU7QF2eq1tV15UQcpBSjBvnwH9uc7IoDVdOrYXzAQt2ek4/iENLybYbf2KMFX11tz2/rpagDQxfwM+8r73gr4VEhCoWEUy7MSsSTLQK4jLnwYlGDliCSI4kwsHumEJgRKMw0cnpyBVSOTARoEmAn4+rD6XkcFvB67DmDuoQdPXVFfGcNweeoQ7Ch0SXUIEeXFhtxUmJRB+60GY494oFXWAQAqRqWqD6EAMVFZ3+6CEPNsh9r8pejqs9QCjjvTRiAvbQBqOvww4nSpHqJyzYhFfVcfzj/2Ab1BKf/OfnQGgsh0JgCEWGrr8uHIo545ttNP/AVgRCWYJLrb6ccuTwe21nXgTpkSCSXyYGcQRUfvRUl6+4RMpA6IR22bV4ZbQJIL4MK/3nG2hgAZBmIqEqn5Dy42AlwCaCEPKVXJZ+XMmrHp+HFSFuJibejy9yPv1F3pSSifuEBjoH+oHsOZw1KOvFgQE6BqhjwkRE5qhu10zuB54odJKFIS7Tg9cXjEncg1jnOHbmPcC2L+DyCsppA34T0FQExsufYAuXurEL/tPO62dmNWdjo+ynFF2JrQGPPq2fH6Q0ueNPqLCVHhEtFeOmKBOC1sA18A+2uaAQATXUnynSlxsuy2R/r0tMTr0thil2AKNBwuCfj1uAyI5TNwZnautGHS9lXDLuXOeThUoARTBjuu6e8MSzmJpLiIu6AWQegShapXhGDzZQ+6fAEUj87AvBFpgEnwSe7LmJ87DABw7P5jK9TOBJRmDT5pg6YdW5b7Uvuu83Uy85SqQh6Ew2WaYfWtPXUTO8sn4+iH0yIrOvZcqsXRO81ShUJgRX5mB3TtWMz6Xhc9sWA8ttxuKoY/qCotkyvncMRrqG3tRlVTu/SIU1S3dOHWo3b0+fpgmhRn65qw4Vw1Nl+sAwSTMzkBR8qL1ie7XrukYfm3EJsWx26rbrzx+YGqPPBQkqlGEvYMlv5V74juJRErBLYvmVm7YnxOAQw30UFNaF/uIZ+9nrVw6dRRPWCmVc5JZGknEWU9stzTqKoNRrBsZn7PivE55TDcRJZ6tal98XP93jmFMxdOGdMedSgKTD1z1bSIag1UrZxiyfT89l/KJr0d2YL1cHnnFNqqrTd+L5tYuHXRtGokxUV3QMoAogBJROcM2Rh2/LR01q19C6a+AcN9PVIQGhatiu7dXEDsXGNr6fYt++FSzXc7rtano/2plS8aIv6tcMDlxMo3Rz9eN3Xs+owUYzcMN8UzQ0P5p9ZFhu5NEYrdFXYAc0/day6t+qetoNXblxmrw6BceNOTE5qLMofcLBn9ygkAx2G4+58FD43/APEnsRcAM+UZAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFKUlEQVRIiXVWe2wURRz+9rot12tvrxzQUh4tDzkKpQUspcESG6AUacE0xEJ4BWMQAVFClPggGvkHwx/EGEGjiDFCTAETLFgETcDwapAK0vI4y6stYOsBfVy5tnfz8o+Z3ds7YJPJ7OzMfN9vvt9jVsPB83jWI8rSBgCYdfARrfwpyGacjfBsjwZPt0B3cZLW8oqh11UN0n8GcBKGL/wsHO1pJKIsTe9h4rWlzeFPau+HM9HLbJPmC5eD5ARUjnAG9o1O3p6SoO2E4Ys8nUQI2QCIl7zjt90PH9hyozcffUKCCRHdIUwiNcc1+T1Fwzafu+GDkclLYPj8sSTVddYmUT6ocML10DH/7V5vDDAAcAbAoQijRkkDo0ecOT6183Ru2nwYPksiBxgDOIUoH5RT7O/53X/jsReUA4wDjAGUAZTKMaUAo6pn8j2mRXDmaufAeY0dxxFsyomSUAqxID1x+92+/ef8PR4wCnATjNlAbY0TgEVsBqhG5Pi3hoeeHXeCBxBsSpQknKE9zDa+f6Uj37KQErWRYO8UA3unehQYkT1hAOXWun0FXvxdOlwZRABK8G59W157P90IAA6xaIRz7a3gZvT0SxATiBKsHZ2CFWM9yPMkKXCbXAps/Vg3lo8biMmDk9X3iMTo7sOmaw82I9jkdABYUHOzK10enUkgneN0SSa+KkyX0SGEpbkEUb3Lgc+mZUSDg4QVuVxT7Q+kQ4iF+qH2UAW6+qMRIwQuzxuD/CEuNDwIwUhyyDkaluGqcYDLCGue6wMAtHT1IjvNJQmEyiEBoCOCmnvd5Y5jD0MFoGHJriy48iiEt8+2YvKh6wiGmSQnytlEyrRr+jBkp7mw6uRNuQaIykWI1Z8IBKfpN3pJFihRuSAtXP7HbetUmpkPppVCAENTsX7KcJxr7UD11X/xYV6mWhOx5ZFceyfUP1LXGfPEAFiyITbpCJFjZyIeVUxAR6gfxUcaAEKgCW4jAewVJJlzj57AeRCUGuYpYkgUqSYgI4YD1XPGwZvixOyDF4Ce3hhAEBpnqABlLKiPH6DdPUZIbvykWTI087s6yZL8kQCAE1WFiH/EloXYXfcP1hxvlBhc4Dmnfk+fPST1wuckkmvXMSqT3UpZXHfXNVl1yvTXorwseN0ufHvWj5pb/wERYvnlxQzPn/rLWd6jMJJeRcfjp/jlSSnW1F6K9ZcQmJE1GF63C68fro+Ve3AqKsZkHHVA046snjQsAEKBSERaTIjVNCGkY6lZDeIao1FDqNpPZbivmzrqARzakYStj9NpbVURdly+U4a+MMBV9eUM4ByeRA2NbZ040xyQc5yrAirkGkYxMMmB5kAXDl9rVfMMcDtRs3jmVnf6pFMa1n4EsX1F4s6Lt+rf2n86H1xTx+WI9VNcSAubLDE+BKAJfLmytHFdUU4BDB9xgEWgvbOHbHh+7JJVJbnd0cw3CyG1KrI1piRuzn7PUKwundq9rihnMQwfAQCHqau28Wv/9+WFpUtLcgPgdgITkKkqra4Dru4dSmRQUApwhpVzpgR2VxbPtV/BDqvyUgJt/c76HytfKPxi2ayLSB2gtFeAhFiXEojZmLohGWAkY9eqsks/VJVMh+G7YM8fDcvejGrKpb7im036/c6e1Z+eavx41/nrmQh0Rn8gtLh8ykjDhqKJbe+VTN46wmvsgeGj8UmqYfEbsc4ELGeK7zY7ASz49VpLxZnW9oK2YF+27oBBOA8Oc7taZmYP/Wv+xFG1AH6B4et/ogSo539uW5ZJumYt4AAAAABJRU5ErkJggg==
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFWElEQVRIiXWVeWwVVRjFf/OYrrbzSoGWEqClxdfahiIiVISwicWy2dQAAaxEQyIoSIgQQcToH6IETIzWJSxqcMECCTuCxEBAKJsIlJZawFJZii209D26zdyZ6x8z780ry82b3Dd37nfOveee734KW07wqCbzE6KAMVvuiMKtfnPYUd1KjfPgvWfRPCJCqX3Jq5ZN7aZuBw6i+ToehaM8jETmJ6gBU74242rHB3tudKTQajofAEWClCAVwILYLhT2jqr/sV/sqse6KCVoPv0hJMftYKT9eyExc+WNjs3LL7Xl0mbZgFg2qCKduZZLYrlkKzPjzy/rEzMdzVfVmaT0mAMEsqD7EF9Vy75L/7QkIhV73ApuAXcxyE4Ls3t7zrDMuKZjOQkFaL6QRB5MAaaFLOieNbwqcOBS9b1EhAlCgGmC5fSmcP7f/xjuXCEoq2jqOr68cT/+6iyXxLCQk5IiVl1rKz12MeDFFCDMUFAnQPGw3nSIjBDhb+cbvJ/W+Dfjr44AULFMbnWYC5eW38nFDJ6BI4OUbBySiCKh+NRtRzIJEQqfZyeEWwXFUXRBdRP4BYtP1Q2YlRK7sKfGGlUW9Y4uqmhaQkAP09gGm9tfozjdy7nbbfZKHfkzkmNYkN3tAVcCrLvZzPkmHQI6iyoblmyKri5RgUnbau4mYQrHmkCUwpHhvRjRK852h5S2FFIBaVLs1QDIOXCZylp/aDeheCRYkl+q6pM2Deo5Wd12q2Uije2uTFicG51Bbo9Yzje0oEV67HEjuBPJ0K7RAFTeDNg7DOaPRZjlgUadHdebJ6j7brcOxuwInQFILtxpYX11A19UNHCu0DGJECAtALK7RqMbJgv7aUzrl0h8pMqOmtusOHmt846kxcH//E+rl1r1vhhGJ5JZh66E8kNx/G+fiS1DatdYAD4bmYFuCCIjVAYkx1Ps60Had8dDOYNlcbW1vY/axTK9CBECeEDbYIBh2DIkxNDY0k6gQ5C26TS06oxJ78bW8TmkJsaxeGAKa07XhjCiLMvrUU3Tj6HbICL80UOrV6R03xv8dCs5RNraIxBoBWFw8O861p6pAaAoo0cnDMs0/Z7MKM81hHCBDcMlNHRHLukGGrpLKNy5h683AhAfqdpjugGGID1ave4Z2yPulA2u45KFEUlHMof8kxHpyOVT2F80yB4zdTAEr2b1BKDqVhMY7qJHJntPeqb0TdxLXKRNEFylobtEUtquMu33pWdrAcjP7sPkjO6gC5blpfLc4ykA/HCh1iEQkBDDxPTkvSqKsmvOgF7163+vSLIPPzyxwtylO4R1Tby7+wQrJ+Wx85XRnbJ9+Y4ydp6rIXhzzBuU1oBH2aUqy0vb65ZOWb2+rHo1d1tCCRck+unsZZtYOO6SCh8fqqCi3s+L/XuGsn1X9Q22lzt5AqDF8F6ebzWar11h7grkqpcjSs5cOb2g9GguVtC2luP1h9kaN6sfqCk2yVfF48rn5WUNRvMZHoSO8va3xvynMqbPHvVEM6bu1ggjvF6EX/nBsfDeDJWIOeMGNc/Ly5qG5jMAPEFHKW99U/X9hCHjZozMqQ/VB+EE319DgoXMsFxwYYAlKB77ZP26wuHPh5dgT6i6WSbKmyWnfy58dsgXM8ecIS76wYJlOAXNMN0dmA6hFsOXs/P/2jh11FA036lwQyjMfCOsdttnINcuUm80BeZ8dLj8/a9PXEyh/q6bLwph9xyQ5GX+M9l174wa+GHvRG0Dmk9wX1OY9robEF60kMgNS6KBSb9W1k78499bg+v8baldPGimJf0p8bG1I1KT/yzITtsD7Ebztd8PHmz/AyXSdKhmUWQkAAAAAElFTkSuQmCC
* добавлен пункт в правило [[Сокрытие сотворения заклинания|Сокрытие сотворения заклинания]] - "''Сокрытие сотворения заклинания требует концентрацию.''", дабы избежать бездумного спама этой опции.
* изменения [[Предысторий|Шаг 2. Выберите Предысторию]]:
** добавлена потеряная при переносе из Книги Игрока предыстория [[Чужеземец|Чужеземец]]
** [[Народный герой|Народный герой]]
*** Владение навыками: ~~Выживание~~ ''Выносливость'', Уход за животными
** [[Чужеземец|Чужеземец]]
*** Владение навыками: ~~Атлетика~~ ''Выносливость'', Выживание
* [[Описание бардов]] дополнено текстом из Xanathar's Guide to Everything
* изменения [[Варвара|Варвар]]:
** добавлено [[Описание варваров|Описание варваров]]
** добавлены [[Классовые умения варваров|Классовые умения варваров]]
** добавлены [[Пути дикости|Пути дикости]]:
*** [[Путь Берсерка|Путь Берсерка]] и [[Путь Тотемного воина|Путь Тотемного воина]] из Player's Handbook
**** добавлены Тотемные духи Лося и Тигра из Sword Coast Adventurer's Guide
**** изменён [[Дух Тигра|Тигр]] "~~Пока вы находитесь в ярости, вы можете добавить 3 м к дальности вашего прыжка в длину и 1 м к прыжку в высоту.~~ ''Пока вы пребываете в ярости, дальность ваших прыжков удваивается, а вы получаете скорость карабканья, равную вашей скорости ходьбы, и игнорируете первые 4 м падения, когда определяете урон от падения.''"
**** изменён [[Аспект Волка|Аспект Волка]] "~~Вы можете идти по следу существа, путешествуя в быстром темпе, или передвигаться скрытно, путешествуя в нормальном темпе.~~ ''Вы совершаете проверки Мудрости (Выживание) с целью движения по следу или охоты на дичь с преимуществом.''"
**** изменён [[Аспект Орла|Аспект Орла]] "~~Вы без затруднений можете видеть на расстоянии до одного километра и способны различить мельчайшие детали, рассматривая что-то на расстоянии до 30 метров. Кроме того, тусклое освещение более не накладывает помеху на проверки Мудрости (Внимательность).~~ ''Вы получаете [[сумеречное зрение|Зрение и свет]] радиусом 1 километр, а ваши глаза способны различать мелкие детали на этом расстоянии.''"
**** изменения [[Гармония Волка|Гармония Волка]] "Пребывая в ярости, вы можете в свой ход бонусным действием [[сбить с ног|Сбитый с ног / Лежащий ничком]] существо ~~Большого или менее размера~~, ''размер которого не превышает ваш больше чем на одну категорию'', когда попадаете по нему рукопашной атакой оружием."
*** [[Путь Буревестника|Путь Буревестника]], [[Путь Предка-хранителя|Путь Предка-хранителя]] и [[Путь Фанатика|Путь Фанатика]] из Xanathar's Guide to Everything
*** [[Путь Бушующего в бою|Путь Бушующего в бою]] из Sword Coast Adventurer's Guide
**** реворкнуто умение 3 уровня "Доспех Бушующего в бою"
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFkklEQVRIiXWWeWwUVRzHPzPdHrR0t93SYhVaLpcaBAWsXNGKlrMoRLEEFU0MCSAIJmrUGI0kBuQPEhMQFUESvLiMoICoUTw4FY9SpEuBHtJC2Zauu7Utnfdmnn/M7MwW9GU3M/Pm977f9zve9zcaO4/zf0NNzUkHJu+8IufsipsTfhBWcR4EYorYpDStca7fd/ThPN9u4CD+UM//4WjXkSgNNS3g6zDVk/Mbel7b19xTSJeZeOnagAVKQWYKcwakRz4cnLkmK0Vbjz9k/AfJMWetsn/Tg8NXNffsePls9yi6pQOqenG49gCWCeiQpbEqlH3ypYF95uEPhXuTbDvsOTGjX2ko3Hng7PmuoAtuKdAVWJpjZHlELrlySScM7xs9MiJnBv6QGyIdS4GpUDP6lUwKd3xztvafINIEaYJpgmWBtMCUYBr2nJTOswQpwJLu/NE/o7nTqtu/Il5b4pFIiZqVn7rmQtf2IzUdAaS0Q2AmAyWuVu950wNHCpf06+q2wNr6+A7itakOiUlLj7nixVPtozAdAunsWkq2jg7wweiA7ZlMIsxJYe/4fvxRXsjeCfnMHpBhE0kJ0uC5ExdHtlyVKwA0FTuTMed0tHHPqfYCLEBzYqwUi4cFeLu0gKq2bm4/8JcTdwv69aGnvIg0XwoNsavcmJVKmi+F/fVRKg5eAExQisrRhZHtYwqLdWDWnnN/F9g5kCAEpFj8VFbI26UFdnUo5XqGMGm7+ybSfCnM/b6BwbtqSP/kFCcjncwcnAtZmo0hJDvCkQKUut/3WUtnBX93O3WvgVJUTRvCqPxMTrZ24k/TbQ+EsLOYn0leZhqHm2J8eqbVXmfAbYfqeWtILuP7+jjW5theMdjTFJvpO9DWORbT8EpSKU5d6WRTbSvrTrdSNdspEikAxfJgLgDrwhHIS2fD0FxqO3p4M9zK0qaoU+LKwYKDl+N3+Oq6RBFCOp7Y7x89WOc+a4mzICWgKMnyAbA8lMe2oqB7xtZMGMSWqiYW/3DOOaQ2WF3X1YG6z7QCiRja1SFAGt6z4x1SgDDQLVtiJhYFefdEPdqmQzz37WkAFt0xiPKiAAjDzqEQpFlWQMeScaThANtALpETIk0pb9458Y3tHSz+pgZaY6w9XsfuP5sBqByY42zI3rAyzbg+PF2/4Na3SyDcnWsJyXAWRrttsf26tgVMz3ZLTbMnO0K49sMyfE36vfl9f0kA2kTeLq4LlxRsPHcZgJEFftvOsO0fKrbzUxeNe54Ig7v7B37WHygK7ic7zZMGKZKMkkgMe1F93WXaO7oYP6Q/L5YWg5RU3JzPgyOLAPiyoc3ZpIScDCqG9N+vo2lfLLz1xojtiWF7lOSNphSaspzQ2J6WffQjhiFYPasUtXo+ex+fTDA7k5f3HKXq/EUXZ9GYQa3o2hcpKzsL5L6541j7R8NUunps1TVNRyRNAqka1ZfaOVQfAdMCJYlc6eD142GyhUG4uY3vzlxgxb6f2f57vb1eWZCdweeVd63MLrj1R40lr6DeeCx1/W/nTzy97fAouzdYTp3T62B599f3kV7zKDYsKK9eMq5kLP6Q0BES7dnNYtmYofMW3HNLzC3lRK9wlVd4cn5tGxAJG1upF04ZE1syrqQSf0jYUu8In7binfDWmaXl88tGRLBkb1k3k8iS/yLR3KR7XXDf7ZH3Zk+cktyCda8hSbSn1p/4eM7E0nWPTP6NvumeN8ndMNExk7ujaUIgg7eemPr71ofL7sQf+oWkofHIUi+WTh7Uxmd8zdGOhat+qn51w7GaQiLRXh8bXh6A/jksG3fLpRfKbls5IOjfjD8kuWZoVC66ZqH3oaDefz4DmPXl6caKQ3+1jL0Y7y5O1fFLS8ULs/s03lV0w6/TRwzaB+zFH7p6LXhi/Au3WqEm1DA2YQAAAABJRU5ErkJggg==
* добавлен навык Телосложение (Выносливость), который отвечает за задержку дыхания, дальние забеги, сопротивление природным условиям, крепость желудка, болевой порог и т.п. Является классовым навыком для Варваров, Воинов, Монахов, Паладинов и Следопытов.
* добавлено испытание навыков "[[Погоня]]"
* добавлено правило "[[Очки героя|Очки героя]]" на замену правилу "Вдохновение"
* добавлено правило [[Хиты, урон и смерть|Хиты, урон и смерть]]
** добавлены состояния ''истерзанный'' и ''умирающий''
** дополнено состояние ''окровавленный''
** добавлено правило "Спасброски от смерти"
** добавлено правило "Стабилизация существа" на замену правилу "Оказание первой помощи"
* добавлено правило "[[Немагическое лечение|Немагическое лечение]]"
* добавлено правило "[[Падение на существо|Падение]]"
* изменено правило "[[Определение значений характеристик|Определите значения характеристик]]" - модицифирован случайный метод определения значений
* изменено правило "[[Очки навыков|Получите и распределите очки навыков]]" - получение навыков после 1 уровня больше не связано с умением "Увеличение характеристик", вместо этого вы получаете по 1 дополнительному очку навыков при достижении 5, 10 и 15 уровней персонажа
* изменено правило "[[Доспехи и щиты|Доспехи и щиты]]" - реворк таблицы доспехов, владение щитами привязано к владению доспехами
* изменено правило "[[Оружие|Оружие]]" - разделение оружия по принципу действия, дополнительные бонусы от владения, реворк свойств и списков оружия, созданы [[Актуальные таблицы оружия|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=1786877311]]
* изменены [[Таблицы критических попаданий|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=499929205]] - полный реворк
* создан [[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=772074949]]:
** добавлены черты "Мастер владения арбалетами", "Мастер владения древковым оружием", "Мастер владения дробящим оружием", "Мастер владения клинковым оружием", "Мастер владения контактным оружием", "Мастер владения луками", "Мастер владения метательным оружием", "Мастер владения топорами" и "Мастер владения цепами"
** изменены черты "Использование двух оружий" и "Мастер тяжёлых доспехов"
* созданы [[Актуальные таблицы снаряжения|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=677870806]]
** множественные изменения веса и цен
** добавлен //саквояж хирурга//
** добавлены описания предметам базовой алхимии
** удалены элементы одежды и аксессуары
** изменены дальности света предметам освещения
** дополнено описание набора травника
* [[Ребаланс увеличения характеристик и черт за уровни|Ребаланс увеличения характеристик и черт за уровни]]
* удалено правило "Бонусы на 1 уровне"
* изменения [[рас|Расы]]:
** [[табакси|Табакси]]:
*** "Кошачьи когти".  Используя свои когти, вы можете карабкаться со скоростью ~~4 м~~ ''равной вашей скорости ходьбы''.
* [[черты|Черты]] разбиты по категориям для простоты навигации
* изменения [[черт|Черты]]:
** добавлена черта "Боевая тренировка тритонов"
** добавлена черта "Взгляд с глубин"
** добавлена черта "Выносливость горы"
** добавлена черта "Древесный прыгун"
** добавлена черта "Единый со стихиями"
** добавлена черта "Жатва"
** добавлена черта "Заточенные когти"
** добавлена черта "Имя им - легион"
** добавлена черта "Истинное наследие"
** добавлена черта "Кобольд-изобретатель"
** добавлена черта "Мастер имитации"
** добавлена черта "Мастер примитивного ремесла"
** добавлена черта "Небесное касание"
** добавлена черта "Непогрешимое око"
** добавлена черта "Раскрытая псионика"
** добавлена черта "Обновлённое дыхание"
** добавлена черта "Охотник на исчадий"
** добавлена черта "Очень важная персона"
** добавлена черта "Разрывное дыхание"
** добавлена черта "Раскрытая псионика"
** добавлена черта "Регенерация рептилии"
** добавлена черта "Тортл-защитник"
** добавлена черта "Урд"
** добавлена черта "Хищная птица"
** добавлена черта "Чешуйчатая стая"
** удалена черта "Драконий страх"
** удалена черта "Драконья шкура"
** удалена черта "Крылья дракона"
** удалена черта "Человеческая решимость"
** "Альпинист":
*** Вы игнорируете первые ~~6~~ ''4'' м падения, когда определяете урон от падения.
** "Кошачья грация":
*** Вы игнорируете первые ~~4~~ ''6'' м падения, когда определяете урон от падения. ''Вы приземляетесь на ноги, даже когда получаете урон от падения.''
** "Лекарь":
*** удалено требование владения навыком Медицина
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFHElEQVRIiXVVa2xURRT+Znvb7pbu3dJCS3kVGlzKq4gFmwoIKFQoRBuhEMSGSEgEglSDJBKDkT8YEvmhFhMxJISoETBBxGLRxAdvLKC0hBZKaQs0bXYppbvdtrvz8sfMvXu3yE1OZubOme985zFnCI5dxtM+WZqRCmDRsW5W/kOIl/xFRV4Gga9PoHduCmlfZRoXK7KMHwH8AdMffRoOedKIhCwdboS53LC2LfpxTUc0F/3c3oMkAER87UlC+Vh34JuJnr3Dkkg1TH/sSSNHL+nD+tjSzMl7OqJHP2weKMQA0z8tYG1EamUhAZcAOAHSXdjj99bvHOdZA9PflGjkyHllQBLIsqw5/qZIbXNLf6ZlFNBeCKKJSG3MYpU4lkxO77kwLWMZTL8dIhe4BLiALMsqmNsU/q35VjgTnAGcAYwBTKiRM0DEYO9xrkXr6fnFGz3DlzU8Oo3Q7YK4EcYgV2Qn773ff+RCU9gHwQEuHGAscc2cQhU4o1oYwClqGwK+fa2howjdTgYAA4yjK8qrPrjRUwjG4q7r0ByenQUiJSrrulVevAY+y/eB2KFTI9HTz7siaO4I4/0rnTPW5aZVjTLxqSFXjnWX3+zZgVAsHmup4r5pkg+V+SauPxwAOAWkxGRPCrZNyRxaQPEkC46tbY8BGkPVzeCOI+7b1UT23lpFfmo9hj6qwQWQnISz80djXm46AKA+2I+ZNXc1ae5ItCbkTUX0dZWC1G/rgUGm9rypkGsLVxvHuyLL8XjQUTEC10vzUDgyDfXBCMwUl9pjTk+tKKmyvr7QjxQjCbNPNQJ9A3ES3TGceNBb5qp9GCkCiwKUKiBGcaM7gm3n2zHzeCNCUa4OWIm1Es5iAKV4d8oIFGano/ZOEFfvBB1FoOT3QGi20Rqh48Fo/A5IiXV/tujrIEGse2DpOMMkgV1FYwAAy842ax3pwBJojQyOM1xS+IYaSQRyGpEJhrbPGoPMYW6cvtUFBMNPEICU8AjhM5I4D4FR0z5sK8ZjTiRUOCVUYWiQlRNHAADeutSiSQgHCXWecR4ynkkl98HoNAhne5C6Bw4Nl8O7tBSUTByJe90hdLYHHcYd4RLAJLfxwPXSyPQ6UCuhMTuh9tw6SGMJyd8wQd2Vy+0PgRgFYiwuVK9ZDC/m+P52vTo+8xS8yQ5wGh+d7Kk+TJVeSY4XAPBrS1e82lhMXVprneHB8vycUy4QcnLj9NEBG9hiQikQoyBWhdkkFMMZOT4AQF2wF+DRxNLWBDfPygvCRU4m7e7LZjUVxdj3b1sp+gcBIQDBAC4BIeBLJmjofIRzbQHYzVNw5HgMtAUe48D5RvufEqHE9ODE6nm7vdnTzxBs2gW5983k6mt3r7zz/bnCoXWuEqiLwSqMhHcF8aqy9onEl5WLGzYXFxTB9FMXGAPZfpBufS5/zfqFU3qVq1HtttXOnW2e/k/L59p7tbdxyazezcUFq2H6KQC4VDw5SNVXTYfK5ixeu2BqIP4QaQALjOv3g9P43NKj6tGqfPnZwNevzV3ifIJdCkQlimypvvJd+Qtzvli36BrSU21mNluqQanDuEXEdGP/+lf+OVyx4HmY/jpH9wfBG1sSLg8gIQ+8Z3T0hDd+cqbho/2XG3MR6HHkAbYeIIGcDGwpntq5c8HM3WMzzYMw/QxDPoKKtx1JdfQvAsiDO9wAVvxys335uXtdRZ2hgTzDBZMJEcr1prXPHz/q6tJpE2oA/AzTPzgU3Pr+A9g5jZcrT7h+AAAAAElFTkSuQmCC
* добавлены списки доступных подклассов всем [[Классам|Классы]] (пока без описаний)
* поправлено правило Мультиклассирования [[Использование заклинаний]]: "Количество имеющихся ячеек заклинаний вы определяете, суммируя уровни барда, волшебника, друида, жреца и чародея, половины уровней (округляя в меньшую сторону) ~~изобретателя~~, паладина и следопыта, ''половину уровней (округляя в большую сторону) изобретателя'' и треть уровней воина или плута (округляя в меньшую сторону), если у вас есть умения Мистический рыцарь и Мистический ловкач соответственно."
* изменены требования к мультиклассированию [[Паладина|Паладин]] на "Сила ''или Ловкость 13'', и Харизма 13"
* удалено правило Дополнительные заговоры. Дополнительные заговоры теперь прописаны в умении Использование заклинаний заклинателей.

!!!Изменения из Tasha's Cauldron of Everything:

*изменение правила [[Падения на существо|Падение]]: "~~Если вы приземляетесь на существо, оно должно совершить спасбросок Ловкости Сл 15. Существо получает половину дробящего урона, который вы получили от падения, при провале или четверть этого урона при успехе.~~ Когда одно существо падает в пространство, занимаемое другим существом, и ни одно из них не меньше Маленького, второе существо должно преуспеть в спасброске Ловкости Сл 15, иначе попадёт под удар падающего существа. В результате такого столкновения урон от падения разделяется поровну между обоими существами, а существо, попавшее под удар, сбивается с ног, если оно не превышает размерами падающее существо как минимум на две категории."

* изменения черт:
** добавлены черты:
*** "Адепт метамагии"
*** "Затронутый Страной Фей"
*** "Затронутый Царством Теней"
*** "Мистический адепт"
*** "Начинающий боец"
*** "Начинающий изобретатель"
*** "Отравитель"
*** "Телекинетик"
*** "Телепат"
*** "Шеф"
*** "Эксперт в навыке"
** удалены черты:
*** "Гурман"


* изменения Боевых стилей:
** добавлен стиль [[Метание|Метание]] в списки [[Воина|Воин]], [[Кровавого охотника|Кровавый охотник]] и [[Следопыта|Следопыт]]: "Вы получаете бонус +2 к броскам урона метательных атак оружием."
** изменён стиль [[Бой вслепую|Бой вслепую]]: "~~Отсутствие возможности видеть цель не накладывает помеху на ваши атаки по ней, если она не скрыта от вас.~~ Вы получаете [[слепое зрение|Зрение и свет]] радиусом 2 м. В пределах этого радиуса вы можете видеть всё, что не находится за [[полным укрытием|Укрытие]], даже если вы [[ослеплены|Ослеплённый]] или находитесь в полной темноте. Кроме того, вы способны видеть [[невидимых|Невидимый]] существ в пределах этого радиуса, если они не скрыты от вас."

* изменения [[Барда|Бард]]:
** Вдохновение барда: "Если существо сотворяет заклинание, оно может один раз бросить эту кость и добавить результат к ~~броску урона или исцеления заклинанием~~ ''урону или исцелению, полученному одной из целей этого заклинания''."
* изменения [[Варвара|Варвар]]:
** добавлено умение 3 уровня "Первобытное знание": "Вы получаете владение одним навыком из списка доступных варвару на 1 уровне. На 10 уровне вы получаете владение ещё одним таким навыком."
** добавлено умение 7 уровня "Инстинктивный наскок": "Частью того же бонусного действия, которым вы впадаете в ярость, вы можете переместиться на расстояние не превышающее половину вашей скорости."
* изменения [[Воина|Воин]]:
** добавлены [[Классовые умения воинов]]
* изменения [[Волшебника|Волшебник]]:
** добавлены [[Классовые умения волшебников]]
** добавлено умение 3 уровня "Формулы заговоров": "Каждый раз, когда вы завершаете продолжительный отдых, вы можете свериться с формулами в своей книге заклинаний, выбрать один из известных вам заговоров волшебника и заменить его другим заговором из списка заклинаний волшебника."
* изменения [[Друида|Друид]]:
** добавлены [[Классовые умения друидов]]
* изменения [[Жреца|Жрец]]:
** добавлены [[Классовые умения жрецов]]
** заклинания //Солнечный луч// и //Солнечный ожог// добавлены в список заклинаний жреца
** опция "Божественный канал: Поглощение божественной энергии" перенесена в отдельное умение 2 уровня "Поглощение божественной энергии" с изменениями из Tasha's Cauldron of Everything
** изменено умение "Благословенные удары": "Когда существо получает урон от одного из ваших ~~заклинаний~~ ''заговоров'' или атаки оружием..."
* изменения [[Изобретателя|Изобретатель]]:
** добавлено [[Описание изобретателей]] (без перевода)
** добавлены [[Классовые умения изобретателей]] (без перевода)
** заклинания //Вспышка мечей//, //Громовой клинок//, //Клинок зелёного пламени// и //Лассо молнии //добавлены в список заклинаний 
** создан [[Актуальный список примочек изобретателя|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=1587747735]] (ARTIFICER INFUSIONS) (без перевода)
* изменения [[Колдуна|Колдун]]:
** добавлены [[Классовые умения колдунов]]
** изменение ''[[Договора талисмана|Договор талисмана]]'': "Когда носитель талисмана ~~совершает~~ ''проваливает'' проверку характеристик ~~в которую не включен его бонус мастерства~~, он может бросить к4 и добавить выпавшее число к результату. ''Это умение может быть использовано количество раз, равное вашему бонусу мастерства. Потраченные использования этого умения восстанавливаются после завершения продолжительного отдыха.''"
** изменения [[Таинственных воззваний|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=1448348621]]:
*** добавлено воззвание "Бессмертное рабство"
*** удалено воззвание "Ярость мастера цепи"
*** "Удалённый переписчик": "... может содержать количество имён равное вашему ~~модификатору Харизмы (минимум 1)~~ ''бонусу мастерства''."
*** "Дар хранителей": "... может содержать количество имён равное вашему ~~модификатору Харизмы (минимум 1)~~ ''бонусу мастерства''."
*** "Вклад мастера цепи": 
**** ~~Фамильяру не нужно дышать.~~
**** ''Вы можете бонусным действием приказать своему фамильяру совершить действие Атака.''
**** ''Когда фамильяр получает урон, вы можете реакцией дать ему сопротивление к этому урону.''
* изменения [[Кровавого охотника|Кровавый охотник]]:
** добавлено [[Описание кровавых охотников]] (без перевода)
** добавлены [[Классовые умения кровавых охотников]] (без перевода)
* изменения [[Монаха|Монах]]:
** добавлены [[Классовые умения монахов]]
** дополнение к умению Ци перенесено в отдельное умение 3 уровня "Заряженный ци удар": "Если вы совершаете действие, тратящее очки ци, вы можете совершить одну безоружную атаку ''или атаку монашеским оружием'' бонусным действием."
** умение ци "Ускоренное исцеление" пренесено в отдельное умение 4 уровня: "Вы можете действием потратить 2 очка ци и совершить бросок вашей кости боевых искусств. Вы восстанавливаете хиты в количестве равном выпавшему значению ''+ ваш бонус мастерства''."
* изменения [[Паладина|Паладин]]:
** добавлены [[Классовые умения паладинов]]
** опция "Божественный канал: Поглощение божественной энергии" перенесена в отдельное умение 3 уровня "Поглощение божественной энергии" с изменениями из Tasha's Cauldron of Everything
* изменения [[Плута|Плут]]:
** добавлены [[Классовые умения плутов]]
** добавлено умение 3 уровня "Надёжный удар": "Вы можете бонусным действием дать себе преимущество на ваш следующий бросок атаки в этом ходу. Вы можете совершать это бонусное действие, только если вы не перемещались в этом ходу. После совершения этого бонусного действия ваша скорость становится равна 0 до конца этого хода."
* изменения [[Следопыта|Следопыт]]:
** добавлены [[Классовые умения следопытов]]
** реворк классовых умений 1, 3 и 10 уровней
** умение 3 уровня [[Повелителя зверей|Повелитель зверей]] "Спутник следопыта" заменено новым умением "Первородный спутник"
* изменения [[Чародея|Чародей]]:
** добавлены [[Классовые умения чародеев]]
** заклинания //Длань Бигби//, //Магическое оружие// и //Отилюков ледяной шар// добавлены в список заклинаний чародея
** добавлено умение 1 уровня Заклинания источника всем подклассам: "Вы узнаёте заклинания источника на указанных уровнях чародея. Заклинания источника считаются для вас заклинаниями чародея и не учитываются при подсчёте количества известных вам заклинаний чародея."
** добавлены варианты метамагии: [[Преобразованное заклинание]] и [[Преследующее заклинание]]
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFZ0lEQVRIiXWWe2wURRzHP7u9Po/u9QEcraWVKkfFtEWwFERFsaKURxojEF/RGBKgKsRo4wuJxgRCiMZE8AnGiCYIJiqo4LNGBUSxAi2kVLBAISWHLe2VK+3O7I5/7N7ttsgmk9/s7Mzv+3vN97ca2/dzpUfNzkkHbt/eJes+jVnT95h2SUgj1KtU74w0/dS9RmDfwvzA50AjRmTwSnq0/wNRs3MCfZZ69L6Tgy99ddYsoF/6PiYmNigNsjTqitKjH43LWhdM0TZgRMzLQbb95h52Tqu78yasOTu47YXjlyqSylVCs/LmSgM7gWpDVgprJmQffm5s5mKMSOtQkK17kodUbX5VpDW+++8Tl/JQNqB5ptuuMuXzRrkviqScXjbiwt7rc+ZgRJIh0rEtsC1UbX7ZjNa+7/5uu5iHJcCyQUqQliMty1mzLLCkb7jv0pH7Wrpz72ru/oZYW5kHIm3U3HDquo7+T/a29oX8B5JDDpND1gSOUcKdS75t/jf0antsG7G2VAfEsjg3aK18tvlChWeZB7JlUogtN4Rcr7wxvyidg3cUcLCmkIM1V1FfGvTApcnTBzrLzw3IlQC6uqcoY9mJWAMXTRAJi5zNy8YFefAag/JQmmeplIwPp7NjRiGVIzPRlKJyZCYbqwt47NpskKazL9bPyqPnG4i1ZejAvC+O94xOuIqQELD4ZeYY3qoa7VSHUq4BTnheL8121ncco3LHMbQthzClRcN1+Q6AkCAE21qjo1FqfuCzc/G59FzyqkUpDt1VSsWoLA6fj2Ok6U7lSDNZQbXjcjGlBZ29zpqAY139lIezIRjA0aegy+SLM721+u5/41OwTNdNEyyTlq44K/acpvKzo8QGLQdcJsIo2NvRQ1oghVcqx4AUTC0aQXk4m+74IHT1gXBDL01+jMZuDJyIi2KE8N0FeOCnf0A5d0JLXD4pk57O2HWUkwsrWTWtmFXTigHojg+Qv6PZAfDdn/b4wFg91bZDiRhiCUcmLBEiqRhhJpP69uRCSnKDALR09mIKSV4wg63Xj3E9dr0WJmm2HQrotowhTcOjCzXEEs8T4azlZrL0xqvpvjhA/uZfoN+EzFSaF1WxuGIsu9ujfHD4TJKClGXF9PHpKR3OZXK9SVgipC/Zbk6EoKE4F4B3m/6Bvn63XOO8tv84ALXFeT4dgmszAmf0WaOCfyRDI/3D9PKAnfw+Mk0HID81ZYiycHoKADlpKfj13RoO/a4vKM77mhFpQwGED0i5BGgJME2eOXQagIenlDKxwABTMH/8KBpucaiqsb3Ty0kok7ml4a8DaNrOJeWF0U0/HBkNyqXvBNsqLyemm5POLp7/8nfWzJvKkaWz/YzO983trG08kszp0skl59G1nQFt1ScDnc8sWL9pX9t6evo9ADfxHzcdd+aWcIEt1ja28G17lPrKkgTns7PtLJ+3dHiFEwqyunrCeozIgMayF1HrHkzd0HTiwBNb91Qkw6OsYb1iePXhkz7D3Gbz5kM1zcury6ZgRISOZaI9tVk8PvmaxQ/ddl2vw2Hm5RQvE7T+f/Tv7ykWS2om9y6vLluEEREO1Qtno7bindYPa6tqFs+cGL2slyQVWgzpKYl+Irwe9MCsSdH36m6609+CdX/j0eo3HNhad1PVG/ff1kQw3bs7tq+RSZep/V7YFhgZbHxk9l8fLZw5FSPyh78gNO6vd/8FFOiOVO8+GTh7oW/J2p8Pr964v7WAaI8Ta1v5jrq5CedQXz2x87mZlS8X5RmbMSKSYY/GoqXDkuglVr3fkAHM23X01NxfT5+b0hnrLwnomiFsFSvMzjp1c0n4zzkTr/4K+BIjMjBceeL5DyORjOkgHGYEAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFh0lEQVRIiXWWa2xURRiGn7Pd0i3QXdpKaWtpgcBSqYBcauUmIJdSQSVRaxSJxhAVvIAREojB2JgQ+UFiImKsYggQg2iiKMjFIFGRiyCgFdpQkBZLWltK2V277Z6ZOeOPc/bs4TbJ5szMN/Nd33m/NfjyOHcaeu6ADGDml51y4VdRNeknYZXkQiiiiUzpYzQ/EfQffTLX/w1wiGA4cSc9xi1GtIGuDPljSr/wdFPinT1XEgXEVVLongHL/vY1WFiU0b59aN/1/dKMjQTD5m2MHHPvojV6Xs7IdVcSO99qjI+hR7n7Xhv211lY2jbYL4114aw/1wzOfIpguOFGIzuO2ofQ6KqB5eGG7n2NF+M5rjJLg88Cy+M92pZp7cxT1ieNzOo6UjagimDYTZEPS4HS6KqBpVMaYj80no/mIC2QEpQES4G07LlyvkmZkiCVfcaZHz3blV1Zd20/0fOlKSNSohcMTF//T/yLI/XRENICy6PEq9RVrjxyYe/L1PxA3dXQhkvRnUTPpztGFG0JtXz1X11jUMo2IB1FUrF1XIht40IpRVKAErw8tC9nZhVwZnYh2yfkQHZaSi5NVp5sHd3WK5cD+PTjRYGXL0ZXEev1eCpA2ooWDwsyOtTHVY5SbJ+Yy0flgxh7VyahdINFI7LR84YyKj8DpGnricZ541zHKqLnAz5gwa4L1/OQTgqEgDSLX6YX8FF5no0OrR3DJmTCohE5mFIx7sBFhn5Vj7HzLJ1xk9MzS6CfD4QJQrCjoT0PrR/xfd3WPZ/rPZ5QJX/MKGJqYX/+7OimKdJjI0jY0dUU9wfg4OUIZy512oY7/+NAcxd9/Gm8OySUirozxq6WyMO+fVe7J6BMkAk31L86u3n912bGflNPNKFsiDo1uSvdAOD3jpitTNjO/dYeAyA33XD2bacO/Rud6G+Mi2KETOFdaxYduug+QiP5BqQJaBojPQA8VpLN2mOX3LdSPSQbgKmFTiSWfa8p3jvYl6FUCCHsPEqR+iXXjuGkd++fa8UUktH5QfZVlbI4nMu+qlFMKslN1U846RKCDMsK+X2WiiLNoEsfLoU4rxmNobEvAsRMCnacYPe04VSG86kM5wNQe/wCL1YM52hzxw3OSaWi/hEZvn+QoizFQx6qcNOlUxfRXLt8lcnbOyC3L5XZ/djfco25d2fzYsVw0JbjkAZLMzzgb/E9NLD/CaQDXWlDL1m0lEek1qEAdc9PYf3UYdDWxf6zLRDpZuWYIgC+vdCWKryQPDgo9Jvv0eKc78lKd5DlGPIaS6bQdPZauygMBlgxeSRkZ4IUrK4YwpyyYo5faGV33WXHSQkDAswfNuh7P4bx3ZJ7C9s/PXg2Lxmiy7J40KWEy8qr956mtnoKesUCl85NU/DAtkOgTJehl44v6cBnfJdW050n9zxRwYYzTXOJ94Jl2WxrKVAWoXSDutZODl/qsPe15FRLJzVH6pGRGE3tXdT+eo6FW36ERMK+rxVkBdhVPa0mK+/enw2WrkW/92z6xlN/n3xtx+ExdnEtF+deENwegTh9xsEMFgCbFs+uW1pROoFgWPgQJsabm8Wr44c99dyMeyJ2PZLUngTAzVTvbQMChPKcUSyZMz6ytKK0mmBY2FTvCIzlHzdsebh89tPTy9qxvD3C05xcund+wm4HrlxJFs+6r/2TxybP8bZgn0tmUmAs23jy84WTyz94ZuYp+ve5qWEJz1rdGlUowIfPzT299cnp9xMMn8AzDJ55JfW6LSfVtSv8V7piS9b9Uvf2pmP1BbRfv00dHAQOCrGsYlTrmulja4pygpsJhiU3DYPql24o2A3/XD5bFQAW7D3XPP/w5bYJrdGekjQfQWXpaEFWZvO04vzf55UN2QPsJhjuvVl5cvwP+C2cdnfo6/gAAAAASUVORK5CYII=
Ваш образ жизни определяет уровень комфорта, в котором вы проводите эту неделю, и тип окружающих вас людей - если вы хотите пообщаться с дворянами и другими представителями аристократии, вам следует поддерживать более дорогой образ жизни.

Таблица ниже показывает стоимость образа жизни в серебряных монетах в неделю.

Ваш образ жизни оказывает большое влияние на ваше физическое здоровье. По окончанию продолжительного отдыха обновите свое количество максимальных хитов и Костей Хитов в соответствии с вашим образом жизни.

|!Образ жизни | !Стоимость в неделю (см) | !Максимум хитов | !Кости хитов |
|Никудышный | 0 | 50% | 0% |
|Нищенский | 0.5 | 50% | 25% |
|Бедный | 1.5 | 75% | 50% |
|Скромный | 8 | 100% | 75% |
|Комфортный | 15 | 100% | 100% |
|Богатый | 30 | 110% | 100% |
|Дворянский | 70+ | 120% | 100% |

''Аренда или собственность''

Приведенная выше стоимость образа жизни предполагает, что вы снимаете свое жилье - комнаты в постоялых дворах и тавернах, хоть и удобны для путешественников, обходятся недешево. Но иногда персонаж владеет собственностью, которая предлагает определенный образ жизни - //бедная //крестьянская хижина, //скромный //дом или //дворянское //поместье - и была приобретена, построена, полученная в наследство или в виде награды.

Если вы владеете собственностью, в которой вы проводите продолжительный отдых, стоимость соответствующего образа жизни снижается вдвое, но вам все еще необходимо оплачивать полную стоимость любого другого образа жизни.

Чтобы сохранять недвижимость вне отдыха, вы должны выплачивать половину стоимости образа жизни в конце каждой недели. Если вы сдаете ее в аренду другим жильцам, она вместо этого приносит равноценную прибыль.
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFDUlEQVRIiXWVe2wUVRTGf9NOu21pZ0srpYVCecRtKVJeVp6hotIGqNiEAFFCQggJAWuIRCMGY5QYCEESCULQACYGIwWNkgoWH6iIIA8V2QC1xdQWSMvS5/a9c2euf8zszuxSJtncu3fmnO+73/nuuQonLvGoR5ame4CFJ9pExRdBY84vupmXruDtMeman6A0LveqF1dkql8DP6H5Bh+VRxkKRJamq92GXPfif4PvnLoXyqFfgJSAAkiQCmBaaynxVOR6AkfHp+waFq98iOYLDQHyO0isQMVElmXk77g3eHxbfX+RldxOGGGADWgCcWDa85R4duSnXX9zTPIqNF9tNEjVBStIKsglmcW+2t6a+n/7MyzG0vrKtLNLaaPgvIsZ5+endvw6OX0xmi8iURyGAEMil2QWlNR2f19f15OBoYMwwDCs0RRgCDDDa/b/8BieC53zNzqGl/nbzxCsK3BAhIksH5Gw605f1blb3V4rwLCDDSxAey706HVXcouIReA7f6t3T0PwOMG6BAAVYdAyaGze6u8owjBsNSRIVx1U2FuYTsmI5Ig0Bxu6OVjX6cjolk3Ca1ebp6zOSdmcrfG+Irv+Saq42dF40t+Z5WguXQWWNJTnMU7zAPB3az9TH7PAXr7UzIHaVsccZqSAICUrp2cHqmbk5MUB5Sdvd2ZZMuhghEC3JTBCbJqYxjjNw/UHfSif32BadR3Kl7WEhMH2KZm2XCHQ7VghQA+B0DleG8hCyufVr1p6l9LZb/tecW3bAKAwJQ6AQ3Vt0DtovW/XudLSw7xcLwxPhPs9MQqY1tge4uTdriVqTWvvTIQA3PWQkXnlhSYqLzQ6wbYUk4YnWfO+AUsBOVRtJGcDwSfV+j59LCIUU0DpnA2kfeCcOr1XnEvGMA/+liA8CEYljdoN0NA7MEb1GKYXEXKxD283mlE4wZZpo9k2ZzwhXVB0ym+fH2eHsW5LNE2vimkE0XVtSDYRx1jrB59+nA3FFkDOscsQ6MLpAKbjSBeYYhhBNd+j3KkRYrJVeKJYWAytgJqK6ZQVjKKprZt51ddov9s+ZA2jJZdMSFLvqs+MSL2yV4QmR+sZveUzy2dSWjCKprYgeUfOQd9gdKMMc4klKiULRnovq8vGZpwm1bOWju6H2UhJmS+b0kmjCYV0tv98k6U5GooNrkhJ9Z026BmIcZYNmJnG0gkjT6soSvX6KTmBQz+2Z8W6CCR7Flh9LjExgUPLZxP7LPvkB6pv9tggZlT8xul5D4hTqlVlW9VA89Zluw9drNtNV59TQPvjz67dZmJDi1NgJIp0QKrvtxNxZ8RhgJbCW7Pyd6P5BlSETnZa8t59i55Y80rVb0WY7kKa7DzrB5QYljF2DT9hyRTJgfJi/yhv6gcAcQiBsuWwXjlj4qo1JZO6EKFI37JGV4sX4TtEd+6RyH3irK1bNKNr46yClWg+3QYJgSFQNn9U++mS4udWlUwOWElcicN3intuCLuRGs47obP62WmBwy/MXeS+guOcBDrKpn1Xj1XMLd63euGfDPM4LHXD+gkDhOm6HQ3nG28y+9eW/XV0RclTaL4rbnMovLTJ0tjVq+THr6r3OrrX7zznf3v/pVs5BDofPnBhr45Mp3J2YfMbC6a+m5uhHUbziVgHKqzYAIq7bzlJ5JHXk4Dyb282Lj3f1DKzOdifFx+naIZpBnPSkhvn52X/sbhw3CngGzTfwEP+tp//AW4GaurDf5PFAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFy0lEQVRIiX2WfXBU1RnGf3dzsxvycbPulkBmTDYis0mhAREpIk7jB4YSqI0zhQytzNhWx/pRnU7bqU5bp/xRZpC244zoWEGnA8iY2E6JFUFb26qV0AI6AiFLCJANgaQhm83ukg2759x7+se5+xHUnpkz5+w9532ec973ec+7Bm/8my9qqtXvA+58Iybb/5i0V7wvnFAQqhOKxEqvEf2WZfasD5r7gH9ghTNfhGN8Holq9ZspW31v42DmV/svZmqZtkEpUAYYSs9Bj+UltF9fNrbnhllbK0qM7Vjh7GdJug4Xw6NWBxq3XMx0/XxgehFpB7BBeTSg4WgipfcC4CjAgfIStjRWHX+6blYHVjgyk+T1j7QhoNqCy77cN3Uwci4dyJ8013JgynC/q5lk7nxFY2X80EL/Gqxw3kUebAWOg2oLNq2MpP4aOZMMYEuQEmxbj1KCLcF23LG424V1KejpjV93z8mJd0j2NxVIpEStm1269cJ056FIohrbAekUGV875ua2OxcghTvaIAV/+3S8+rfnk10k+0sBTByb0Yz95FMnY4uQjqau9PCXhX7qyk0AUsKh4/Qkl0amCy4Metk9z6LZ72N4SrBjKEn3YEq71DH4ydGR5u/Ulj851+I3hkqcLms/FY92n4jXoBRUmWRW1+E1PWSlw6W0oMHy6QAePA/j01DhRd03H4BYWhAsLwXg8Z5hXugbd2PssGHJ3LHOm2tDHmBd97nJmpxL9oQtvKaH185M4Nsb4YZ9Z7nvgwsA7G+6DoTg09tryUqb5ncH+NLeXha/M0AsnWXz4hrXdRmQgq7IWA1KfcPz59GptcTTbuAyNPv1qe8/PuYGPcu+MxPE0lnaGvwQ8LFodgXvDSU4eX4CZJbj52N09l8mWO6lY54fhNA9lqJ7ONHmOTg+tRQhQGZBShZ392PsOAYTV8DO6s0VBsFyL7F0licC+hCDiTQI6doJdg/FAWgJ+PRt3P73seQt5pm0qEcKrfO8/nPad0DBgVsaAOiK/JemCi2G3UMTGggFysG0pZar42hyFDiK6NTVOo9p29XaLTkZyrybkJIDrfP5+vzZRONTPPr+gAYBTFvLFaFvkiMxHEfbCgF2Fp/jVJsljp1EZK1Chrs3KSvlUNsCVoSCRCeu0LD3iAZUmsRnuwdROvO9tu2S2JrAxZG2nfQ0+jwXyBnkTlAKgx03sSIUpGfwMg27eyCVBik4fEn7fkOdX5O68SxxSVBOIUGFYH6ZOey5a3blkcJmAaWK6MZlhAJVvNt3kdv29EAynQ/wHy6MAxCyyrRbXSV9t2kOAG8OjOpvWf39a3Oq/2PeWx94m0rvA8SvgFK8fEeY+mAVQ7Ekv/tkkDXzghjKQbliOBAZpXc4RuuCOna0pnjon308e+uNfPMr9fQOj/PWiSigk5FgJWvnzXnbUInTZQ990Bfd+V5vDSjU5vX8v2Y89RrNoSBHv383Xm/pzLVn/wSjk+Ti+/CaJZdfal1abxq/6Lw68rN7t+3s6d/GZJqdH53SBvlXXs188mWGEwOX8D33Jq/cGgbgXCzJr4+dhdR0wcaq4JnljduwwlcNfvBL1Nb7S7d/fPboDzs/XIRj5BUDDvm6MaOGOHppRk4VrRuKFzetOvHI8qalWGHhQUqMH78qHr/5xo5NLQsTeZXZWf3UiGtzSBTVj6LRKdSYB1ctSTyyvGkDVlgAeHKPmfHE7yO72pat6mhZOIZjFwDtawDzc6GBpbtX6Pmmu28a29G+8p7iEuzJb7IlxmPbj77eftuy5799x8dU+tzCJFyAApA+gA3CLVyOBKucFx5o/WTX+pavYoWPzBAEGx9j5p8ChXr5R+bFeOrBLR8ef+bFw5FaxiaLgl9U2xUwp5pHly8Yebpl8ebrA9YrWGH5GUWy/uEiQ9fY/a1e/WkZsO7Aqejafw2NLh1JpkOmx7Cko5K1VbOit4fmHluzoGE/8BZW+OrnKB6A/wFTjXsOjK4VIQAAAABJRU5ErkJggg==
* удалено правило "Стресс"
* удалено правило "Психозы"
* удалено правило "Лагерная деятельность"
* удалены упоминания Стресса и Психозов из правил [[Отдыха|Отдых]]
* изменения [[основной деятельности|3. Выберите основную деятельность]] на [[Продолжительном отдыхе|Продолжительный отдых]]:
** [[Бойцовский турнир|Бойцовский турнир]]: "Персонаж совершает три проверки: Сила (Атлетика), Ловкость (Акробатика) и ~~особую проверку Телосложения с бонусом, равным результату броска наибольшей Кости Хитов персонажа (Кость при этом не тратится)~~ ''Телосложение (Выносливость)''."
* изменено правило [[Очки героя]]:
** изменён способ получения очков героя: "Вы можете Заявить о неудаче, чтобы получить Очко героя. Для этого вы должны озвучить своё намерение Мастеру и дать помеху на свой бросок атаки, спасбросок или проверку характеристик (у броска не должно быть помех от других источников), основанные на ваших особенностях личности (чертах характера, идеалах, привязанностях, слабостях и т.п.), либо принять решение, создающее для вас нежелательное препятствие."
** удалены опции //''"В этот раз наверняка."''// и //''"Я с тобой ещё не закончил!"''//
** изменена опция //''"Даже не почувствовал!"''//: "''Пока вы дееспособны'', вы можете ''в свой ход'' потратить одну Кость Хитов'', чтобы восстановить хиты. Совершите бросок кости, добавьте модификатор Телосложения и восстановите хиты в количестве, равном полученному значению (минимум 1).''"
* изменения [[Рас|Расы]]:
** изменены "Призрачные видения" [[Призрачных полуросликов|Призрачный полурослик]]: "~~Вы можете видеть призраков и монстров из других миров. Ваше зрение в радиусе 10 м от вас распространяется на Эфирный План, Страну Фей и Царство Теней. Вы можете легко различать эти планы, так как объекты и существа, находящиеся на них, выглядят для вас прозрачными. Кроме того вы можете взаимодействовать с объектом или существом с плана, который вы можете видеть, в течении одной минуты. Эта особенность не позволяет вам перемещаться или перемещать что-либо между планами, и вы не можете использовать её снова, пока не завершите продолжительный отдых.~~ ''Вы можете действием открыть своё сознание для видений из других миров. В течение 10 минут ваше зрение простирается на один из планов по вашему выбору: Эфирный План, Страну Фей или Царство Теней. Объекты и существа, находящиеся на них, выглядят для вас полупрозрачными. Вы не можете использовать эту особенность повторно, пока не завершите короткий или продолжительный отдых.''"
* изменения [[Колдуна|Колдун]]:
** изменения [[Таинственных воззваний|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=1448348621]]:
*** "Мистический взор": "~~Вы можете ощущать присутствие магии в пределах линии обзора и не дальше, чем в 6 м от вас. Если вы почувствовали за счёт этого заклинания присутствие магии, вы можете действием увидеть слабую ауру вокруг видимого существа или предмета, несущего на себе магию, а также узнать школу этой магии, если она есть.~~ ''Вы можете действием открыть своё сознание для обнаружения присутствия магии в пределах линии обзора и не дальше, чем в 40 м от вас. В течение 1 минуты вы можете видеть слабую ауру вокруг существа или предмета, несущего на себе магию, кроме того вам известна школа этой магии, если она есть. Использовав это воззвание, вы не сможете использовать его снова, пока не завершите короткий или продолжительный отдых.''"
*** "Обратный взор": Требование: ~~5 уровень~~; "Вас не могут застать врасплох, пока вы в сознании. Кроме того, ~~если существо в пределах 6 м от вас смотрит на вас, вы осознаёте его местоположение~~ ''вы можете действием открыть своё сознание для обнаружения наблюдающих за вами существ. До конца своего следующего хода вы знаете местоположение всех смотрящих на вас существ в пределах 12 м от вас, а также их отношение к вам: союзное, нейтральное или враждебное. Использовав это воззвание, вы не сможете использовать его снова, пока не завершите короткий или продолжительный отдых.''"
*** "Призрачный взор": "Вы можете действием получить возможность видеть сквозь твердые объекты в радиусе 6 м. В этом диапазоне у вас есть ночное зрение, если у вас его ещё нет. Это особое зрение длится 1 минуту ~~или до тех пор, пока ваша концентрация не закончится (как если бы вы концентрировались на заклинании)~~. За это время вы воспринимаете объекты как призрачные, прозрачные изображения. Использовав это воззвание, вы не сможете использовать его снова, пока не завершите короткий или продолжительный отдых."
* изменения ''Черт'':
** удалена черта "Чистый разумом" (двойная концентрация)
* изменены [[инструменты повара|Инструменты повара]], чтобы соответствовать черте Шеф из Таши: "Как часть короткого отдыха вы можете приготовить вкусное блюдо, которое поможет вашим компаньонам восстановить силы. ~~Вы и до пяти существ на ваш выбор восстанавливают по 1 дополнительному хиту за каждую потраченную во время короткого отдыха Кость Хитов, при условии, что у вас есть доступ к вашим инструментам повара и достаточно еды.~~ ''Этой еды хватает на количество существ равное 4 + ваш бонус мастерства. После завершения короткого отдыха, любое существо, съевшее особое блюдо и потратившее Кость Хитов на восстановление хитов, единожды восстаналивает дополнительно 1к4 хитов.''
* изменения ''Заклинаний'':
** //Рассеивание добра и зла//: добавлена опция "''Помилование''. Вы действием касаетесь существа, мировоззрение которого было изменено. Существо должно преуспеть в спасброске Харизмы, иначе оно вернёт своё изначальное мировоззрение."
* добавлено правило "[[Еда и вода"|Грузоподъемность и нагрузка]]
* изменения [[оружия|Оружие]]:
** [[Бонус владения клинковым оружием|По принципу действия]] изменён с "Владение клинковым оружием позволяет реакцией принять парирующую стойку, которая дает бонус +1 КД от рукопашных атак до начала вашего следующего хода или пока вы не потеряете это оружие." на "Владение клинковым оружием позволяет бонусным действием совершить одну рукопашную атаку этим оружием, если вы в этом ходу совершили действие Уклонение."
** [[Бонус владения стрелковым оружием|По принципу действия]] изменён с "Владение стрелковым оружием позволяет получить преимущество на первую в ход атаку этим оружием, если вы не перемещались с начала своего прошлого хода." на "Владение стрелковым оружием позволяет вам в начале своего хода снизить свою скорость до нуля и получить преимущество на первую в этот ход дальнобойную атаку этим оружием."
** исправлено отсутствие дальности у бумеранга (8 м) и дварфского самострела (25 м).
** необходимый разбег для использования особого свойства кавалерийского копья и эстока увеличен с 2 до 4 м.
* изменения [[черт|Черты]]:
** "Использование двух оружий":
*** добавлено свойство "Вы можете совершить дополнительную атаку оружием неосновной рукой частью действия Атака, а не бонусным действием, если вы совершаете действие Атака и атакуете оружием, удерживаемым в основной руке"
*** добавлено требование Ловкость 13 или выше
** "Мастер владения древковым оружием":
*** удалено свойство "После того как вы попадаете провоцированной атакой, по цели входящей в пределы вашей зоны досягаемости, вы можете передвинуться на 1 м не провоцируя от нее атаку."
*** добавлено свойство "Вы игнорируете помеху от свойства "длинное" при совершении особой атаки Толкание древковым оружием."
*** добавлено свойство "В свой ход вы можете бонусным действием подготовиться к атаке противника, уперев тупой конец оружия в землю. Если существо перемещается как минимум 3 м по прямой к вам, вы можете совершить провоцированную атаку по нему, когда оно войдёт в пределы вышей досягаемости. При попадании эта атака наносит дополнительную кость урона вашего оружия, а цель должна в спасброске Силы со Сложностью 8 + бонус Мастерства + модификатор Силы или будет сбита с ног. Если цель больше вас, она совершает спасбросок с преимуществом. Если цель больше вас на две категории, она автоматически преуспевает в спасброске."
** "Мастер владения контактным оружием":
*** удалено свойство "Вы можете бонусным действием совершить одну атаку контактным оружием, по захваченной вами цели."
*** добавлено свойство "Когда успешно берёте цель в захват или высвобождаетесь из захвата, вы можете бонусным действием совершить одну атаку по ней контактным оружием."
*** добавлено свойство "Когда схваченное вами существо проваливает попытку высвобождения из захвата, вы можете реакцией совершить одну атаку по ней контактным оружием."
** "Мастер владения луками":
*** удалено свойство "Нахождение в 1 м от враждебного существа не накладывает помеху к вашим броскам дальнобойной атаки луками."
*** добавлено свойство "Сильный ветер не накладывает помеху на ваши дальнобойные атаки луком."
** "Мастер владения метательным оружием":
*** добавлено свойство "Эффективная дальность, используемого вами метательного оружия, увеличивается в полтора раза."
*** изменено свойство "Вы можете совершить дальнобойную провоцированную атаку, если враждебное существо, которое вы видите, перемещается в пределах ~~вашей досягаемости~~ ''эффективной дальности вашего оружия.''"
** "Мастер владения цепами":
*** добавлено свойство "Вы не получаете помеху, если цель держит предмет как минимум двумя руками, при совершении особой атаки Обезоруживание цепом."


Во время продолжительного отдыха у вас есть возможность совершить интересующее вас полезное действие. Это будет вашей основной деятельностью на эту неделю, тем на что вы будете тратить примерно половину вашего дня, оставляя четверть на сон и четверть на мелкую деятельность - покупки, еду, общение и т.д.

У вас достаточно времени только на одну основную деятельность в неделю. Сделайте выбор из предложенных ниже вариантов или обсудите ваш вариант с Мастером.

!!!Результаты деятельности 
В описании каждого вида деятельности указаны возможные результаты. 

Большая часть такой деятельности занимает неделю (7 дней). В некоторых случаях требуются дни или месяцы (30 дней). Персонаж должен тратить каждый день не менее 8 часов на деятельность, чтобы рассчитывать на результат.

Дни деятельности не обязательно должны идти подряд – вы можете растянуть их на более длительный срок, чем предполагается, но этот срок не должен превышать требуемое время больше, чем в два раза. 

!!!Осложнения
Ваша деятельность может с небольшой вероятностью привести к некоторым осложнениям - вы можете пораниться во время работы, оскорбить местного лорда во время кутежа, повредить бесценную книгу во время исследования.

В конце каждой недели продолжительного отдыха совершите бросок к10. При выпадении «1» что-то неудачное случается в результате вашей деятельности.

!!!Примеры деятельности во время простоя
Эти виды деятельности подходят любому персонажу, который может их себе позволить. Мастер может ограничить доступность той или иной деятельности для персонажей. 

<<tabs "[tag[Основная деятельность]nsort[title]]" " " "$:/state/tab3" "tc-vertical">>
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFG0lEQVRIiXVWa2wUVRT+ZnbaboHOtktYWiyU59IHgrYUsKAVwkPaqv3BwxKJxhAUxTRG5aHRUH/U8INfgjGo/ECiUojSQBExkQQooBQkbEvLu4VCy7Z0u1t2251771x/3JmdmQKT3L333Md3zvnuueeshAP/4GkfX5qeAmDhgYe08mCEvdCo6TkeCZ4wR3h+stSxQlXOrhytHAJwAqo//jQc6UlK+NJ0ZYDxd6ra49sa7mlZiFHbqg5wGeBciCMkVGa7g/smpW4f6ZJ2QvVrjyupO2dCi99l3um197S6z2/EZiKmG2C6sUUS+0wF5rzOgREu1E5Pu7x1fOpqqP42p5JfGwEIy3jZ6OK81uixtlsxrwDlFohdTigxFJoiOBZMHxU6VZC+HKo/QZEMnQOMgpeNzp3fNvBX2/VHXlAGUAYwW88YoBOAUUBnojfnGQUYASjF6ZZQxrJA35+IXMu1lFAGXuFL2n53cP+Z1gGPODCs6QYI04VMBSAoMcAN2RgfD/R6dtyO1CFyLUkoYRTdcVa9JfBwpgAwLKTU0SrGpeDIHC8uLcrET4UZQIZLrBFqKSbW/k+a7j/bPUSrAUDi4avuyiuhjvpAyJfgm5uBIDg/Mj8T5TkqNKrjflTDRI8bGmVIOd4O9AwBnFl3xa3AWPV8ZnB/YVaODKCi/ka/L2GNyS/TAEKAVKA8R8XlnhhS9jVj0m9XsfFsJ5IVFxryvADVLOoIsSgkBHVtQR84f1X+vTtajv5BixpCxEEieM4f5cLlnii+anmQmNt1JwQAyB6ZZNyHTYFJISVA3wDqO8NlyrHeWBEYGeaq5fKV23HMuvXQopDraCyZAgBo6X0EEM22ZpzVLfnEg8hs5XpMmwBCHFxa8e9U/MvCKXijIAsAcOZOH9acuiksf5KBRmuPDY2XFcY8glfTXU1YR+xzBh1cR6A7DACYnaWitsBn3InmuIvEGUag6LpHSdJZBISo1ks2ostMJ+aYc1QdbRbrGSMQf7sEWxdMw2dNt4FB+rjnBpbEWESeluK6Kyw1PRg+JoCa7HyAwX4caukEAGzKG/t0zwnFZLfSKS8aM/K8tUid7hOC3S9PBV9fik2F2baoI8gfI5zvjQ6JaCIU0GzGMUH9S2M9/8qvTfAeRVqy0wrTYkqw/vxNAMDmkmmAxw0kS9hSnIMZz3ihaQR7WjttnlA43ozHjfLJY48qkKTD62aMC/7wd4sP3Bl+4BzoCuHghRtYUTQVvHp5In1rGsG2YxeB/kfO1M8BcFECNhRO6oEsHXbVRMfQhhXzsONS+1JEh4wMq4teZwBnONB8F119YcQH4xiIxXG8pR3FB8/gdHOHsce2X9dFS0tF/aoFNWm+GSclvPcF+PY3k3ZevNn04f7GmeKQJKzCcM/sj84ejY/XmW/XLg5smJtbBNVPZDAN0sd7yMbCKavXluaFRf3QbOnBzMxmtrWXATPFM8f8uiWF4Q1zc1dB9ROR6o08I1V/17a3rHhxVWl+0JHyGXmyAkoscEKN4kaxdtFzwe9fL1liL8GyHUT6YGfTz5Ulxd+sWXgRo1KcoJqzvljV0yhkqhu73lr2396VpXOg+s/D9kmoet8IDA7Ioue7P1LuhQbWfX0y8OWuc61ZCPbDKuTD7saXjo3z8rs2l86qyfaqP0L12//aGEpWvutMijYgvudTN4CKP650lJ++013UFYnlKLKkEp1HxqWldrw4IfPCKwUTGwAcgeofGg5ufv8DHmu2bXyvrKAAAAAASUVORK5CYII=
Во время продолжительного отдыха группа собирает три интересных слуха, пока персонажи заняты своими делами - возможные зацепки для нового приключения, детали о текущих или прошлых событиях, или даже дезинформацию.
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAE20lEQVRIiXVVfWwURRT/7bLQD657R6uFYqEl6LXSD1OwooBWTClSaiwGSkATEsUoSlITrUpEo+EjIcREAiKR2JhABApBCaK1GohAKAho5ATOFoXyIfWwtN3S9u7myz9m9nauDZvMzuzMe7/fe2/fe2Ng7ync7RFVgRQAs/d20dp9DnvsZ8LzAgb8dzh6Z44yOhbaVuuiLOsbAEdgB2N3wzGGkwiIqjFWHxMvLrkS+/DQjVgOBhkghCai1sIA0g3U5qZEdk5K3zB6hLEFdjA+nKTpZAIcAhBPZxasvxFreu/SQCkGWNIZhKEIFAl3yQQw2sT6goxzqyakLYYdDCeT7DkhhYQBUZ1V/uDF/ubw3wOZLrZ8cYAb2rdL6nrHpAEAZhX4uo8VBebBDiZCZIJRgHGI6qzCmeG+H8PtdzJBGUAZwChAKUA5wNQ3o+qMAFzNlKt9guPnu8fMDd3+AU5boUdCBURN9sgN1wb2nAj3+RNALhhlioh4pIxIUqrLeqMlFPF/fNlpgtM2MuFJZ4zVv/tHd6mnxDwwHk8GG8Fx7PFs7Jg6BmAxD1wnIxxvnfmnpDNK6wHAFM/lpr76l9OAvqhmvWY10cNEsLM0gFk5o1ESGCXPiPKSEEUYk+TOAOov3GqA05ZqAqg5cKknG0SBU6K5TgAWVyAUCyam4/kHZE4YQsgzFgNoXA6SrN8UjmRDiGesrzv756MnqjKGaWnqZo3KohQTu2fch46eQeQF0uQeoUqWJ5JOrpX+7TgOXO+tNpv/658mLY15VjAi3SY0Yd3vVZMBAeR/96fnCYl7ng71hshxOOI8bLUPkImgMa24tAITHACwZtp4lGb7sPbkFaCrzztnRKsXoXR0XYHL/dEJlsWYH5SqgoMmrMjG+fD21FyEOh2833oZSkjKEZIsP4xQYBTnfmsE5w5o3E62wvPmSmUQAFC676wMhzqT4SKa53yIvpwFY45VkGJcaya0yPt5nlDlpHuQl+mTGCtn6+0IxTkBiFXVmLurFS3tnUmGJUi4wP2p1nXrqXt9pzfReFHCE4iEVT919WL7yXYNWgK9/GgQt+8MYv+5q2i51SM9GhIBl+iJsf5fDNETXmRsPdyE7v7EjwbX4u6Scy0Eaxfj/PUuFG9t0YC5ZqRK5awMiIYFdSYM4+DykvERmYIUiKuZECBOktI4MbsGJIpXS2FKZIESghVl+bdgGgdNY/Xu6Jqy/I1IH6lym2otYoiy+m48GsKuM21abWj9jRLZbnwpWD09uBF2MGqCUozLSNu0ubL4HFhMddi4LMYkS4kqUoqX9rdi3ZGQ1pU1AkoATrC1pjw03u/7BABM0DiMNxvJyqmTFy+rKOp1+1RS49MB9DWlAKfDyJbPKetdMb2wDnaQKBIpYNRvC39ZXV65pGJKRCoSz0JCNDB3n8nhdmK190JlWWT7szPn6FewqYfBeH3Lma9qZ5RvXvrkr/ClKuuYvAGJavuUexeZ6yVnQEYaPl1W9duOhRWPwA6e1mvKwNLX5Ip5dSA+f8O60d23fN3R0AefnbqYg3+7AQNasXqyGOvHyulTbr5T8dBHuZn2F7CDFEMeA3WvaK1dJOW6aGxIBVDz/YWO+cevdk676QzmWSZsyoWTk5HWMStv3Nl5U/IPAfgWdjA6FNx9/gezBqjUEb+6wwAAAABJRU5ErkJggg==
Второстепенная деятельность - это занятие, которое занимает короткое время, от нескольких часов до одного дня.

В течение недели продолжительного отдыха у вас есть достаточно времени на выполнение двух второстепенных задач. Сделайте выбор из предложенных ниже вариантов или обсудите ваш вариант с Мастером.

* ''Встретьтесь с кем-либо''. Назначьте или отправьтесь на встречу с человеком, группой или местной организацией.
* ''Торгуйте снаряжением''. Купите или продайте обычное снаряжение местным торговцам.
* ''Расследуйте слух''. Потратьте время на изучение какого-либо слуха, чтобы подтвердить его достоверность.
* ''Обновите финансовые обязательства''. Если у вас есть какие-либо финансовые обязательства (вложения, собственность, бизнес и т.п.), потратьте время на внесение интересующих вас правок.
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFK0lEQVRIiXWVaWwVVRTHf/P62tLSvldaeLQILaC0ZasWKIQlIiIoULWJLBJCSAyGSFhiRIGYGPkgpolEFpe4EVdkMVFEENeGRRRBQCrQ0ggttAKPpSstnbmLH2bezLwCN7mZOTPn/P/nnHvOuQY7DnO3padmJAOTdlwXZV+1yLH7LJWXBeFmTfP4JKNuZij4+6ys4DdABaH8zrvhGHci0VMzgq1SPzO3tvPV3Q2dObRL5wdgKPupDUBBagJlfZOjnw9ILe+eYLxFKN+8nWT7Hw6Ath+PZRasbTC3v1xzs4gO6YBhA2rDYfL0UdolW1uQfnJ1v5Q5hPKr4km2/uZFMK1nyeAzN/dWnevIBB+BAk/WvpC1I2qHVDOhIL3xwNCMaYTy3RQFkBqkQk/rWTi+qvWnqpq2TIQAoUFKEAKkAKlsWUpbFgKEBGk5/2354KnGHo9W3viBlrOFPhKJLo0kll9s33boTGsYKUFZrpEtCw8o9l0Im0AIb0sBwuLHk9fC6863bKflbCJAECG43CmXr/rnRhFSuWG7aQBIS2DDgFAsR3aenTNZdvyaUwgxO9t2xdFLw+flpC7PDvGGoZuru5WdbqzbWdkUQSsfTsxAs7E4i6VDsroWjU32SaV9VtopADQoA5DMLs6JbhuRkxcESneea4ogLIdAeWfrkBZnJNmAX56CW8pXadKLIi4DNsb2qmhkW3H248GvL9+cQWO7U0F4HsX6QGv6pQa53m5Cm+n0iXZKt0t1+QjQGm50srO+eXpw77X2kQjheaN1HAFak5eRwsloG8sKezCnfwYAG6ujbKu+ejuwPyKtqbjSMipY027mIswuSriejs0NA1AUSWNDJA3TkiQlJjCuXwZl2WnM/bnad/B+Mpu8tv1Wv0CCUmEsAZYFwtmWBcIEYTEg0cC0BHtrrmC8WUHypn2s+LUagKeH9SGlV6pjZxKPY4IQBJUKB4NStmCZIe88dFxEWyrr2VJZH/dv3ZHzPDUwk7H9e7F+UE8WXXDS5haNZ6+lbAkUJAcuIgRYpu1FzBO/V3FR2rr7Lly1K04px870dGP6psl93YL1gYd7dT/iAgjTCdsCab8fmjMKvXo6L43o6yMTlN6bDcC/jW0esOlzynl/sHf4z8ATuZl7SEt0RoN1m/c7q/4DYOW4QRTkhCAJVo3OZdg9mZimRfmxcy5xbKy4O5zCjIG99wQxjF0Lh/eJfvjLqYjdrcSVYfmBM0zOzWTK0Fyqnp3sdrppWsz8Yj80tXl9pZVXnVqxaETeVQLGroQ1bRGxe9YY1p2oncrNTnsYagVKgZKgFJ/9XYvZ0UFttInjF65woi5KyY5DnD132RmeCrQzTLWyd3oK386esCY9Mmx/EGGRnZ6yYdOU4fOXbj1YFNfx2mvI1ysqvYnQpYLiZp7WYGjeKS2p7BNOWw8QQJgYL2y2lowYOGfBQ4Ob3XoXnV5u48b7HUa8O+pt3YVTipufG1M4m1C+ZZNIG8hY9l7Vx9NLHpk7cWjUVpa++8MiphdHpIS9XQck8yc/EP3gyfFT/FdwwAOzMBa/dXRL2biSTfMmHaN7smvoB3FvRCHBknbUUkAohbcXTD3+6ayJownlH8G3DOYudmYVELCnq37/+WBDY+vC1/ZXvvLu4TM5XGki7m5XCgznzHpnsGTMkEsrJ96/pm9m6CNC+YIuy2DWIjB8w1Hjynrzi92A0u9P1804eOHyyIbWjrwkg5BQqiUnPbVuQl72X9OG9N8NfEco/1ZX8Nj6H1ECegqEk3vvAAAAAElFTkSuQmCC
В конце недели оплатите долги и получите результаты своей деятельности. Проверьте излечились ли ваши долговременные травмы и увечья, и начните готовиться к следующему приключению.

Сверьтесь со своим листом персонажа, чтобы определить, какие особенности или умения вы восстанавливаете по окончанию продолжительного отдыха.

Уменьшите количество проваленных спасбросков от смерти на 1.
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFLklEQVRIiXWWeWxUVRTGf286TBfamXYoLSVAocKwFymURZRKZbGUkBqhBALBmCbIJiagQkxc+ANDCEaDNiGAGDVKqVGRXQxEQApSF/YpYEuB0m1omSkM9G3XP95786YD3GRy7333nO8799zvnjsSlWd4WhPTU+OBKZV31ZIfQtrE3xU9uwd4goLgJJdUP8ftrJrbw/kzcAy3r/NpONLjJAIxPc3ZoYnX59/o/HB/g5xFWI1eBnR7nhhHSR9Xy7cDkjZ2j5M+x+2Tn0ByGoSwMWZ4B29okHe/dz2cS1i31yI2wiQy57rZJ0lsGJxyfl3fxHm4ff6uJLuqIpGJovT8oVceHPLXPfAiJOO7kEwgHYTDJIkitGzMQCYOTm4/NTy1CLcvkiIHuga6QBSlD5nkv3/Ef+2+F1UDVQNFB1UFXQNNgK6CZs1VY021xgqoKlWX2tNmXGg7TOjqEJtE1RDFPbttvPWw4tSVoMdwMB01FTTNALNAo3staq6qoBlEv54PeDbXhXYTutrNINFUmjq1VWsv3s19MqACmkpGhpMTL6Tzb2EvvslLg9Q4w0axSBS712TWVN8Z2fRIXQUgiWBNQsnl9vo9F9syEGaarYMVxmTpQA/l4zIBOBd4yKj0RACWn2mk3N9m2EUEokXGpaN7tVTkZWVLIlgzR/qlrpIOJUo5mn2YLonOVwcBEH+4DlrDkOyis2QQHbJG+veXbJKIIHQDJyUeMT+31PlT04Ni7j00DfSuctV1lg9Mx+WMY311AzQGDec2lYUnbvCiNwm6xxHxN3ce6dtk9twOznQeCoTHoKomu8CWrmE8KdUFwAfXA5QOcFPQI4njgTAVV5qpFNjBWWNhZcP4dqw5NNZ5LSz3Q+187BwspxFeI/8Hx/bm5YE9AVgGlE/sx8qT//HdlWYbODZdQqc2/Kivw6VrHlsd5k9RQJGNselYmJ3G6mNXkXZWsbX6Bt7u8ews9EE3TD/ZlLAc5a+SqOseR5ymh2xg8xchk5FMkmO1AT6proPWIG8c9VN1oxVXNyeL+6ba8pXlmGBldE0LOQbFS7ciUSuyHYlp2NFp1LvN527azrLMxaZ7AGTGO0x72bw3ik2qKOQkOG87Cnsmn+0avWqnTFU5Xt8KwNx+aeZOjfWRGW4A9twMGN9kO3pkxZyrTM70/OmY3c97ALfLjMS4rfaWZdaevwXA4rz+FOX0AEVm7bhsJuRkIssKNbXNdM1E1Pl6EijOyTzgRJL2lo3o3bL96KUMhLBLtyXHxjbW7TvLx7PyObBwslXzkGWFcdt/M0pPRLrR90ywJC+7FYe0V2LFehrXzl6TVX5kE/fudzGyZSkgI4Xt442bX9vWwYaaO9DU3lX60WNPdxrWvPJO7755m5yoCr1SEj/bMm34opUVf+Tab0eMY0OAsh8DMQEQZRtFIEH5rPwLvT3JnwI40GSk1TuUFXnPzFtcMDRoH75V8k2lWBVajaq60WuRyq1RNnV0cOn4IaW4fYpBYgJKb271fzUzf+q8gmEt6EoMiF3yu7wz1tujWAFpLHrp2ZZtJZOmRT/BDttJQVq2pXpXyXP5WxZM+ZvkBJvAArF2oWj2W2L5uxP44rXp/3w9t2Acbt9ZoprEgmWR/wQgjCq/7S1nQ3tH2YYT598vP+3PovketpEwirVknkOGhxUThjW+WzDqoz5e9w7cPpWYJlG6JEZJdi++fDsBmHXwcn3xyZtNYxpDD7OdDtyqLkJZKUn1z2dn/lU0rP9+YB9u36NYcKv9D+7khlZT2eZWAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAEs0lEQVRIiX1Va2wUVRT+Zjvb3b5mlxZK21BaLS61CFqxNgVDhZTGPqJVeaT4A2OaGAimJtr4KBqMBEMQowEN0aD+UENbAgpSSkwkRuXtI1RhadWy0lpc7GN33T7mvvwxszN3p+BNbuaeO+d837nnnHuugq6zuNUQtX4PgJVdI7TpYJRVfUN4kV+Bb1wg8qCqhB73qafX5qifAzgJLTB9KxzlZiSi1q/GmHiq+er0tmNDej4mKSBgTEvJFNIVNM3zhD+5LX1nRoqyF1pAn0nSeQ4AMw0B8VD2wh1Demf7bxNLMEFtQKEkg0MA3PyCA+kp2LEw6+JLhWnroQWCySQHvgeEC4CAqM+pCAT/7en/fTI7yWMuJALpOFyShQCEQFVp1tipRf46aAErRC5wAXAGUZ9TujwY+6q/L5YNygDKAEKNL6PSNGVKbJna/07/Ojarrnf0BKJ9pTYJYRCNc9w7r010nArGfGA8GZTKQMzeozIZkfYpei7+49s9EO1EtM8NACo4wfVp1vriL2NLwFhyaIRAbr4X7bleKUoCioAVprf+nsDVobidK/P7/IXhxU/kp7fmaXhTFY8VepsujbUhqpuZF/ZXAFtnp+KZ0lnOgrHG6BTBthA1ki+EXSRkCq2XbrR1ePv2KiJyZY1yZKALMWI6JxGBGwaWsbH3aIkfh1YUITQ+ieKDV2wCyTlAAFkeiOYl69TDw/EGjE9Kpcltb4SQAAAIDnhUHFg2DzplKO7pB6g+E1xwYz2q44vBSL3aMxJfaihC8tY0SPLO2OteWYRUNQXbz4aAkZipx618WWQm0dfh6H1q/wSZD0ptRYtIMkoUg9+DupLZGI1P45UzoZucVMxwdCA+VaiqjPlAycyYCj7jRMcrFwAAdpy9ChAzTNbN58k5NYnTOPepbs6ioLpmgcnhQrJnq4pzoBOK3ecHHGGU9BNk5j5lLKre4XFdA6GLZhg5PNpYlo9Ut4oTwb+MZN8sZ85wc44FXnXQtWpO5nlQAhBiGFMCW7bXy3MzAQAdl4eMm+34D0IAXU9eU4oVc33n1IfnZ3cj0/0kxuJmRTiqy5SrCo2e+VFwENBJcqla+lLxAEBOJhpun9vtgqIcbVlcEAbRDWNCAZ3aHlFjr0BLMwwjccl7s3dRqYdZ0dCxqbzoBlzKUZfS3jH1ennxLmS4TSXnNAgP//wHXj5yxgTUjZnQJzrAzFAlCDM82Fq5cBe0wJQLjCAvK+2dPTV3XbS6quydCdBy6AzeONkrgVOz+5odmEidm1O811jRW+DLfBsAXCAUynP7yZZ7S9ZvrL4zYpPojhaeADZlLj0DjqehZXV5ZFNl6TpoAWKQMKMKlNZ9wY/rK2qaq8vC4P8DLq+JNCkDGMOGmnvCHzyyfLX8BLusF45SKJv3XPisaVnFng0rf0SGJ/nhcoJTCnBmnIgxQPPi3Y21P326pvp+aIHzkIaC5s22ZPYo8f6z6tBYrGX7t72v7jt9OR/hcdivluPi5fqxpaps+IUVd782L1vbDy1A4RgK1j4NKIk7kWgNxlp82OYF0Hj8Uqjhuz+vLx2OThSluBSNchEtyEoLPVCU90NdWfExAF9CC0w5wRPjP9H/hnpSGUqbAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFL0lEQVRIiXWWeWwUVRzHP7Pd3nS2bGXbBUoBZVsoIoeFQFUEC0K5GoMQCQajJAYUiAFBNKL4BwbRRMMRo2BM9A8OIyByCCFEEJBLgQq0oBxCS6nQ0oWW7sx78/xjZnanBV4yecfvve/v/v1GY9MRHjbU6OxUYMSmW6Lih6gc+qtpFWRrBO5aNJWmaFcm6/7DL+b4twD70COxh+FoD2KiRmf770j16kuXYx9ur4mFaVGA5VJBafZeaZChUdE1rf77HunLM5O0VegR434mG3+3H7rvxwQLl9XENr534V4/WizQHDClEkzA3luJd2RqLCvMOr04P30qeqSqLZP1BwEfKIUqzymJVDXvuvBPS9DFigOhEtKjHF7OrJRDVwwtzGo8VJw9Fj0SN5EPqUAKVHlOUWnVnT0Xqu8GERKkBCnAkmAJey+cM5fmfpYAIUBIDp9p7Ph8ZcMvRM8XJZgIgRofSl5+9d6GQ1V3AljyfhAhQJoOIwHCBGkkzoXp3LXXu0/fDHx2KbqR6Plkm4klqYvJee9UNvSzAVxAWzIX4P1IJidH5nLyuTwOPB0iP5SaEEBIm6npvjdYcLz28bpWMQ9AU03VaRVnb1/ZWtkYsm2sPDa27b2kT0eW9u+EISxqmw26B9Jsh24+D1HT8wZQ0vGbZMqAcP2GgeECHzB+69+NobjawmMiR7K5hdkYQpK66Rw9fqymeM9FALb37wTCABFzzGc4GDEwBRur6kMoNcG/+XrzOG7f80SOlZBMKQhlkJOezMGaKDS3glKcvdwA9GRIbqYNqixPlJHYNxhsvdZU7tt1q3lQ3InCAFMmNBICapowhKS0i87gzpkgBKtLwgAcq42C6Urvfq5vDDAN9t2IPum/0GJ2wzQTCdbGvvY6dfNf3Cov4kh5PCqprIsydm+1o4k3b9q+v9jSmu9LsqwAwrQlMt1wdPbCgGTFzv5hgpmpGKagsq4JgMKcDOb3Cnr82A5D2OsUywr4/VJEMU09bsu4BvY8vVeQMb1CHL58k2GbTti0YAaxGcP4dGRvPjt9De7FPCVGeSqChSZl1FeY6rsat6fp+YStyfSejwDwwdGLCVpdE1vOXANgYe+Qx4dGAkcYYAh6pvmv+UZ26nAMU9iqSueiNONq6ylJTg2TbRyc7ZznpPjAcO4bIiGIc/ZMbuCob2K34A70ZBJ+EQm7miZbqmsBWFvWB5I1ME1m9g3z7GN5ACw6dfkBWjgVIzuNcT1zd/jRtG0z+3auX7v3jJ3xlteuik/2V1GWH2RUcTfU4gq8492fjkBNI+BkubLatIRZA7v/h0/bpjHnI64vmrggvGb3Cm63EG9OVlsHTujdhUmO9JpSvHb4PNxobFfqPWs9g5oFLyzsnD9whR/TJC8r/YuVo/q+PGfDgX5Ip1/gjTTFttOX2HbqEm7fsMmeDI9vbfqa8YMrOwc6fA7gQxpo89eZbw58dOqM4cVNdva70eLJ/PY1zTI9bcDtMfb9maMGNM0aUjQFPWLaTBwAbe6XVd+Wl5RNHV5cj/UAcLdfxHuMdMqH6azteXpZ//qvJ5WO8rZgn1cSbfaq4+srhpWsnDbiDzqk3t+4hGw7S0m8yenprH5l9J/fTR4+GD1yzBsgGtPeSDjLsbP66i1/TeOdmR/vr1yy+si5MPWNHnt7KgJAboDZQ/pcXzz8iaVdg/o69Iig3dCY8nrbnwK3yAHqm7fTgPE7z14Z99u/dYOuR1sKknyaLi0rGs7KuPJUQd6JsX26bwd+Ro+0tgd3x//4XopinybJtQAAAABJRU5ErkJggg==
iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAFQUlEQVRIiXWVe2wUVRTGf7PdvtvdskAfWNwisoUWeQoEUBGwYKFggxZEohhDQiQoMSJijEb9g4QQjQQhBpUYwYSHERF5CAZjlIeCQilgoYVSoBSWQrtbu3Tnzp3xj5mdmS3hJmfn7tw73znfued+R2HHn9xvGNPy0oHJO25r1d9F5fjfhB7sDf6IQWRimtL8nM97tKa39wfgV3yh+P1wlHucGArGdL+3UxqvzL8c/2BPS7yImLTWAHTAYz4NBbIUqoszwlsGZK7OTlE+wxdS73Wy/ZgFYIACxvRA6aqW+PZ3G2LDuCvN93YAOHuxHOqKOc1SWFWae/qd/pnz8IXqk51sPWxHZlT2GROq79rfcDEWsEF1IzGxmdr/DcVxaJg/40tz2o+U51XiC9kp8qAbIDWMyj6DJ9Z3Hmw43xlAk6BppunSNGmA1EFqICX2Hmnt0wRoGkfPtPeqOHPnZ6IXBjtONIlRlZ+6+mps25F/o34HVFqAFogUJpAN6lqXImn+y+k2/8dN0e1EL6SaTqTgRlwuW3mmfZgNnACTEqQKKZK15T5OTSnk1JRC3ivNhmzMfSIRgMMGTWX5idZHbnRrywAUI3I+o/pce/Ouuo58MFw5NmxrmhWkxJcOwOVINyX+DFRNkr77IkQSxSTB8DjfoTN3ZGF426iioAeo2tXYkW+nw47IZLNkYC4lvnRuxwTK9/UM2Hme8oOXSPOm0DSlv8VCNRlpcctU0ATb68P5GMYs784bXTOJxKxKkS4WCqAzsyADgPXnwnAnBhica7pDc0chJXlZ0CsVwl0uBokMAHdUdl2LzPDsb4uNRtNAxE0WIsEmDpqgODsVgB/DnSBUc10KjlyPAvB8bqrDvKcJwaFw9FFPQ0x9EKEmH7iw6AvB2bb/AFge9Dt7hGB6sBcAkwKZpmPhALsdNXV19/em6NKPprlouuhisK4hzPyyQuaE+rIvzcO3jW2sGFlMINssBMWQJmBSqhzL1HW/J03qUTsNbrMO72jjTV7aW0drZzdPDypgc2U5pb2z2Xb6CgAX27usgxck4VgXVZMy6h2UrlxFE+WJyJ2IAMOUks21V9hce4X8B/IYke7lQGOYjVPNC33qdqfFJLnsE3L0cIb3mmdK35zjZv7U5EiEyaS4IJu6heOpGBAgfDnMgfMtIFSeHVoMwMHmMMQFqCqoIvl8NMETBf6/PLMfDOwlNy35ftjVoXHtZoRQn1w+eTwEaQqoggM1YwjkZLLmUC10dPXQL9d9y8tk5kMFe70oyu5FQ/uFvzx0Nt8UVz1ZWYXKN8cbWTRxCMbKalu+z15rY8X+2h7qoLtSDotHBm/hUXYrLP2I1pWzlxdtOLCGjq6EZjsSn8h1QS5rhgfplZHG+trLnLx003KgO47spwG+LFqWz1nRr/+oNV6koDA3c+26iqEvvrb18LCE7thlnPjoehtvtdxKfpfUxFxFA2yoGlvXz5/zqanCQkV5c5NYOmrgvIVPDokk5TRJ2l3ynjTvIf+aZFHFqMir4wbPxRcSltSbG5XXP6//esaYp+ZNKgvboNIt39KRdF1z9RppiaPpdMHUEeEvnplQ4W7BHqd3aChL1p3YWj1hzLoFk/8hx6o4KR1WwtUR3YFICb4M1r887eSWmklj8YWO4xoKLyxx9XKzpIyNb3hb2jsXrfr99PsbjtUXcbM9+XDd8wI/S8eVtb49afiHxQHfV/hCGj2GQs1iG9ypJgAdY9OKDKBq37nmmX9cuTG6tfNuMEXBJ3UjWpSb1fxYsODvyrKSPcBP+ELdPcET438CoZGLfBT7FQAAAABJRU5ErkJggg==
[img width=410 class="centerme" [https://i.imgur.com/HMZtQWM.png]]

<<tabs "[tag[Ааракокра - описание]]" "Описание ааракокр" "$:/state/tab1">>
[img width=410 class="centerme" [https://i.imgur.com/PcaXX4K.png]]

<<tabs "[tag[Аасимар - описание]]" "Описание аасимаров" "$:/state/tab1">>
[img width=410 class="centerme" [https://i.imgur.com/IlrBIgX.png]]


Аасимар–защитник наполнен силой добра чтобы защищать слабых, искоренять зло где бы то ни было, и неусыпно стоять на пути тьмы. С юных лет аасимар–защитник получает советы и указания, которые побуждают его противостоять злу. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 1. |
|^Сияющая душа |^Начиная с 3 уровня, Вы можете действием высвободить божественную энергию внутри себя, заставляя ваши глаза мерцать, а два светящихся, бестелесных крыла вырасти у вас за спиной. Ваше превращение длится 1 минуту или пока Вы не закончите его бонусным действием. Во время превращения у вас есть скорость полета 6 м, ваше сумеречное зрение заменяется ночным, и раз в ход вы можете нанести дополнительный урон излучением одной цели, когда вы наносите ей урон атакой или заклинанием. Дополнительный урон излучением равен вашему уровню. Использовав эту особенность, вы не можете использовать её снова, пока не завершите продолжительный отдых.  |
[img class="centerme" [https://i.imgur.com/nCiHJ42.png]]

Аасимар–каратель наполнен божественной энергией, которая пылает внутри. Она подпитывает сильное желание уничтожать зло – желание в лучшем случае твердое, а в худшем – всепоглощающее. Многие аасимары–каратели носят маски, чтобы оградиться от мира и сосредоточиться на том, чтобы сдерживать эту силу, снимая с себя маску только во время сражения. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Телосложения увеличивается на 1. |
|^Испускание сияния |^Начиная с 3 уровня, Вы можете действием высвободить божественную энергию внутри себя, заставляя себя излучать испепеляющий свет, льющийся из ваших глаз и рта, и угрожающий опалить вас. Ваше превращение длится 1 минуту или пока вы не закончите его бонусным действием. Во время превращения вы излучаете яркий свет в пределах 2 м и тусклый свет в пределах ещё 2 м, и в конце каждого вашего хода, вы и каждое существо в пределах 2 м из вас получаете урон излучением, равный половине вашего уровня (округленного в большую сторону). Кроме того, раз в ход вы можете нанести дополнительный урон излучением одной цели, когда вы наносите ему урон атакой или заклинанием. Дополнительный урон излучением равен вашему уровню. Использовав эту особенность, вы не можете использовать её снова, пока не завершите продолжительный отдых.  |
---

!!! [img[1.png]] Заклинания источника
Вы узнаёте заклинания источника на указанных уровнях чародея. Заклинания источника считаются для вас заклинаниями чародея и не учитываются при подсчёте количества известных вам заклинаний чародея.

Когда вы получаете уровень в этом классе, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний волшебника, колдуна или чародея того же уровня. Новое заклинание должно принадлежать школе Очарования или Прорицания.

| !Ур. |!Заклинания |
| !1 |//диссонирующий шёпот//, //осколок разума//, //руки Хадара// |
| !3 |//обнаружение мыслей//, //умиротворение// |
| !5 |//голод Хадара//, //послание// |
| !7 |//призыв абберации//, //Эвардовы чёрные щупальца// |
| !9 |//ментальная связь Рэри//, //телекинез// |

---

[img [https://i.imgur.com/lYaBvye.png]]
Азартные игры — отличный способ заработать состояние, или же быстро его спустить. 

//''Ресурсы''//. Эта деятельность занимает одну рабочую неделю и требует ставку от 10 до 1000 см или больше (на усмотрение Мастера). 

//''Определение результата''//. Персонаж должен совершить серию проверок, при этом сложность определяется случайным образом в зависимости от особенностей конкретной игры. Часть риска азартных игр заключается в том, что никто не знает, кем может оказаться сидящий за столом. 

Персонаж совершает три проверки: Мудрость (Проницательность), Харизма (Обман), Харизма (Запугивание). Если персонаж умеет пользоваться соответствующим игровым набором, это владение может заменить необходимый навык в любой из проверок. Сложность для каждой проверки равна 5+2к10, и для каждой проверки она рассчитывается отдельно. Для определения результатов игр используйте таблицу ниже.

|!Результат |!Исход|
|0 успехов |Потеря ставки и долг в размере ставки|
|1 успех |Потеря половины ставки|
|2 успеха |Возвращение ставки и ещё 50% от ставки сверху|
|3 успеха |Удвоение ставки|

//''Осложнения''//. Азартные игры всегда привлекали сомнительных людей. Возможные осложнения включают в себя проблемы с законом и общение с различными преступниками, которые связаны с этой деятельностью. На каждую неделю, потраченную на азартные игры, существует 10% шанс осложнения, примеры которых можно найти в таблице ниже. 

| !к6 |!Осложнение |
| 1 |Вас обвиняют в жульничестве. Вы решаете, действительно ли вы жульничали, или обвинения ложные.|
| 2 |Городская стража устраивает облаву на игорный зал, а вас бросает в тюрьму.|
| 3 |Местный аристократ проигрывает вам крупную сумму и громогласно обещает отомстить.|
| 4 |Вы выиграли деньги у члена гильдии воров низкого ранга, и теперь гильдия хочет вернуть их назад.|
| 5 |Местный криминальный авторитет настаивает на том, чтобы вы посещали только его игорный зал.|
| 6 |В город приезжает игрок, играющий с высокими ставками, и он настаивает на вашем участии в игре.|
Все, что вам нужно, чтобы заработать много золота, - это немного золота. За исключением тех случаев, когда все, что вам нужно, чтобы вообще не иметь золота, - это немного золота. Хороший ли ты игрок или плохой редко имеет значение, потому что никто не может предугадать капризы Госпожи Удачи. Иногда ты на подъёме, иногда нет. Но суть азартных игр в том, что кто-то всегда готов сделать ставку.

* ''Владение навыками:'' Обман, Проницательность
* ''Владение инструментами:'' Один [[игровой набор|Игровой набор]]
* ''Языки:'' Один на ваш выбор
* ''Экипировка:'' Игровой набор, которым вы владеете, счастливый талисман, комплект дорожной одежды и кошель с 15 см

!!!Умение: Не будем о шансах
Шансы и вероятность - ваш хлеб с маслом. Во время простоев, связанных с азартными играми или расчётом шансов на лучший план, вы можете получить твёрдое представление о том, какой выбор, вероятно, является лучшим, а какие возможности кажутся слишком хорошими, чтобы быть правдой, по решению Мастера.

!!!Персонализация
Некоторые играют из необходимости. Другие - от скуки. Третьи становятся зависимыми от острых ощущений от выигрыша или проигрыша всего по велению удачи. Для некоторых азартные игры - это не столько случайность, сколько поиск каждого преимущества для обеспечения результата. Лучшие игроки могут проиграть все, а худшие игроки иногда выигрывают. Тем не менее, вы всегда можете отличить игроков по их взгляду. Госпожа Удача преследует их.

| !к8 |!Черта характера |
| 1 |У меня есть план на каждое непредвиденное обстоятельство. Ничего не оставляйте на волю случая! |
| 2 |Каждый медяк хочет быть серебрянником. Каждая ставка - это возможность. |
| 3 |Я один из любимцев Госпожи Удачи. Все мои начинания обречены на успех. |
| 4 |Я так много проиграл в азартных играх, что теперь отказываюсь тратить деньги на что-либо. |
| 5 |Ничто не определено. Планирование - поступок труса. |
| 6 |Я не могу быть уверен, кого я обманул, надул или победил, поэтому я стараюсь не показываться на публике. |
| 7 |Я чувствую, что идеальная ставка где-то рядом. Я просто должен держать ухо востро. |
| 8 |Я победил свою зависимость, но все, что нужно, - это один момент слабости, и я снова вернусь за карточный стол. |

| !к6 |!Идеал |
| 1 |''Знание.'' Знания - сила, а знание того, на какую лошадь ставить, - ключ к успеху. |
| 2 |''Судьба. ''Что бы ни случилось, предрешено судьбой, независимо от каких-либо планов или стремлений. |
| 3 |''Храбрость.'' Если вы хотите добиться успеха, вы должны рисковать. |
| 4 |''Выживание.'' Ты не сможешь победить, если ты мёртв. Борись до конца, тогда шансы могут обернуться в твою пользу. |
| 5 |''Надежность.'' В момент нужды я мог положиться на других. Теперь я хочу быть тем, на кого могут положиться другие. |
| 6 |''Победа. ''Победа - вот мерило человека. В конце концов, единственное, что имеет значение, - это финальный счёт. |

| !к6 |!Привязанность |
| 1 |Один человек должен мне много денег, и мне нужно сохранить ему жизнь, если я хочу получить должное. |
| 2 |Я верен другу или члену семьи, которые научили меня играть. |
| 3 |Человек, который спас меня от игровой зависимости, - единственная причина, по которой я жив. |
| 4 |Однажды покровитель предоставил мне деньги в обмен на процент от моего выигрыша. Я признателен ему за это. А также должен много денег. |
| 5 |Преступный синдикат, за который я когда-то играл, недоволен, что я покинул игру, и его сотрудники ищут меня. |
| 6 |Беспризорники однажды помогли мне найти цели для моих игр. Теперь я хочу помочь им сбежать с улиц. |

| !к6 |!Слабость |
| 1 |Я не знаю, когда остановиться. Особенно, когда мне это говорят все остальные. |
| 2 |Я приберегаю симпатию для своих друзей, а друзей у меня нет. |
| 3 |Вы думаете, у нас проблемы? Позвольте мне сказать вам, насколько плохи могут быть дела! |
| 4 |Вы можете одолжить мне немного, не так ли? У меня есть надёжный способ. Я гарантированно удвою ваши деньги. |
| 5 |Когда-то я был ужасно ущербным человеком, как и вы. Позвольте мне рассказать вам, как вы можете спастись. |
| 6 |Я отличный игрок. Я просто плох в математике и логике. |
При сотворении заклинания, вынуждающего других существ совершить спасбросок, вы можете потратить 1 очко чародейства и выбрать существ в количестве, не превышающем значение вашего мод. Харизмы (минимум 1). Указанные существа автоматически преуспевают в спасброске от этого заклинания.
[img [https://i.imgur.com/lYaBvye.png]]
Вас всегда привлекали другие культуры, начиная с древних и примитивных времён и заканчивая самыми современными достижениями цивилизаций. Изучая обычаи других культур, философию, законы, ритуалы, религиозные верования, языки и искусство, вы узнали, как племена, империи и другие формы общества создают свою судьбу и следуют ей до самого конца. Эти знания дались вам не только через книги и древние свитки, но и за счёт получения информации из первых рук – вы посетили затерянные поселения и изучили местные истории и культуру. 

* ''Владение навыками:'' Проницательность, Религия
* ''Языки:'' Два на ваш выбор
* ''Экипировка:'' Журнал, чёрные чернила, писчее перо, комплект дорожной одежды, одна безделушка с уникальными метками и кошель с 10 см

!!!Погружение в культуру народов 
Прежде чем встать на путь искателя приключений, вы провели большую часть своей взрослой жизни вдали от родных земель, живя среди тех, кто отличается от вас. Вы изучили их культуру и научились понимать местных жителей, которые в конечном итоге стали относиться к вам как к одному из своих. Одна культура оказала большое влияние на вас, изменив ваши верования и обычаи. Вы можете выбрать расу из таблицы ниже, которая вас приютила, или бросить кубик, чтобы определить случайно. 

| !к8 |!Культура| !к8 |!Культура |
| 1 |Ааракокры | 5 |Людоящеры |
| 2 |Гоблины | 6 |Орки |
| 3 |Дварфы   | 7 |Полурослики |
| 4 |Люди | 8 |Эльфы |

!!!Умение: Опытный лингвист
Вы можете общаться с гуманоидами, которые не говорят на языках, которые вы знаете. Вы должны понаблюдать за взаимодействием гуманоида с другим гуманоидом в течение 1 дня. После этого вы научитесь основным жестам и словам, которых хватит для общения на базовом уровне.

!!!Персонализация
Антропологи оставляют позади привычное им общество для того, чтобы заняться изучением другого. Они стремятся узнать то, как другие расы или цивилизации сумели выжить или то, что помешало им сделать это. Некоторыми антропологами движет интерес к чему-то новому, а другие гонятся за славой и почётом, попросту желая стать первыми, кто найдёт новую расу, затерянное племя или какую-то информацию о судьбе империи, давно канувшей в лету. 

| !к6 |!Черта характера |
| 1 |Я предпочитают компанию тех, кто не похож на меня, включая представителей других рас. |
| 2 |Я сторонник соблюдения этикета приличия и местных обычаев. |
| 3 |Я буду лучше наблюдать, чем вмешиваться. |
| 4 |Живя среди тех, кто почитает насилие, я стал более терпим к нему.  |
| 5 |Я рискну своей жизнью, чтобы открыть новую культуру или разгадать тайну чего-то давно забытого.  |
| 6 |Когда я впервые прибываю в новое поселение, я должен узнать все обычаи местных. |

| !к6 |!Идеал |
| 1 |''Открытия.'' Я хочу быть первым, кто сумеет найти затерянную цивилизацию. |
| 2 |''Дистанция. ''Ни одна культура не должна вмешиваться в дела другой, даже если последним нужна помощь. |
| 3 |''Знания. ''Познавая другие культуры и расы, мы познаем себя.  |
| 4 |''Сила.'' Обычному народу требуется сильный лидер. Я сделаю все возможное, чтобы дать им это.  |
| 5 |''Защита.'' Я должен сделать все, что в моих силах, чтобы спасти общество от вымирания. |
| 6 |''Безразличие. ''Жизнь жестока. Зачем кого-то спасать, если он все равно рано или поздно помрёт? |

| !к6 |!Привязанность |
| 1 |Мой учитель дал мне дневник, полный знаний и древней мудрости. Его потеря уничтожит меня. |
| 2 |Однажды пожив в первобытного племени, я хочу вернуться и посмотреть, что с ними стало. |
| 3 |Много лет назад трагедия настигла членов изолированного общества, с которыми я был в хороших отношениях. Я не забыл их. |
| 4 |Я хочу узнать больше о культуре определённых гуманоидов, которая очень привлекает меня.  |
| 5 |Я хочу отомстить за клан, племя, королевство или империю, которое было уничтожено.  |
| 6 |У меня с собой есть безделушка, которая является ключом к разгадке тайны затерянной цивилизации.  |

| !к6 |!Слабость |
| 1 |На море меня сильно укачивает.  |
| 2 |Я разговариваю сам с собой и не завожу друзей.  |
| 3 |Я верю, что мой интеллект намного выше, чем у тех народов, которые я изучаю. Я уверен, что смогу многому их научить. |
| 4 |Я подцепил очень вредные привычки, живя среди орков, гоблинов или людоящеров. |
| 5 |Я постоянно жалуюсь. |
| 6 |Я ношу племенную маску и никогда её не снимаю.  |
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
Вам нравится выступать на публике. Вы знаете, как их развлечь, очаровать и даже воодушевить. Ваша поэзия может трогать сердца слушателей, пробуждать в них горе или радость, смех или гнев. Ваша музыка ободряет их или заставляет скорбеть. Ваши танцы захватывают, а шутки всегда смешны. Чем бы вы ни занимались, ваша жизнь тесно связана с искусством.

* ''Владение навыками:'' Акробатика, Выступление
* ''Владение инструментами:'' [[Набор для грима|Набор для грима]], один [[музыкальный инструмент|Музыкальные инструменты]]
* ''Экипировка:'' Музыкальный инструмент (на ваш выбор), подарок от поклонницы (любовное письмо, локон волос или безделушка), комплект одежды артиста, кошель с 15 см

!!!Номера артиста
Хороший артист обладает разнообразными номерами. Выберите от одного до трёх амплуа из приведённой таблицы, чтобы определить, чем вы развлекаете публику.

| !к10 |!Амплуа | !к10 |!Амплуа |
| 1 |Акробат | 6 |Поэт  |
| 2 |Актёр | 7 |Рассказчик |
| 3 |Жонглёр | 8 |Танцор |
| 4 |Музыкант | 9 |Факир |
| 5 |Певец | 10 |Шут |

!!!Умение: По многочисленным просьбам
Вы всегда можете найти место для выступления. Обычно это таверна или постоялый двор, но это может быть цирк, театр или даже двор знатного господина. В этом месте вы получаете бесплатный постой и еду по скромным или комфортным стандартам (в зависимости от качества заведения), если вы выступаете каждый вечер. Кроме того, ваши выступления делают вас местной знаменитостью. Когда посторонние узнают вас в городе, в котором вы давали представление, они, скорее всего, будут к вам относиться хорошо.

---

!!!Разновидность артиста: Гладиатор
Гладиатор — такой же артист как менестрель или циркач, обученный превращать бой в искусство, от которого ликуют толпы. Вашим амплуа являются яркие сражения, хотя вы можете быть при этом акробатом или актёром. При использовании умения «По многочисленным просьбам» вы можете найти место для выступления в месте, где развлекают сражениями — арену гладиаторов или тайный бойцовский клуб. Вы можете заменить музыкальный  инструмент в снаряжении на недорогое, но необычное оружие, такое как трезубец или квадренс. 

---

!!!Персонализация
Успешные артисты могут овладевать вниманием публики, поэтому у них яркий или напористый характер. Они могут быть романтичными, а в искусстве и красоте часто обращаются к возвышенным идеалам.

| !к8 |!Черта характера |
| 1 |Для любой ситуации я найду подходящий рассказ. |
| 2 |Куда бы я ни пришёл, я начинаю собирать местные слухи и распространять сплетни. |
| 3 |Я безнадёжный романтик, всегда ищущий «кого-то особого». |
| 4 |Никто не сердится на меня или возле меня подолгу, так как я могу разрядить любую напряжённую обстановку. |
| 5 |Мне нравятся оскорбления, даже если они направлены на меня. |
| 6 |Мне обидно, если я не нахожусь в центре внимания. |
| 7 |Превыше всего я ценю совершенство. |
| 8 |Моё настроение и намерения меняются так же быстро как ноты в музыке. |

| !к6 |!Идеал |
| 1 |''Красота. ''Выступая, я делаю мир лучше. |
| 2 |''Традиции. ''Рассказы, легенды и песни прошлого не должны забываться, так как они учат нас тому, кто мы такие. |
| 3 |''Творчество.'' Миру нужны новые идеи и смелые действия. |
| 4 |''Жадность.'' Я занимаюсь всем этим ради денег и славы. |
| 5 |''Народ.'' Мне нравится видеть улыбки на лицах во время выступления. В этом-то всё дело. |
| 6 |''Честность.'' Искусство должно отражать душу; оно должно идти изнутри и показывать, чем мы являемся. |

| !к6 |!Привязанность |
| 1 |Мой инструмент — самое драгоценное, что у меня есть, и он напоминает мне о моей любви. |
| 2 |Кто-то украл мой драгоценный инструмент, и когда-нибудь я верну его. |
| 3 |Я хочу быть знаменитым, чего бы это ни стоило. |
| 4 |Я боготворю героя старых рассказов, и всегда сравниваю свои поступки с его. |
| 5 |Я всё сделаю, чтобы доказать превосходство над ненавистным конкурентом. |
| 6 |Я сделаю что угодно для других членов моей старой труппы. |

| !к6 |!Слабость |
| 1 |Я пойду на всё ради славы и известности. |
| 2 |Не могу устоять перед смазливым личиком. |
| 3 |Я не могу вернуться домой из-за скандала. Неприятности такого рода словно преследуют меня. |
| 4 |Однажды я высмеял дворянина, который всё ещё хочет оторвать мне голову. Это была ошибка, но я могу  повторить её ещё неоднократно. |
| 5 |Я не могу скрывать свои истинные чувства. Острый язык всегда приносит мне неприятности. |
| 6 |Я очень стараюсь исправиться, но друзьям не стоит на меня полагаться. |
Археологи много узнают о давно затерянных империях и культурах, изучая их останки – кости, руины, оставшиеся после них предметы быта и гробницы. Те, кто посвятили свою жизнь археологии, отправляются в разные уголки мира, чтобы исследовать разрушенные города и затерянные подземелья, копаться в земле ради ценных артефактов, которые смогут рассказать историю о монархах и верховных жрецах, войнах и катаклизмах. 

* ''Владение навыками:'' История, Выживание
* ''Владение инструментами:'' [[Инструменты картографа]] или [[инструменты навигатора|Инструменты навигатора]]
* ''Языки:'' Один на ваш выбор
* ''Экипировка:'' Контейнер для карт и свитков содержащий карту затерянного города или подземелья, шахтёрский фонарь, кирка, комплект одежды исследователя, лопата, средняя палатка, одна безделушка с последних раскопок и кошель с 25 см

!!!Искатель
Прежде чем встать на путь искателя приключений, вы провели большую часть взрослой жизни, копаясь в пыли в поисках реликвий, обладающих весьма сомнительной ценностью. Вам удалось продать несколько интересных экземпляров, что позволило вам купить хорошее снаряжение для начала пути приключенца. Один из предметов представляет для вас особую эмоциональную ценностью. Выберите его таблицы ниже или бросьте кубик, чтобы определить случайно.

| !к8 |!Предмет | !к8 |!Предмет |
| 1 |Кнут | 5 |Молоток |
| 2 |Ломик | 6 |Сигнальный фонарь |
| 3 |Лопата | 7 |Шест (3 м) |
| 4 |Медальон | 8 |Шляпа |

!!!Умение: Исторические знания
Когда вы входите в руины или подземелье, вы можете с уверенностью определить их первоначальное предназначение и создателей, если они являются представителями дварфов, эльфов, людей, юань-ти и других известных рас. Также вы можете прикинуть стоимость предмета, которому более века.

!!!Персонализация
Лишь немногие археологи смогут удержаться от желания исследовать затерянные руины или подземелья, особенно если дело касается легенд и слухов о несметных сокровищах чародеев, военачальников или королевских семей. Некоторые археологи гонятся за славой или богатством, другие считают себя некими светочами, у которых есть шанс представить миру забытое прошлое или скрыть от сообщества сокровище, которое не должно оказаться в плохих руках. Вне зависимости от мотивации, археологи сочетают в себе качества умудрённого опытом историка, смешанного с отчаянным героизмом и неудержимой тягой к охоте за сокровищами. 

| !к8 |!Черта характера |
| 1 |Мне нравятся хорошие загадки и тайны.  |
| 2 |Я храню всё и никогда ничего не выбрасываю. |
| 3 |Слава для меня важнее, чем деньги. |
| 4 |Я не чураюсь забрать что-то у мёртвого.  |
| 5 |В пыльной гробнице я чувствую себя счастливее, чем в самом сердце цивилизации.  |
| 6 |Ловушки меня не беспокоят. Меня беспокоят идиоты, которые их активируют. |
| 7 |Неудачи случаются, но я никогда не сдамся! |
| 8 |Пусть я и похож на ботаника, но люблю хорошую драку. Эти кулаки созданы для выбивания дури. |

| !к6 |!Идеал |
| 1 |''Сохранение.'' Этот артефакт принадлежит музею.  |
| 2 |''Жадность.'' Я не буду рисковать своей жизнью просто так. Я ожидаю оплаты за это. |
| 3 |''Жажда смерти. ''Нет ничего более захватывающего, чем побег из лап смерти. |
| 4 |''Достоинство.'' К мёртвым и их имуществу нужно относиться с должным уважением. |
| 5 |''Бессмертие.'' Все мои похождения связаны с поиском секретов вечной жизни. |
| 6 |''Опасность.'' С любым крупным открытием приходит и большая опасность. Два зайца одним махом. |

| !к6 |!Привязанность |
| 1 |С раннего детства я слушал рассказы о затерянном городе. Я найду его, разгадаю его секреты и займу своё место в анналах истории.  |
| 2 |Я хочу найти своего учителя, который пропал во время экспедиции некоторое время назад. |
| 3 |У меня есть друг-соперник. Только один из нас сможет стать самым лучшим. Я докажу, что им стану я. |
| 4 |Я не буду продавать предмет искусства или другое сокровище, если оно имеет культурную ценность.  |
| 5 |Я тайно влюблён в того, кто выделяет средства для моих археологических экспедиций. |
| 6 |Я хочу принести славу библиотеке, музею или университету.   |

| !к6 |!Слабость |
| 1 |Я в тайне боюсь одного из обычных диких животных. На своей работе я вижу их постоянно.  |
| 2 |Я не могу уйти из комнаты, не попытавшись найти потайную дверь.  |
| 3 |Если я не исследую древние руины или подземелья, то становлюсь нервным и нетерпеливым.  |
| 4 |У меня нет времени на друзей или семью. Каждую свободную минуту я трачу на подготовку или обдумывание своей следующей экспедиции.  |
| 5 |Когда есть выбор, идти направо или налево, я всегда выбираю налево. |
| 6 |Я могу уснуть только в полной темноте.  |
<<tabs "[tag[Архетип воина]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
<<tabs "[tag[Архетип плута]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
<<tabs "[tag[Архетип следопыта]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
[img [https://i.imgur.com/lYaBvye.png]]
<<<
Вы получаете охотничье чутьё волка. 
<<<

Вы совершаете проверки Мудрости (Выживание) с целью движения по следу или охоты на дичь с преимуществом.
<<<
Вы получаете неутомимость лося. 
<<<

Ваша скорость [[путешествия на дальние расстояния|Путешествия на дальние расстояния]], и эта же скорость десяти ваших союзников в пределах 12 м от вас, пока вы дееспособны, удваивается.
<<<
Вы получаете мощь медведя. 
<<<

Ваша [[грузоподъёмность|Грузоподъёмность и нагрузка]] удваивается, и вы совершаете проверки Силы с целью перемещения или разрушения предметов с преимуществом.
<<<
Вы получаете зоркость орла. 
<<<

Вы получаете [[сумеречное зрение|Зрение и свет]] радиусом 1 километр, а ваши глаза способны различать мелкие детали на этом расстоянии.
<<<
Вы получаете инстинкты выживания тигра. 
<<<

Вы владеете двумя из следующих навыков на ваш выбор: Акробатика, Атлетика, Выживание или Скрытность.
!!!Безоружные атаки
При совершении рукопашной атаки оружием вы можете использовать безоружный удар: пнуть, ударить кулаком, головой или другой аналогичный удар (ничто из этого не считается оружием). При попадании безоружный удар причиняет дробящий урон 1 + модификатор Силы. Все персонажи владеют безоружными атаками.

---

!!!Прорубание сквозь врагов
Если рукопашная атака уменьшает до 0 хиты существа с полными хитами, излишки урона от атаки можно перенести на другое существо поблизости. Атакующий нацеливается на другое существо пределах досягаемости, и, если исходный бросок атаки может попасть и по нему тоже, причиняет ему оставшийся урон. Если хиты того существа тоже были полными, и тоже опустились до 0, повторите процесс, перенося остатки урона, пока не кончатся доступные цели или пока этот урон не сможет опустить хиты здорового существа до 0.


---

!!!Сражение двумя оружиями
Если вы совершаете действие Атака и атакуете оружием, удерживаемым в одной руке, вы можете бонусным действием атаковать оружием, удерживаемым в другой руке. Вы не добавляете модификатор характеристики к урону от бонусной атаки, если он положительный. Атака одноручным оружием, удерживаемым в неосновной руке, совершается с помехой.

---

!!!Особые атаки
Помимо обычных рукопашных атак действием Атака вы можете совершать ряд особых атак.

Если вы можете совершать несколько атак действием Атака, особая атака заменяет одну из них.

<<tabs "[tag[Особая атака]nsort[]]" "Обезоруживание" "$:/state/tab1">>
Вы стремитесь к физическому совершенству, трепет от соревнований разжигает вашу кровь, а рёв толпы толкает вас вперёд. Рассказы о ваших подвигах бегут вперёд вас и способны открывать двери или развязывать языки. Будь то в одном из городов, между ними, или среди нечеловеческих народов, физические соревнования и те, кто посвящает им свою жизнь, вызывают уважение, граничащее с почтением. Атлеты происходят из всех культур и слоёв общества, и довольно часто пересекаются друг с другом.

* ''Владение навыками:'' Акробатика, Атлетика
* ''Владение инструментами:'' [[Наземный транспорт|Наземный и водный транспорт]]
* ''Языки:'' Один на ваш выбор
* ''Экипировка:'' Бронзовый диск или кожаный мяч, счастливый талисман или прошлый трофей, комплект дорожной одежды и кошель с 10 см

!!!Предпочитаемое соревнование
Хотя многие атлеты практикуются в различных играх и состязаниях, большинство из них преуспевают в одном виде соревнований. Вы можете выбрать предпочитаемое соревнование из таблицы ниже, или бросить кубик, чтобы определить случайно.

| !к8 |!Соревнование | !к8 |!Соревнование |
| 1 |Бег на длинные дистанции | 5 |Марафон |
| 2 |Бокс  | 6 |Пятиборье  |
| 3 |Борьба | 7 |Скачки  |
| 4 |Гонки на колесницах | 8 |Смешанные единоборства |

!!!Умение: Отголоски победы
Вы вызвали восхищение зрителей, коллег-спортсменов и тренеров в регионе, где проходили ваши прошлые спортивные победы. При посещении любого поселения в пределах 100 км от того места, где вы выросли, есть 50-процентная вероятность, что вы найдете там кого-то, кто восхищается вами и готов предоставить информацию или временное убежище.

!!!Персонализация
Состязания могут создать прочные связи между товарищами по команде и соперниками или разжечь ожесточенные распри, которые распространяются за пределы арены. Атлеты часто применяют уроки своих тренировок к своей жизни в целом.


| !к8 |!Черта характера |
| 1 |Я чувствую себя наиболее спокойно во время физических нагрузок, будь то упражнения или битвы. |
| 2 |Не люблю сидеть без дела. |
| 3 |У меня есть распорядок тренировок, который я отказываюсь нарушать. |
| 4 |Препятствия существуют, чтобы их преодолевать. |
| 5 |Когда я вижу, как другие борются за жизнь, я предлагаю помощь. |
| 6 |Я люблю обмениваться шутками и насмешками. |
| 7 |Все, что стоит делать, стоит делать лучше всего. |
| 8 |Меня раздражает, если люди хвалят кого-то другого, а не меня. |

| !к6 |!Идеал |
| 1 |''Состязание.'' Я стремлюсь проверять себя во всем.  |
| 2 |''Триумф. ''Лучшая часть победы - это унижение моих соперников. |
| 3 |''Товарищество.'' Самые прочные узы выковываются в борьбе. |
| 4 |''Народ.'' Я стремлюсь вдохновлять своих зрителей. |
| 5 |''Традиция.'' В каждой игре есть правила, и условия должны быть равными. |
| 6 |''Рост.'' Уроки заключаются в победе и поражении. |

| !к6 |!Привязанность |
| 1 |Мои товарищи по команде - моя семья. |
| 2 |Я одолею соперника и докажу, что я лучше. |
| 3 |Моя ошибка причинила боль кому-то. Я больше никогда не совершу эту ошибку. |
| 4 |Я стану лучшим ради чести и славы моего дома. |
| 5 |Человек, который тренировал меня, - самый важный человек в моем мире. |
| 6 |Я стараюсь соответствовать примеру конкретного героя.  |

| !к6 |!Слабость |
| 1 |У меня есть привычка, которая угрожает моей репутации или здоровью. |
| 2 |Я сделаю все, чтобы победить.  |
| 3 |Я игнорирую всех, кто не соревнуется, и всех, кто мне проигрывает. |
| 4 |У меня непрекращающаяся боль из-за старых травм. |
| 5 |Любое поражение или неудача с моей стороны происходит из-за того, что мой противник жульничал. |
| 6 |Я должен быть капитаном любой команды, к которой присоединяюсь. |
[img [https://i.imgur.com/lYaBvye.png]]
[img width=350 class="centerme" [https://i.imgur.com/HDJTzwM.png]]

<<tabs "[[Описание бардов]] [[Классовые умения бардов]] [[Коллегии бардов]]" "" "$:/state/tab1">>

Бедное существование означает отсутствие благ, доступных в стабильном обществе. Однообразная пища и плохой ночлег, рваная одежда и непредсказуемое будущее приводят к неприятным последствиям. Вы можете жить в комнате в ночлежке или в общем зале над таверной. Закон вас частично защищает, но вам всё равно придётся бороться с насилием, преступлениями и болезнями. Те, кто ведут такое существование, обычно трудятся чернорабочими, лоточниками, коробейниками, ворами и занимают другие не престижные должности.
Прошли те счастливые дни, когда после тяжелого трудового дня вы заходили в любимый трактир. Всё изменилось, и вам повезло, что вы остались в живых. На родине вы могли причислить себя к тем уличным мудрецам, которые знали, когда нужно дать взятку и с кем работать, чтобы заработать на жизнь. Ваша способность прислушиваться к ветрам перемен спасала вас и раньше, а в этот раз она позволила вам стать одним из немногих счастливчиков, которым удалось выбраться из катастрофы с чем-то большим, чем просто рубашка на спине.

* ''Владение навыками:'' Атлетика, Проницательность
* ''Владение инструментами:'' Один вид [[инструментов ремесленников|Инструменты ремесленников]]
* ''Языки:'' Один на ваш выбор
* ''Снаряжение:'' Инструменты ремесленника, которыми вы владеете, памятная безделушка о прошлой жизни, комплект дорожной одежды и кошель с 15 см 

!!!Умение: Выживший
Каким бы ни было ваше прежнее положение, теперь вы один из многих беженцев, прибывших на новое место. Вы можете найти убежище среди других жителей вашей родины и тех, кто сочувствует вашей участи.

!!!Персонализация

| !к8 |!Черта характера |
| 1 |Возможно, я потерял все, ради чего работал большую часть своей жизни, но впереди еще много работы, нет времени задерживаться на прошлом. |
| 2 |Я упорно трудился, чтобы добиться своего, и не позволю небольшим трудностям помешать мне добиться успеха. |
| 3 |Я защищаю тех, кто меня окружает, никогда не знаешь, когда кто-то из них пригодится. |
| 4 |Я всегда продвигался вперед за счет самопожертвования, зачем менять это сейчас? |
| 5 |Я готовлюсь ко всему, это окупилось дома и окупится снова. |
| 6 |Я верну себе свой дом, хотя путь может быть долгим, я никогда не теряю надежды. |
| 7 |Я никогда не заботился о личной гигиене и удивляюсь, что это беспокоит других. |
| 8 |Я всегда готов оказать добровольную помощь, лишь бы мне ничего не пришлось делать. |

| !к6 |!Идеал |
| 1 |''Правосудие. ''Коррупция привела мою родину к краху, и я больше не потерплю этого. |
| 2 |''Принятие. ''Стабильность - это миф. Нет смысла думать, что ты можешь контролировать свое будущее.  |
| 3 |''Надежда.'' Меня направляет высшая сила, и я верю, что в конце концов все будет хорошо. |
| 4 |''Сдержанность.'' Я ненавижу тех, кто стал причиной моей потери. Это все, что я могу сделать, чтобы не наброситься на них.  |
| 5 |''Сила.'' Как показало прошлое, выживают сильные. Если ты слаб, то заслуживаешь того, что получишь.  |
| 6 |''Открытость.'' Я всегда готов поделиться историей своей жизни с любым, кто меня выслушает. |

| !к6 |!Привязанность |
| 1 |У меня есть шанс на новую жизнь, и на этот раз я собираюсь все сделать правильно. |
| 2 |Житель Подземья спас мне жизнь, когда я был ранен и одинок. Я в большом долгу перед его народом. |
| 3 |Я должен созерцать и сохранять естественную красоту мест под землей. |
| 4 |Драгоценные камни привлекают меня больше, чем золото, земля, магия или сила. |
| 5 |Я хочу исследовать новые глубины и покорять новые вершины. |
| 6 |Когда-нибудь я найду золотую жилу и проведу остаток жизни в роскоши. |

| !к6 |!Слабость |
| 1 |Однажды я потерял всё, кроме своей гребной лодки. Я сделаю всё, чтобы защитить ее. |
| 2 |Правитель навлек эти страдания на наш народ. Я добьюсь, чтобы он предстал перед судом.|
| 3 |Я жду того дня, когда смогу вернуться в свой дом. |
| 4 |Я никогда не забуду о долге перед теми, кто помог мне. Я буду готов вернуть этот долг, когда меня призовут. |
| 5 |Дома был кто-то, кто был мне дорог, я узнаю, что с ним случилось. |
| 6 |Некоторые говорят, что моя жизнь не стоила спасения, я докажу, что они ошибаются. |
Вы выросли на улице в бедности и одиночестве, лишённые родителей. Никто не присматривал и не заботился о вас, и вам пришлось научиться делать это самому. Вам приходилось постоянно бороться за еду и следить за другими неприкаянными душами, способными обокрасть вас. Вы спали на чердаках и в переулках, мокли под дождём и боролись с болезнями, не получая медицинской помощи или приюта. Вы выжили, невзирая на все трудности, и сделали это благодаря своей сноровке, силе или скорости.

Вы начинаете приключение с суммой денег, достаточной, чтоб скромно, но уверенно прожить десять дней. Как вы получили эти деньги? Что позволило вам перейти к нормальной жизни, преодолев нищету?

* ''Владение навыками:'' Ловкость рук, Скрытность
* ''Владение инструментами:'' [[Воровские инструменты|Воровские инструменты]], [[набор для грима|Набор для грима]]
* ''Экипировка:'' Маленький нож, карта города, в котором вы выросли, ручная мышь, безделушка в память о родителях, комплект одежды селянина, кошель с 10 см

!!!Умение: Городские тайны
Вы знаете тайные лазы и проходы городских улиц, позволяющие пройти там, где другие не увидят пути. Вне боя вы (и ведомые вами союзники) можете перемещаться по городу вдвое быстрее обычного.

!!!Персонализация
Жизнь в нищете оставляет свой отпечаток на беспризорниках. В них, как правило, сильна привязанность к людям, с которыми они делили тяготы уличной жизни, или они исполнены желанием добиться лучшей доли, и, возможно, расквитаться с богачами, от которых они натерпелись.

| !к8 |!Черта характера |
| 1 |В моих карманах полно побрякушек и объедков. |
| 2 |Я задаю очень много вопросов. |
| 3 |Я часто забиваюсь в узкие закутки, где никто не сможет добраться до меня. |
| 4 |Я всегда сплю, прижавшись спиной к стене или дереву, сжимая узелок со всеми своими пожитками в руках. |
| 5 |Я не воспитан, и ем как свинья. |
| 6 |Я убеждён, что все, кто проявляют доброту ко мне, на самом деле скрывают злые намерения. |
| 7 |Я не люблю мыться. |
| 8 |Я прямо говорю о том, на что прочие предпочитают лишь намекнуть, или промолчать. |

| !к6 |!Идеал |
| 1 |''Уважение.'' Все люди, богатые ли они, или бедные, достойны уважения. |
| 2 |''Общность.'' Вы должны заботиться друг о друге, ведь никто другой этого не сделает. |
| 3 |''Перемены.'' Убогие возвысятся, а великие падут. Перемены в природе вещей. |
| 4 |''Возмездие.'' Нужно показать богачам, чего стоит жизнь и смерть в трущобах. |
| 5 |''Люди.'' Я помогаю тем, кто помогает мне. Это позволяет нам выжить. |
| 6 |''Устремление.'' Я готов доказать, что достоин лучшей жизни. |

| !к6 |!Привязанность |
| 1 |Мой город или деревня  это мой дом, и я буду защитить его. |
| 2 |Я спонсирую приют, чтобы оградить других от того, что пришлось пережить мне. |
| 3 |Я выжил лишь благодаря другому беспризорнику, что передал мне знания, как вести себя на улицах. |
| 4 |Я в неоплатном долгу перед человеком, что сжалился и помог мне. |
| 5 |Я избавился от нищеты, ограбив важного человека, и меня разыскивают. |
| 6 |Никто не должен пережить те трудности, через которые пришлось пройти мне. |

| !к6 |!Слабость |
| 1 |Если я в меньшинстве, то я убегу из битвы. |
| 2 |Серебро в любом виде выглядит для меня как большая куча денег, и я сделаю всё, чтобы его у меня стало больше. |
| 3 |Я никогда не доверяю полностью кому бы то ни было, кроме себя. |
| 4 |Я предпочту убить кого-нибудь во сне, нежели в честном поединке. |
| 5 |Это не воровство, если я взял то, в чём нуждаюсь больше, чем кто-либо другой. |
| 6 |Те, кто не могут позаботиться о себе, получат то, что заслужили. |
[img [https://i.imgur.com/lYaBvye.png]]
* Вы [[недееспособны|Недееспособный]].
* Вы не способны перемещаться и говорить, а также не осознаёте своё окружение.
* Вы роняете всё, что держите, и [[падаете ничком|Сбитый с ног / Лежащий ничком]].
* Вы автоматически проваливаете спасброски Силы и Ловкости. 
* Вы не добавляете модификатор Ловкости и бонус от щита к своему КД.
* Броски атаки по вам совершаются с преимуществом.
* Любая атака, попавшая по вам, считается критическим попаданием, если нападающий находится в пределах 1 м от вас.
| !к10 |!Благо |
| 1 |Дружественный волшебник отдал вам свиток с одним заговором (на выбор Мастера).  |
| 2 |Вы спасли обывателя, который теперь обязан вам жизнью. Эта личность сопровождает вас в ваших путешествиях и выполняет повседневные задачи для вас, но покинет вас, если с ним будут обращаться грубо, наплевательски или станут подвергать его опасности. Определите особенности этого персонажа, используя дополнительные таблицы и обсудив со своим Мастером.  |
| 3 |Вы нашли ездовую лошадь.  |
| 4 |Вы нашли немного золота. Добавьте 1к20 cм к вашему стандартному начальному богатству.  |
| 5 |Вы получили в наследство одно простое оружие (на ваш выбор).  |
| 6 |Вы нашли нечто интересное! Добавьте к снаряжению одну безделушку (см. Книга Игрока стр. 159).  |
| 7 |Вы когда-то прислуживали в местном храме. При следующем вашем визите туда вам могут полностью восстановить хиты.  |
| 8 |Знакомый алхимик подарил вам зелье лечения или флакон кислоты на ваш выбор.  |
| 9 |Вы нашли карту сокровищ.  |
| 10 |Дальний родственник оставил вам состояние, позволяющее вести комфортное существование в течение 1к20 лет. Если вы решили вести существование более высокого уровня, уменьшите его стоимость на 2 cм в течение этого периода времени.  |
Вы знаете, что такое богатство, власть и привилегии. У вас благородный титул, а ваша семья владеет землями, собирает налоги, и обладает серьёзным политическим влиянием. Вы можете быть изнеженным аристократом, незнакомым с работой и неудобствами, бывшим торговцем, только-только получившим титул, или лишённым наследства негодяем с гипертрофированным чувством собственного права. Или же вы можете быть честным, трудолюбивым землевладельцем, искренне заботящимся о тех, кто живёт и трудится на его земле, ощущая за них ответственность.

Придумайте вместе с Мастером надлежащий титул и определите, какую власть этот титул даёт. Благородный титул не существует сам по себе — он связан со всей вашей семьёй, и каким бы титулом вы ни обладали, вы передадите его своим детям. Вам нужно не только определить титул, но также описать вместе с Мастером вашу семью и её влияние на вас.

* ''Владение навыками:'' История, Убеждение
* ''Владение инструментами:'' Один [[игровой набор|Игровой набор]]
* ''Языки:'' Один на ваш выбор
* ''Экипировка:'' Комплект одежды придворного, кольцо-печатка, свиток с генеалогическим древом, кошель с 25 см

!!!Умение: Привелигированность
Благодаря знатному происхождению, другие хорошо к вам относятся. Вас принимают в высшем обществе, и считается, что у вас есть право посещать любые места. Обыватели изо всех сил стараются сделать вам приятно и избежать вашего гнева, а другие высокородные считают вас своей ровней. Если нужно, вы можете получить аудиенцию местного дворянина.

!!!Персонализация
Благородные рождаются и растут в особом окружении, и их личность несёт отпечаток этого воспитания. Благородный титул идёт вкупе с множеством обязательств — ответственностью перед семьёй, другими благородными (включая короля), народом, доверенным вашей семье, и даже перед самим титулом. Все эти обязательства другие могут использовать против вас.

| !к8 |!Черта характера |
| 1 |Я применяю так много лести, что все, с кем я разговариваю, чувствуют себя самыми чудесными и важными персонами в мире. |
| 2 |Обыватели любят меня за доброту и великодушие. |
| 3 |Один лишь взгляд на мои регалии заставляет перестать сомневаться в том, что я выше немытого отребья. |
| 4 |Я много трачу на то, чтобы выглядеть потрясающе, и по последнему слову моды. |
| 5 |Мне не нравится марать руки, и я не хочу умереть в каком-нибудь неподобающем месте. |
| 6 |Несмотря на благородное рождение, я не ставлю себя выше народа. У всех нас течёт одинаковая кровь. |
| 7 |Потеряв мою милость, обратно её не вернёшь. |
| 8 |Оскорбишь меня, и я сотру тебя в порошок, уничтожу твоё имя, и сожгу твои поля. |

| !к6 |!Идеал |
| 1 |''Уважение.'' Уважение — мой долг. Кем бы ты ни был, к другим нужно относиться с уважением, невзирая на их происхождение. |
| 2 |''Ответственность.'' Я должен уважать тех, кто выше меня, а те, кто ниже меня, должны уважать меня. |
| 3 |''Независимость.'' Я должен доказать, что справлюсь и без заботы своей семьи. |
| 4 |''Власть.'' Если соберу много власти, никто не посмеет указывать мне, что делать. |
| 5 |''Семья.'' Настоящая кровь гуще. |
| 6 |''Благородный долг.'' Я должен защищать тех, кто ниже меня, и заботиться о них. |

| !к6 |!Привязанность |
| 1 |Я пойду на любой риск, лишь бы заслужить признание семьи. |
| 2 |Союз моего дома с другой благородной семьёй нужно поддерживать любой ценой. |
| 3 |Нет никого важнее других членов моей семьи. |
| 4 |Я влюблён в наследницу семейства, презираемого моей роднёй. |
| 5 |Моя преданность правителю непоколебима. |
| 6 |Обыватели должны считать меня своим героем. |

| !к6 |!Слабость |
| 1 |Я втайне считаю всех ниже себя. |
| 2 |Я скрываю позорную тайну, которая может уничтожить мою семью. |
| 3 |Я слишком часто слышал завуалированные оскорбления и угрозы, и потому быстро впадаю в гнев. |
| 4 |У меня неустанная страсть к плотским удовольствиям. |
| 5 |Весь мир вращается вокруг меня. |
| 6 |Я часто навлекаю позор на свою семью словами и действиями. |
Вы изучаете два заговора на ваш выбор из списка заклинаний жреца. Они считаются для вас заклинаниями паладина, а Харизма - базовая характеристика для их использования. Когда вы получаете новый уровень в этом классе, вы можете заменить один из них на другой заговор из списка жреца.
[img width=439 class="centerme" [https://i.imgur.com/xE7JucR.png]]

Бледные эльфы - это подраса эльфов, отличающаяся своей белоснежной кожей, которая, как говорят, бледна, словно луна. Представители этой расы потеряли свой цвет кожи от того, что долгое время жили под землей вдали от света после разрушения их дома. Бледные эльфы считаются таинственным и проницательным народцем, лишь недавно начавшим исследовать поверхность с детским любопытством.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 1. |
|^Магия бледных эльфов |^Вам известен заговор //свет//. При достижении 3 уровня вы можете один раз использовать заклинание //усыпление//. При достижении 5 уровня, вы также можете использовать заклинание //невидимость//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Для сотворения этих заклинаний вам не требуются материальные компоненты. Базовой характеристикой для их использования является Мудрость. |
|^Прозорливость |^Вы владеете навыками Анализ и Проницательность. |
Богатое существование означает жизнь в роскоши, хотя у вас может и не быть унаследованных состояний как у дворян или членов королевской семьи. Такую же как вы жизнь ведут успешные торговцы, любимые слуги при дворе, или владельцы нескольких успешных предприятий. У вас комфортное жилище, обычно это просторный дом в хорошем районе города или комфортный номер в отличной гостинице. Возможно, у вас есть несколько слуг. 
[img [https://i.imgur.com/lYaBvye.png]]
---

!!! [img[1.png]] Заклинания источника
Вы узнаёте заклинания источника на указанных уровнях чародея. Заклинания источника считаются для вас заклинаниями чародея и не учитываются при подсчёте количества известных вам заклинаний чародея.

Когда вы получаете уровень в этом классе, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний волшебника, жреца, колдуна или чародея того же уровня. Новое заклинание должно принадлежать школе Воплощения или Прорицания.

| !Ур. |!Заклинания |
| !1 |//лечение ран//, //обнаружение добра и зла//, //чудотворство// |
| !3 |//божественное оружие//, //поиск предмета// |
| !5 |//проклятие//, //сотворение пищи и воды// |
| !7 |//защита от смерти//, //страж веры// |
| !9 |//призыв небожителя//, //рассеивание добра и зла// |

---

[img [https://i.imgur.com/lYaBvye.png]]
<<tabs "[tag[Божественный домен]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
Если у вас уже есть умение Божественный канал, и вы получаете уровень в классе, тоже дающем это умение, вы получаете эффекты Божественного канала от нового класса, но не получаете возможность дополнительного его использования. Дополнительные использования вы получите только тогда, когда получите в каком-нибудь из классов уровень, дающий эти дополнительные использования недвусмысленно. Например, если вы жрец 6/паладин 4, то можете использовать Божественный канал два раза между отдыхами, потому что уровень жреца это позволяет. Каждый раз, когда вы используете это умение, вы можете выбирать эффекты, доступные за счёт любого из имеющихся классов.
Вы получаете [[слепое зрение|Зрение и свет]] радиусом 2 м. В пределах этого радиуса вы можете видеть всё, что не находится за [[полным укрытием|Укрытие]], даже если вы [[ослеплены|Ослеплённый]] или находитесь в полной темноте. Кроме того, вы способны видеть [[невидимых|Невидимый]] существ в пределах этого радиуса, если они не скрыты от вас.
Бойцовские турниры включают в себя кулачный бой, борьбу и другие несмертельные бои с турнирной сеткой, проходящие по определённым правилам. Если вы хотите участвовать в соревнованиях с боями насмерть, то к ним применяются стандартные боевые правила. 

//''Ресурсы''//. Эта деятельность занимает одну неделю. 

//''Определение результата''//. Персонаж должен совершить серию проверок, сложность которых определяется случайным образом и отражает особенности соперника, с которым сталкивается персонаж. Основная сложность бойцовских турниров заключается в незнании персонажем особенностей своих противников. 

Персонаж совершает три проверки: Сила (Атлетика), Ловкость (Акробатика) и Телосложение (Выносливость). По желанию персонаж может заменить одну из этих проверок навыков броском атаки, используя одно из своих оружий. Сл проверки равна 5+2к10, и для каждой из них она генерируется отдельно. Сверьтесь с таблицей ниже, чтобы узнать, чего добился персонаж. 

|!Результат |!Исход|
|0 успехов |Проигрыш боёв, нулевой заработок|
|1 успех |50 см|
|2 успеха |100 см|
|3 успеха |200 см|

//''Осложнение''//. Персонажи, участвующие в боях, имеют дело со своими соперниками, людьми, которые делают ставки, и организаторами матчей. Персонаж, который участвовал в боях в течение рабочей недели, с вероятностью 10% может получить осложнение, примеры которых приведены в таблице ниже.

| !к6 |!Осложнение |
| 1 |Противник клянётся отомстить Вам.|
| 2 |Криминальный авторитет предлагает вам специально проиграть несколько матчей.|
| 3 |Вы победили популярного местного чемпиона, вызвав раздражение толпы. |
| 4 |Вы победили слугу аристократа, вызвав гнев аристократического семейства. |
| 5 |Вас обвинили в жульничестве. Вне зависимости от справедливости обвинений, ваша репутация пострадала.|
| 6 |Вы случайно нанесли почти смертельный удар своему противнику. |
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
Совершаете ли вы удар оружием, стреляете ли из лука или совершаете бросок атаки частью заклинания, бросок атаки определяет, попала атака или промахнулась. Для совершения броска атаки бросьте к20 и добавьте уместные модификаторы. Если сумма результата броска и модификаторов не меньше Класса Доспеха (КД) цели, атака попадает. 

Если возникнет вопрос, является ли то, что вы делаете, атакой, ответ будет простым: если вы совершаете бросок атаки, вы совершаете атаку.

---

!!!Модификаторы броска

Когда персонаж совершает бросок атаки, из модификаторов чаще всего используются модификатор характеристики и бонус мастерства. 

''Модификатор характеристики. ''

* Для атак метательным и рукопашным оружием, совершаемых одной рукой, используется модификатор Ловкости или Силы, на ваш выбор, или только Силы, если оружие «грубое».
* Для атак рукопашным оружием, совершаемых двумя руками, используется модификатор Силы
* Для атак стрелковым оружием используется модификатор Ловкости. 
* Для атак заклинаниями используется модификатор базовой характеристикой заклинателя. 

''Бонус мастерства. ''

Вы добавляете бонус мастерства к броскам атаки, когда совершаете атаку оружием, которым владеете, а также когда атакуете заклинанием.

---

!!!Критические промахи и попадания
Если при броске к20 для броска атаки выпало число из критического диапазона оружия, атака попадает вне зависимости от всех модификаторов и КД цели. Кроме того, атака считается ''критическим попаданием''.

Если при броске к20 для броска атаки выпало «1», атака промахивается вне зависимости от всех модификаторов и КД цели.

Если вы совершаете ''критическое попадание'', обратитесь к [[таблицам критических попаданий|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=1952211726]]. Совершите бросок к20 и сверьтесь с таблицей подтверждения критического попадания. Следуя инструкциям, указанным в таблице, определите количество нанесенного урона и возможное ранение. 

Вид ранения напрямую зависит от вида урона, который наносит ваша атака. Если атака наносит два или более вида урона, выберите один из них. Если у цели уже есть полученное ранение, а его эффект не может складываться, нанесите вместо него следующее по списку.

<<<
//Например, если вы совершили критическое попадание дубинкой, бросьте к20 и сверьтесь с таблицей, соответствующей колющему виду урона. Допустим, что результат броска - «18». Следуя указаниям таблицы, совершите бросок урона и прибавьте к нему максимальное значение броска урона. Затем добавьте все уместные модификаторы, таким образом вы узнаете количество урона, нанесенного критическим попаданиям. 
После этого совершите бросок с помехой по приведенной в том же приложении таблице «Ранения». Допустим, что результат броска - «2». По таблице определяем, что это критическое попадание нанесло цели //лёгкое сотрясение//, вследствие чего цель совершает проверки Ловкости и Интеллекта с помехой.//
<<<



---

!!!Досягаемость и дальность
Вы можете совершать бросок атаки только по целям в пределах вашей досягаемости (для рукопашных атак) или дальности (для дальнобойных атак). 

Досягаемость рукопашного оружия равна 1 м, если в описании оружия не сказано иначе.

Эффективная дальность дальнобойного оружия указана в его описании. Максимальная дальность метательного оружия втрое превышает эффективную. Стрелковое оружие может стрелять на расстояние равное пятикратному значению эффективной дальности. Бросок атаки совершается с помехой, если цель находится за пределами эффективной дальности, и вы не можете атаковать цель, находящуюся за пределами максимальной дальности.

---

!!!Дальнобойные атаки в ближнем бою
Дальнобойной атакой трудно прицелиться, если непосредственно перед вами стоит враг. Если вы совершаете дальнобойную атаку оружием, заклинанием или каким-то другим средством, бросок атаки совершается с помехой, если вы находитесь в пределах 1 м от враждебного дееспособного существа.



Быстроногие шифтеры изящны и стремительны. Они, как правило, кошачьи по своей природе, сторонятся чужаков, и их трудно загнать в угол как физически, так и социально

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 2, а значение Харизмы увеличивается на 1. |
|^Грациозность |^Вы владеете навыком Акробатика. |
|^Особенность обращения |^Пока вы обращены, ваша скорость ходьбы увеличивается на 2 м. Кроме того, вы можете реакцией переместиться на 2 м, когда существо заканчивает свой ход в пределах 1 м от вас. Это перемещение не провоцирует атак. |
Пока вы держите одноручное рукопашное оружие в одной руке, которым можно наносить удары двумя руками, и не используете другого оружия или щита, вы получаете бонус +1 к броскам атаки и урона этим оружием.
Богатство в мирах D&D принимает разные формы. Благосостояние вашего персонажа может отражаться монетами, драгоценными камнями, товарами, предметами искусства, животными и прочим имуществом. 

---

!!!Монеты
Монеты делают разного номинала, основываясь на относительной стоимости металла, из которого они изготовлены. Чаще всего встречаются монеты двух видов: ''серебряные монеты (см)'' и ''медные монеты (мм)''.

На одну серебряную монету персонаж может купить поясной кошель, 15 метров хорошей верёвки или козу. Опытный ремесленник может зарабатывать одну серебряную монету в день. Серебряная монета — стандартная единица измерения богатства, даже если при этом сами монеты не используются.

Одна серебряная монета стоит десять медных монет, распространённых среди обывателей. Медная монета оплачивает один день чернорабочего, флягу лампового масла или одну ночь на захудалом постоялом дворе. За многие дешевые мелочи можно расплатиться и половиной медяка.

Чуть реже встречаются ''золотые монеты (зм)''. Монета из золота стоит десять серебряных, и используются золотые монеты, как правило, либо при крупных торговых сделках, либо как стандарт для упрощения подсчетов. 

Иногда в грудах сокровищ попадаются необычные монеты, сделанные из других драгоценных металлов. Монеты из ''электрума (эм)'' и ''платины (пм)'' были в обращении в древних империях и королевствах, и при оплате ими они иногда вызывают подозрения. Монета из электрума стоит пять серебряных монет, а из платины — десять золотых.

Стандартная монета весит 10 грамм, так что пятьдесят любых монет весят полкилограмма.

|!Монета| !мм| !см| !эм| !зм| !пм|
|Медная (мм)| 1| | | | |
|Серебряная (см)| 10| 1||||
|Электрумовая(эм)| 50| 5| 1|||
|Золотая (зм)| 100| 10| 2| 1||
|Платиновая (пм)| 1 000| 100| 20| 10| 1|

---
!!!Продажа сокровищ
В подземельях, которые вы исследуете, могут попадаться сокровища, снаряжение, оружие, доспехи и другие вещи. Обычно сокровища и безделушки продаются по возвращении в город или другое поселение, при условии, что вы найдёте покупателей, заинтересованных в вашем товаре.

//''Доспехи, оружие и прочее снаряжение''//. Обычно оружие, доспехи и прочее снаряжение без видимых дефектов продаётся за половину стоимости. Оружие и доспехи чудовищ редко находятся в пригодном для продажи состоянии.

//''Магические предметы.''// Продажа магического предмета — дело нелёгкое. Можно найти кого-то, кто купит зелье или свиток, но остальные предметы по карману только самым богатым дворянам. И наоборот, вы не найдёте в свободной продаже магических предметов и заклинаний кроме нескольких самых распространённых видов.

//''Драгоценные камни, ювелирные изделия и предметы искусства.''// Эти предметы продаются на рынке за их полную стоимость, и вы можете их либо обменять на денежный эквивалент, либо использовать вместо валюты. Если сокровище очень ценное, то Мастер может потребовать, чтобы вы вначале нашли подходящего покупателя.

//''Товары. ''//  Так же как драгоценные камни, товары (железные слитки, мешки с солью, домашний скот) продаются на рынке за полную стоимость и могут использоваться как валюта.
[img width=375 class="centerme" [https://i.imgur.com/UPaDCgY.png]]

<<tabs "[[Описание варваров]] [[Классовые умения варваров]] [[Пути дикости]]" "" "$:/state/tab1">>


!!! [img[1.png]] Проклятый воитель
Вы получаете владение средними доспехами и воинским оружием.
!!! [img[1.png]] Пробуждённый разум
Начиная с 1 уровня ваше чуждое знание даёт вам возможность касаться разума других существ. Вы можете общаться телепатически с любым существом, которое видите в пределах 6 м от себя. Вам не нужно знать общий с существом язык для того, чтобы оно понимало ваши телепатические высказывания, но существо должно быть в состоянии понимать как минимум один язык.

Вы можете действием использовать это умение, чтобы попытаться испугать видимое вами в пределах 6 м существо, послав в его разум ужасные образы. Цель должна преуспеть в спасброске Мудрости против вашей Сл спасброска заклинаний колдуна, иначе она будет испугана вами до начала вашего следующего хода.
Вы можете свободно взаимодействовать с двумя предметами или особенностями местности во время другого действия. Например, вы можете расстегнуть и открыть рюкзак, и извлечь из него предмет, достать из кармана ключ и открыть дверь во время перемещения, или вынуть меч и кинжал из ножен частью того же действия, которым совершаете атаку.

Если вы хотите взаимодействовать с третьим предметом, вам нужно потратить на это действие. Некоторые магические и другие особые предметы всегда используются действием, что указывается в их описании.

Мастер может потребовать, чтобы вы потратили действие на такую деятельность, если предмет требует особого обращения или вам мешают необычные обстоятельства. Например, Мастер может резонно решить, что нужно потратить действие, чтобы открыть заклинившую дверь или повернуть ворот для опускания моста.

Вот несколько примеров того, что вы можете совершать параллельно с перемещением и совершением действий:

* вынимание или убирание в ножны меча
* открывание или закрывание двери
* доставание зелья из рюкзака
* поднимание упавшего топора
* взятие безделушки со стола
* снятие кольца с пальца
* помещение еды в рот
* втыкание знамени в землю
* вынимание нескольких монет из кошеля
* выпивание пива из кувшина
* нажатие на рычаг
* вынимание факела из крепления на стене
* доставание книги с полки, до которой вы дотягиваетесь
* тушение небольшого пламени
* надевание маски
* накидывание капюшона на голову
* прикладывание уха к двери
* пинание небольшого камня
* поворачивание ключа в замке
* прощупывание пола шестом
* передача предмета другому персонажу
Если размер двух существ отличается на две или больше категории, большее существо может считаться местностью для меньшего.

Чтобы запрыгнуть на спину или вскарабкаться по конечностям большего существа, меньшее существо действием совершает проверку Силы (Атлетика) или Ловкости (Акробатика), противопоставленную проверке Ловкости (Акробатика) цели. Если меньшее существо преуспевает, оно перемещается в пространство цели и цепляется за его тело. Находясь в пространстве цели, меньшее существо перемещается вместе с ней и совершает с преимуществом броски атаки по ней.

Меньшее существо может перемещаться по пространству большего существа, считая его труднопроходимой местностью. Способность большего существа атаковать меньшее зависит от местоположения меньшего существа и оставляется на усмотрение Мастера. Большее существо может сбросить меньшее действием — стряхнув его, потеревшись о стену или схватив его и сбросив. Это действие требует от большего существа успеха в проверке Силы (Атлетика), противопоставленной проверке Силы (Атлетика) или Ловкости (Акробатика) меньшего существа. Меньшее существо само выбирает, проверку какой характеристики оно будет совершать.
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img width=270 class="centerme" [https://i.imgur.com/eBuYwZs.png]]

<<tabs "[[Описание воинов]] [[Классовые умения воинов]] [[Архетипы воина]]" "" "$:/state/tab1">>

| !_к12_ |!Исход войны |
| 1 |Вы потеряли сознание и были оставлены умирать. Придя в сознание позже, вы не можете вспомнить ничего о битве. |
| 2-3 |Вас тяжело ранили в бою, и вы всё ещё носите ужасные шрамы от тех ранений. |
| 4 |Вы дезертировали из боя, чтобы спасти свою жизнь, но вам всё ещё стыдно за вашу трусость. |
| 5-7 |Вы получили лишь лёгкие ранения, и они зажили, не оставив шрамов. |
| 8-9 |Вы пережили битву, но страдаете от ужасных кошмаров, в которых вы переживаете её раз за разом. |
| 10-11 |Вы пережили битву невредимым, но многие ваши товарищи были ранены или пропали. |
| 12 |Вы показали себя достойно в бою, и вас запомнили, как героя. Возможно, вы были удостоены медали за вашу храбрость. |
<<<
Дух волка делает вас вожаком стаи.
<<<

Пока вы пребываете ярости, ваши союзники совершают броски рукопашных атак по всем враждебным вам существам, находящимся в пределах 1 м от вас, с преимуществом. 
[img width=365 class="centerme" [https://i.imgur.com/vpNWvGH.png]]

<<tabs "[[Описание волшебников]] [[Классовые умения волшебников]] [[Магические традиции]]" "" "$:/state/tab1">>

| !к10 |!Магическое событие |
| 1 |Вы были очарованы или испуганы заклинанием.  |
| 2 |Вы получили ранение от эффекта заклинания.  |
| 3 |Вы стали свидетелем того, как творилось мощное заклинание жрецом, друидом, чародеем, колдуном или волшебником.  |
| 4 |Вы выпили зелье (на выбор Мастера).  |
| 5 |Вы нашли свиток заклинания (по выбору Мастера) и вам удалось успешно применить его.  |
| 6 |Вы были телепортированы посредством магии.  |
| 7 |Вы стали невидимым на некоторое время.  |
| 8 |Вы распознали в чём-то иллюзию.  |
| 9 |Вы видели существо, призванное магией.  |
| 10 |Вашу судьбу предсказал провидец. Совершите два броска по таблице «Жизненные события», но не применяйте их результаты. Вместо этого Мастер выберет одно событие как грядущее событие вашего будущего (которое может произойти, а может и нет).  |
[img width=310 class="centerme" [https://i.imgur.com/8BuykWo.png]]


Воплощающие мудрость ааракокра теснее связаны со Стихийным Планом Воздуха и могут взывать к магии своей стихии.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 1. |
|^Взывающий к ветрам |^Ваша связь с Планом Воздуха позволяет вам сотворять заклинания, основанные на вашей стихии. Вам известен заговор //шквал //. При достижении 3 уровня, вы можете один раз использовать заклинание //туманное облако//. При достижении 5 уровня, вы можете один раз использовать заклинание //порыв ветра//.  Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Мудрость.  |
[img [https://i.imgur.com/lYaBvye.png]]
''Цена'': 25 см. ''Вес'': 0.5 кг.

Возможно, чаще всего используемые искателями приключений, воровские инструменты разработаны для взлома замков и обезвреживания ловушек. Владение этими инструментами также даёт вам общие знания о принципах действия ловушек и замков.

//''Компоненты.''//  Воровские инструменты включают в себя надфиль, набор отмычек, небольшое зеркальце с металлической рукояткой, набор ножниц с узкими лезвиями и пару щипцов.

//''История.''// Ваши познания в области ловушек дают вам дополнительные знания при ответах на вопросы о местах, знаменитых своими ловушками.

//''Анализ, Внимательность.''// Вы получаете дополнительные знания при поиске ловушек, потому что вам известны различные простые признаки, выдающие их наличие.

//''Установка ловушки.''//  Вы можете не только обезвреживать ловушки, но и устанавливать их. Как часть короткого отдыха вы можете создать ловушку из подручных средств. Результат вашей проверки становится сложностью для пытающегося обнаружить или обезвредить ловушку. Ловушка наносит урон, соответствующий материалам, использованным при создании (как то яд или оружие), или урон, равный половине результата вашей проверки, смотря что Мастер сочтёт более подходящим.

|!Действие| !Сл |
|Вскрыть замок   | Различная |
|Обезвредить ловушку    | Различная |
Если мертвого персонажа пытаются воскресить заклинанием или эффектом со временем сотворения дольше одного действия, начинается Испытание Воскрешения. Вклад в ритуал могут внести до трех персонажей. Мастер просит каждого из них совершить проверку характеристики, основанную на форме их вклада. Сл проверки определяется Мастер с учетом того, насколько весомым является вносимый вклад. Помеха или преимущество на такую проверку накладываются в зависимости от уместности вносимого вклада.

//Например, молитва богу, которому верно поклонялся мертвый персонаж, может потребовать проверку Интеллекта (Религия) легкой или средней Сл. В то время как настойчивое требование вернуть душу с Внешних Планов может потребовать проверку Харизмы (Запугивание) очень высокой или практически невыполнимой Сл. //

После того, как будет внесен весь вклад, Мастер совершает последнюю проверку Воскрешения без модификатора. Базовая Сл проверки равна 10 и увеличивается на 1 за каждое предыдущее успешное воскрешение персонажа. За каждый успешный вклад Сл уменьшается на 3, а каждый проваленный вклад увеличивает Сл на 1.

После успешной проверки Воскрешения душа персонажа (если она того желает) возвращается в тело, и ритуал успешно завершается. Персонаж получает один проваленный спасбросок от смерти, который нельзя снять никаким образом.

Если проверка провалена, душа не возвращается, а Сл его следующей проверки Воскрешения возрастает на 5.
* Если у вас есть воровские инструменты и вы владеете ими, совершите проверку Ловкости против Сл вскрытия замка, добавив к результату броска ваш бонус мастерства. При успехе вы вскрываете замок.
* Если у вас есть воровские инструменты, но вы не владеете ими, совершите успешную проверку Интеллекта Сл 10, чтобы понять как ими пользоваться, затем совершите проверку Ловкости против Сл вскрытия замка с помехой. При успехе вы вскрываете замок.
* Если у вас нет воровских инструментов, но вы владеете ими, вам необходимо раздобыть импровизированный аналог, при этом ваши знания позволяют понять, что именно вам нужно для создания кустарной отмычки. Совершите проверку Ловкости против Сл вскрытия замка с помехой, добавив к результату броска ваш бонус мастерства. При успехе вы вскрываете замок.
* Если у вас нет ни воровских инструментов, ни владения ими, вы не можете вскрыть замок.
//Стоимость перемещения:// половина вашей скорости.

Вы не можете встать, если у вас недостаточно перемещения или если скорость равна 0.
Захваченное существо может пытаться высвободиться. Для этого оно действием совершает проверку Силы (Атлетика) или Ловкость (Акробатика), противопоставленную проверке Силы (Атлетика) схватившего.

Высвобождение из других условий (например оков) может потребовать проверки Силы или Ловкости с обозначенной Сл.
[img  class="centerme" [https://i.imgur.com/vnD2iSj.jpg]]

Поскольку вы — высший эльф, у вас острый ум и вы знакомы, по крайней мере, с основами магии. Во многих мирах D&D существует два вида высших эльфов. Один вид (который включает серых эльфов и эльфов долин Серого Ястреба, сильванести Саги о Копье и солнечных эльфов Забытых Королевств) высокомерен и замкнут, считая себя выше не-эльфов и даже других эльфов. Другой вид (включающий высших эльфов Серого Ястреба, квалинести из Саги о Копье и лунных эльфов из Забытых Королевств) более распространён и дружелюбен, и часто встречается среди людей и других рас. 

У солнечных эльфов Фаэруна (также называемых золотыми эльфами или эльфами восхода) бронзовая кожа и волосы медного, чёрного или золотистого оттенка. У них золотые, серебристые или чёрные глаза. Лунные эльфы (также называемые серебряными или серыми эльфами) гораздо бледнее, с алебастровой кожей, имеющей иногда оттенок синего. У них часто серебристо-белые, чёрные или синие волосы, но и различные оттенки светлых, коричневых и рыжих тонов также не являются редкими. У них синие или зелёные глаза с золотыми вкраплениями.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Интеллекта увеличивается на 1. |
|^Заговор |^Вам известен один заговор из списка заклинаний волшебника. Базовой характеристикой для его использования является Интеллект. |
|^Эльфийская боевая подготовка |^Вы владеете воинским лёгким и одноручным клинковым оружием, а также простыми и воинскими луками. |
|^Дополнительный язык |^Вы можете говорить, читать и писать на ещё одном языке, на ваш выбор. |
Пребывая в ярости, вы можете в свой ход бонусным действием [[сбить с ног|Сбитый с ног / Лежащий ничком]] существо, размер которого не превышает ваш больше чем на одну категорию, когда попадаете по нему рукопашной атакой оружием.
Пребывая в ярости, вы можете во время перемещения использовать бонусное действие, чтобы переместиться через пространство враждебного существа, размер которого не превышает ваш больше чем на одну категорию. Существо должно преуспеть в спасброске Силы (Сл 8 + мод. Силы + бонус мастерства), иначе получит 1к12 + мод. Силы дробящего урона и будет [[сбито с ног|Сбитый с ног / Лежащий ничком]].
Пока вы пребываете в ярости, все враждебные существа в пределах 1 м от вас совершают с помехой броски атак, нацеленных не на вас и не на другое существо с таким же свойством. Существа не подвержены этому эффекту, если не могут видеть или слышать вас, либо если они не могут быть [[испуганы|Испуганный]].
Пребывая в ярости, вы получаете скорость полёта, равную вашей скорости ходьбы. Вы способны перемещаться таким образом только короткими рывками; вы падаете, если завершаете свой ход в воздухе, и ничто другое вас не удерживает.
Пребывая в ярости, если вы перещаетесь как минимум на 4 м по прямой к цели, прежде чем совершить по ней рукопашную атаку оружием, вы можете совершить по ней ещё одну рукопашную атаку оружием бонусным действием.
[img [https://i.imgur.com/lYaBvye.png]]
Вы — член гильдии ремесленников, знаток в какой-то области, связанный с другими мастеровыми. Вы крепко стоите на ногах в этом торгашеском мире, отделённые своим талантом и богатством от оков феодального строя. Когда-то вы учились у мастера, под опекой гильдии, и вот вы сами стали таким умельцем.

* ''Владение навыками:'' Проницательность, Убеждение
* ''Владение инструментами:'' Один вид [[инструментов ремесленников|Инструменты ремесленников]]
* ''Языки:'' Один на ваш выбор
* ''Экипировка:'' Инструменты ремесленника, котоырми вы владеете, рекомендательное письмо из гильдии, комплект одежды ремесленника, кошель с 15 см

!!!Специализация гильдии
Обычно гильдии основывают в городах, достаточно больших для того, чтобы сразу несколько ремесленников занимались одним общим делом. Однако ваша гильдия может быть рассредоточенной сетью ремесленников, где каждый работает в своей деревне. Определите вместе с Мастером характер вашей гильдии. Можете выбрать специализацию гильдии из таблицы, а можете определить её случайным образом.

Будучи членом гильдии, вы знаете, как создавать готовые предметы из сырья (отражается вашим владением определённым инструментом), а также основы торговли и бизнеса. Вопрос лишь в том, отказались ли вы от торговли в пользу приключений или стараетесь успевать и там, и там.

| !к20 |!Специализация гильдии |
| 1 |Алхимики и аптекари |
| 2 |Гончары и мастера керамики |
| 3 |Жестянщики, проволочники и литейщики |
| 4 |Каллиграфы, писцы и нотариусы |
| 5 |Каменщики и камнерезы |
| 6 |Картографы, землемеры и чертёжники |
| 7 |Кожевенники, меховщики и дубильщики |
| 8 |Кузнецы и бронники |
| 9 |Металлурги и мастера обработки металла |
| 10 |Пивовары и виноделы |
| 11 |Плотники, кровельщики и штукатуры |
| 12 |Повара и пекари |
| 13 |Сапожники и чеботари |
| 14 |Стеклодувы и стекольщики |
| 15 |Столяры, бондари и лучных дел мастера |
| 16 |Судостроители и парусные мастера  |
| 17 |Тележники и колёсных дел мастера |
| 18 |Ткачи и красильщики |
| 19 |Художники, иллюстраторы и маляры |
| 20 |Ювелиры и огранщики |


!!!Умение: Членство в гильдии
Будучи авторитетным и уважаемым членом гильдии, вы можете пользоваться особыми преимуществами, предоставляемыми этим членством. Ваши товарищи по гильдии при необходимости предоставят вам жилище и питание, и даже оплатят ваши похороны. В некоторых городах у гильдий есть место для сбора, и там можно потенциально встретить покровителей, союзников и наёмников.

Гильдии часто обладают значительной политической властью. Если вас обвинят в преступлении, гильдия может помочь, если существует вероятность оправдательного приговора. Благодаря гильдии вы получаете доступ к влиятельным политикам, если состоите в гильдии на хорошем счету. Для таких связей может потребоваться жертвование денег или магических предметов в казну гильдии.

Каждый месяц вы должны выплачивать гильдии 5 см. Если вы пропустите платёж, вы должны вначале оплатить все долги, и только тогда восстановите своё доброе имя в гильдии.

---

!!!Разновидность гильдейского ремесленника: Гильдейский купец
Вы можете состоять не в гильдии ремесленников, а в гильдии купцов, караванщиков и лавочников. Сами вы ничего не мастерите, но зарабатываете на жизнь, покупая и продавая творения чужих рук (или сырьё, необходимое ремесленникам). Ваша гильдия может быть большим торговым синдикатом (или семейством), с капиталовложениями по всему региону. Возможно, вы перевозите товары из одного места в другое, на корабле, в фургоне или караване, или покупаете их у бродячих торговцев и продаёте в своём маленьком магазинчике. В какой-то мере, жизнь странствующего торговца ближе к приключениям, чем жизнь ремесленника.

Вместо владения ремесленным инструментом вы можете овладеть инструментами навигатора или дополнительным языком. А вместо наличия комплекта одежды ремесленника и ремесленных инструментов вы можете начать игру с комплектом дорожной одежды, мулом и телегой.

---

!!!Персонализация
Гильдейские ремесленники мало чем отличаются от обывателей, пока они не откладывают свои инструменты в сторону и не начинают карьеру искателя приключений. Они понимают ценность тяжёлого труда и важность общности, но они так же как другие подвержены грехам жадности и алчности.

| !к8 |!Черта характера |
| 1 |Я считаю, что всё, что делается, должно делаться правильно. Ничего не могу с этим поделать — я перфекционист. |
| 2 |Я сноб, свысока смотрящий на тех, кто не может оценить изящное искусство. |
| 3 |Мне всегда нужно знать, как всё вокруг устроено, и как нужно обращаться с другими. |
| 4 |У меня много остроумных афоризмов и есть пословицы на любой случай. |
| 5 |Я груб с теми, у кого нет моей тяги к честному и справедливому труду. |
| 6 |О своей профессии я могу говорить часами. |
| 7 |Я не могу легко расставаться с деньгами, и могу сколь угодно долго торговаться. |
| 8 |Благодаря работе я прославился, и хочу, чтобы все это ценили. Меня всегда потрясает, когда другие говорят, что не слышали обо мне. |

| !к6 |!Идеал |
| 1 |''Сообщество.'' Все цивилизованные народы обязаны укреплять сообщество и обеспечивать безопасность цивилизации. |
| 2 |''Великодушие.'' Талант был вручён мне, чтобы я использовал его на благо всего мира. |
| 3 |''Свобода.'' Все должны быть свободны, чтобы жить так, как хочется им. |
| 4 |''Жадность.'' Я просто занимаюсь этим из-за денег. |
| 5 |''Народ.'' Я предан своему народу, а не идеям. |
| 6 |''Стремление.'' Я усердно работаю над тем, чтобы стать в своём деле лучшим. |

| !к6 |!Привязанность |
| 1 |Мастерская, где я учился ремеслу, для меня — самое важное место в мире. |
| 2 |Я создал кое для кого удивительную работу, но посчитал его недостойным. Я всё ещё ищу того, кто окажется достоин её. |
| 3 |Я по гроб жизни обязан гильдии за то, что она сделала меня тем, кто я есть. |
| 4 |Богатство мне нужно для завоевания сердца возлюбленной. |
| 5 |Когда-нибудь я вернусь в гильдию и докажу, что я лучший из всех. |
| 6 |Я мщу силам зла, которые уничтожили моё торговое дело и разрушили мою жизнь. |

| !к6 |!Слабость |
| 1 |Я сделаю всё что угодно, чтобы заполучить что-то редкое или очень ценное. |
| 2 |Мне всегда кажется, что меня пытаются обжулить. |
| 3 |Никто не должен знать, что я однажды украл деньги из казны гильдии. |
| 4 |Мне всегда мало того, что у меня есть — всегда нужно больше. |
| 5 |Я готов убить ради получения благородного титула. |
| 6 |Я ужасно завидую тем, кто может превзойти мой труд. Куда бы я ни пошёл, меня окружают конкуренты. |
[img width=450 class="centerme" [https://i.imgur.com/Dt0LOD9.png]]

<<tabs "[tag[Гит - описание]]" "Описание гитов" "$:/state/tab1">>
[img width=400 class="centerme" [https://i.imgur.com/7p2AbxB.png]]

В крепостях на плане Лимбо гитцераи оттачивают свой разум до остроты бритвы.

|!Особенность |!Описание |
|^Мировоззрение |^Гитцераи склоняются к законопослушно-нейтральному мировоззрению. Их строгое обучение психическим навыкам требует безжалостной дисциплины. |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 2. |
|^Ментальная дисциплина |^Под руководством наставников гитцераи учатся управлять собственным разумом. Вы получаете преимущество на спасброски от очарования и страха. |
|^Псионика гитцераев |^При достижении 3 уровня вы можете один раз использовать заклинание //щит//. При достижении 5 уровня, вы также можете использовать заклинание //видение невидимого//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Мудрость. Заклинания, сотворяемые с помощью данной особенности, не требуют материальных компонентов. |
|^Психическая защита |^Если вы не носите ни доспех, ни щит, ваш КД равен 10 + мод. Ловкости + мод. Мудрости. |
[img  class="centerme" [https://i.imgur.com/WciEakn.png]]

Гитъянки жестоки, их с детства воспитывают как воинов.

|!Особенность |!Описание |
|^Мировоззрение |^Гитъянки склонны к законопослушному-злому мировоззрению. Они агрессивны, высокомерны и остаются верными слугами своей королевы-лича, Влаакит. Гитъянки-отступники стремятся к хаотичности.  |
|^Увеличение характеристик |^Значение вашей Силы увеличивается на 2. |
|^Воинское воспитание |^Вы владеете лёгкими и средними доспехами, а также простым и воинским клинковым оружием.  |
|^Декадентское мастерство |^В вечном городе Ту’нарате у гитъянки полно времени чтобы чему-нибудь научиться. Вы изучаете один язык по вашему выбору и владеете одним навыком или инструментом по вашему выбору. |
|^Псионика гитъянки |^При достижении 5 уровня, вы можете использовать заклинание //туманный шаг//. Вы восстанавливаете способность накладывать это заклинание с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для его использования является Интеллект. |
[img width=300 class="centerme" [https://i.imgur.com/JumdCDf.png]]

Глубинные гномы или свирфнеблины являются прагматичными и зачастую хмурыми соплеменниками гномов, живущие глубоко под землёй. Подземье полно опасностей, и поэтому глубинные гномы и проводят большую часть своего времени, всего-навсего стараясь выжить. 


|!Особенность |!Описание |
|^Возраст |^Недолгоживущие по сравнению с другими гномами, глубинные гномы, как и люди, достигают зрелости и считаются взрослыми к 25 годам. Они живут от 200 до 250 лет, хоть и из-за тяжкого труда и опасностей Подземья, они зачастую умирают раньше времени.  |
|^Мировоззрение |^Свирфнеблины считают, что выживание зависит от взаимопонимания с другими существами и стараются не заводить себе врагов, и поэтому предпочитают нейтральное мировоззрение. Они редко желают другим зла и вряд ли рискнут жизнью, защищая интересы другого.  |
|^Размер |^В отличии от других гномов вес свирфнеблинов составляет от 35 до 55 кг. Ваш размер — Маленький. |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 1. |
|^Каменный камуфляж |^Вы совершаете с преимуществом проверки Ловкости (Скрытность), когда пытаетесь спрятаться на каменистой местности и под землёй. |
|^Маска глубин |^Вы можете один раз сотворить заклинание //маскировка//. Если вы, будучи под действием этого заклинания, находитесь под прямым солнечным светом, существо, обследующую вашу внешность для обнаружения того, что вы замаскированы, совершает свою проверку с преимуществом. Вы восстанавливаете способность накладывать это заклинание с помощью этой особенности, когда закончите продолжительный отдых. Базовой характеристикой для его использовнаия является Интеллект. |
|^Ночное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение, и в темноте так, как будто это тусклое освещение. В темноте вы не можете различать цвета, только оттенки серого. |
|^Дополнительный язык |^Вы можете говорить, читать, и писать на Подземном языке. |
[img [https://i.imgur.com/yomHRSX.png]]

<<tabs "[tag[Гном - описание]]" "Описание гномов" "$:/state/tab1">>
[img [https://i.imgur.com/w8fKzwt.png]]

<<tabs "[tag[Гоблин - описание]]" "Описание гоблинов" "$:/state/tab1">>
[img width=400 class="centerme" [https://i.imgur.com/k10B6bJ.png]]

<<tabs "[tag[Голиаф - описание]]" "Описание голиафов" "$:/state/tab1">>
В обычных условиях необходимо отслеживать только еду для персонажей. Предполагается, что вода легкодоступна в прудах и ручьях, а животные могут ежедневно пастись/охотиться самостоятельно.

Суровая местность, такая как пустыня, океан, горы, подземье или арктика, требует отслеживания пищи и воды как для персонажей, так и для животных.

Существа, которые не едят и не пьют, подвергаются эффектам [[истощения|Истощённый]]. [[Истощение|Истощённый]], вызванное голодом или жаждой, нельзя устранить, пока персонаж не поест и не попьёт в надлежащем объёме. Требования к еде и воде зависят от размера существа, как показано в таблице ниже.

|!Размер |!Еды в день |!Воды в день |
|Крохотное |0.25 кг |0.5 л |
|''Маленькое'' |''0.5 кг'' |''2 л'' |
|''Среднее'' |''1 кг'' |''4 л'' |
|Большое |4 кг |16 л |
|Огромное |16 кг |64 л |
|Громадное |64 кг |256 л |

!!!Голод
В конце каждого дня без еды существо должно преуспеть в проверке Телосложения (Выносливость) со Сл = 10 + 1 за каждый день без еды, иначе получит одну степень [[истощения|Истощённый]].

* Существо может растягивать рационы, употребляя половину пищи. Употребление половины требуемого количества еды в день считается как полдня без пищи.
* Употребление требуемого количества пищи снижает степень истощения на 1, полученную от голода, в конце дня.
* Счётчик дней без еды обнуляется, если у существа нет степеней истощения, полученных от голода.

!!!Жажда

В конце каждого дня без воды существо должно преуспеть в проверке Телосложения (Выносливость) со Сл = 15 + 5 за каждый день без воды, иначе получит одну степень [[истощения|Истощённый]]. Существо, уже имеющее как минимум одну степень истощения, вместо этого получает сразу две степени.

* Употребление половины требуемого количества воды в день считается как полдня без воды.
* Употребление требуемого количества воды снижает степень истощения на 1, полученную от жажды, в конце дня.
* Счётчик дней без воды обнуляется, если у существа нет степеней истощения, полученных от жажды.
* Потребность в воде удваивается, если стоит жаркая погода.


[img width=210 class="centerme" [https://i.imgur.com/IpL9iK1.png]]

Будучи горным дварфом, вы являетесь сильным и выносливым, приспособленным к жизни в суровой местности. Вы довольно высоки (по дварфской мерке), и скорее светлокожи. Щитовые дварфы из северного Фаэруна, а также правящий клан хиларов и благородный клан деваров из Саги о Копье, всё это горные дварфы. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Силы увеличивается на 2. |
|^Владение доспехами дварфов |^Вы владеете лёгкими и средними доспехами. |
[img width=310 class="centerme" [https://i.imgur.com/Vj8IDgT.png]]

В глазах большинства цивилизованных рас горные орки являются очевидными воплощениями чудовищности. Их головы с крупными клыками, свиноподобными носами и глубоко посаженными глазами покоятся на широченных шеях, так что порой сложно понять, есть ли у них шея вовсе. Горные орки часто вплетают мелкие кости в свои косы жестких чёрных волос. Они не отличаются чистоплотностью, а их тела украшены шрамами и боевым раскрасом.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Силы или Телосложения на ваш выбор увеличивается на 1. |
|^Захват с разбега |^Если вы перемещаетесь с помощью особенность Агрессивный, вы можете частью того же бонусного действия попытаться совершить особую атаку Захват против существа на вашем пути.  При успехе, вы врезаетесь в цель и оба падаете ничком. Цель схвачена и получает дробящий урон равный половине вашего уровня + мод. вашей Силы. При провале вы промахиваетесь и падаете ничком в 2 м позади цели. |
|^Прирождённый атлет |^Вы владеете навыком Атлетика. |
[img [https://i.imgur.com/lYaBvye.png]]
Значение грузоподъёмности показывает, какой максимальный вес (в кг) вы можете переносить на себе, и напрямую зависит от вашего значения Силы. Для Средних существ грузоподъёмность = Сила x8. Для существ других размерных категорий грузоподъёмность увеличивается/уменьшается в 2 раза за каждую размерную категорию больше/меньше Средней.

Вы можете толкать, тянуть и отрывать от земли вес в кг, вдвое превышающий вашу грузоподъёмность. Если вы толкаете или тянете вес, превышающий грузоподъёмность, ваша скорость падает до 1 м.

Если вы несёте вес, превышающий ½ вашей грузоподъёмности, вы становитесь ''нагруженным'', что означает, что ваша скорость уменьшается на 2 м. 

Если вы несёте вес, превышающий ¾ вашей грузоподъемности, вы становитесь ''сильно нагруженным'', что означает, что ваша скорость уменьшается ещё на 2 м, и вы совершаете с помехой проверки характеристик, броски атаки и спасброски, использующие Силу, Ловкость или Телосложение.

Вещи, надетые на персонажа, весят в два раза меньше для расчета нагрузки.

У большинства обычных народов есть одна общая черта: они проживают свою жизнь, никогда не путешествуя более чем на несколько миль от места, где они родились. 

Вы не один из таких людей. 

Вы родом из места столь отдаленного, что мало кто из простого люда знает, что оно вообще существует, и вполне возможно, что даже если некоторые люди, которых вы встретите, и слышали о вашей родине, то знают они лишь название и несколько спорных слухов. Вы пришли в эту часть мира по собственным причинам, которыми вы могли захотеть или не захотеть поделиться с другими. 

Хотя вы, несомненно, найдете некоторые обычаи этих земель странными и сбивающими с толку, вы также можете быть уверены в том, что некоторые вещи, которые местные люди воспринимают, как должное, будут для вас невиданными чудесами. К тому же, к добру это или к худу, но куда бы вы ни отправились, вы - диковина, представляющая интерес для окружающих. 

* ''Владение навыками:'' Внимательность, Проницательность
* ''Владение инструментами:'' Один [[музыкальный инструмент|Музыкальные инструменты]] или [[игровой набор|Игровой набор]]
* ''Языки:'' Один на ваш выбор
* ''Экипировка:'' Комплект дорожной одежды, музыкальный инструмент или игровой набор, которым вы владеете, схематичная карта вашей родины, небольшое ювелирное украшение стоимостью 10 см, исполненное в стиле вашей родины, и кошель с 25 см

!!!Зачем вы здесь?
Далекий путешественник мог отправиться в путешествие по одной из многих причин, и отъезд с его или её родины мог быть добровольным или вынужденным. Чтобы определить, почему вы так далеко от дома, совершите бросок по таблице ниже или выберите один из предложенных вариантов. 

| !к6 |!Причина | !к6 |!Причина |
| 1 |Беглец | 4 |Турист |
| 2 |Изгой | 5 |Скиталец |
| 3 |Паломник | 6 |Эмиссар |


!!!Умение: Притягивающий взгляды
Ваш акцент, манеры, обороты речи и, возможно, даже ваша внешность - все это выдаёт в вас иноземца. Куда бы вы ни пошли, любопытные взгляды устремлены в вашу сторону, что может быть неприятно, но вы также вызываете дружеский интерес ученых и других людей, которых заинтриговали далекие страны, не говоря уже о простых людях, которые жаждут услышать истории о вашей родине.

Вы можете пользоваться этим вниманием для получения доступа к людям и местам, которого в противном случае у вас не было бы, для вас и ваших попутчиков. Благородным лордам, ученым и зажиточным купцам, может быть интересно услышать о вашей далекой родине и её народе.

!!!Персонализация


| !к6 |!Черта характера |
| 1 |Мои представления о личном пространстве расходятся с таковыми окружающих. Нечаянно я вторгаюсь в личное пространство других, или, наоборот, реагирую на вторжение в моё собственное, что происходит из-за разницы обычаев.   |
| 2 |Мои представления о том, что является едой, а что нет, расходятся с таковыми окружающих. Я нахожу трапезные традиции окружающих восхитительными, странными или возмутительными.  |
| 3 |У меня строгий кодекс чести или чувство приличия, которые не легко понять окружающим.  |
| 4 |Я выражаю привязанность или презрение не свойственным для окружающих образом. |
| 5 |Я выражаю почтение моим божествам, способами, которые кажутся чужими в этих землях.  |
| 6 |Я начинаю или оканчиваю свой день традиционными ритуалами, которые незнакомы окружающим.  |


| !к6 |!Идеал |
| 1 |''Открытость.'' Мне есть чему поучиться у добрых людей, которых я встречаю на своем пути.  |
| 2 |''Сдержанность.'' Будучи новичком в этих странных землях, я веду себя осторожно и уважительно. |
| 3 |''Приключения. ''Я далеко от дома, и все это необычно и восхитительно! |
| 4 |''Хитрость. ''Хотя я могу не знать их путей, они не знают и моих, что может быть мне на руку. |
| 5 |''Любознательность.'' Все вокруг ново для меня, но я хочу учиться. |
| 6 |''Подозрительность.'' Я должен быть осторожен, потому что здесь у меня нет возможности отличить друга от врага. |

| !к6 |!Привязанность |
| 1 |Пока у меня есть этот талисман с моей родины, я могу столкнуться с любыми невзгодами в чужой стране. |
| 2 |Боги моего народа - утешение для меня вдали дома. |
| 3 |У меня нет большей цели, чем служение своему народу.|
| 4 |Моя свобода - моё самое драгоценное достояние. Я больше никому не позволю забрать её у меня.  |
| 5 |Я очарован красотой и чудесами этой новой земли. |
| 6 |Хотя у меня не было выбора, я сожалею о том, что мне пришлось оставить своих любимых. Я надеюсь однажды увидеть их снова.  |

| !к6 |!Слабость |
| 1 |Я тайно (или не очень) убежден в превосходстве моей собственной культуры над культурой этой чужой страны.  |
| 2 |Я делаю вид, что не понимаю местного языка, чтобы избежать нежелательного общения. |
| 3 |У меня слабость к новым ощущениям и прочим искушениям этой земли. |
| 4 |Мне не нравятся некоторые действия и мотивы людей в этой стране, потому что эти люди отличаются от меня. |
| 5 |Я считаю приверженцев других богов обманутыми невинными в лучшем случае или невежественными глупцами в худшем случае. |
| 6 |Я питаю слабость к экзотической красоте жителей этих земель. |
При сотворении заклинания с дистанцией 1 м и более, вы можете потратить 1 очко чародейства, чтобы удвоить его дистанцию.

При совторении заклинания с дистанцией «касание», вы можете потратить 1 очко чародейства, чтобы увеличить его дистанцию до 6 м.
Вы можете сотворить заклинание основным действием и другое заклинание бонусным действием за один ход, если одно из них не выше 2 уровня.

Данное правило никак не влияет на время сотворения заклинания. Вы все еще не можете сотворить два заклинания со временем сотворения “одно действие” в один и тот же ход (если не находитесь под эффектом, дающим вам дополнительное действие).
[img [https://i.imgur.com/QtMrJaj.png]]

<<tabs "[tag[Дварф - описание]]" "Описание дварфов" "$:/state/tab1">>
Если вы перемещаетесь, вы можете тащить или нести [[схваченное|Схваченный]] существо вместе с собой, но ваша скорость уменьшается вдвое, если только существо не меньше вас как минимум на две категории.
При сотворении заклинания, целью которого является только одно существо, с дистанцией «касание» или 1 м и более, вы можете потратить очки чародейства в количестве равном уровню заклинания (1 для заговоров), чтобы выбрать целью второе существо в пределах дистанции этого заклинания.
Вы живёте в достатке и комфорте. Вы вращаетесь среди самых влиятельных членов общества. У вас превосходное жилище, возможно, особняк в лучшей части города или несколько комнат в отличной гостинице. Вы трапезничаете в лучших ресторанах, одеваетесь у модных портных, и у вас есть слуги на все случаи жизни. Вы получаете приглашения на сборы богатых и влиятельных, и вечерами собираетесь в компании политиков, глав гильдий, верховных жрецов и дворян. Вам угрожает ложь и предательство. Чем вы богаче, тем больше шанс, что вас затянут в политические интриги.  
Если вы в свой ход совершаете действие, это может быть одно из описанных ниже действий, действие, дарованное классом или особым умением, или импровизированное действие. 

Бонусные действия отмечены звёздочкой ''*''.

Если вы описываете действие, не упомянутое в правилах, Мастер сообщает, возможно ли это действие, и какие проверки нужно совершить для определения успешности. 

<<tabs "[tag[Действия в бою]nsort[]]" "Атака" "$:/state/tab1" "tc-vertical">>
[img  class="centerme" [https://i.imgur.com/eYj7eUD.png]]

<<tabs "[tag[Дженази - описание]]" "Описание дженази" "$:/state/tab1">>
[img width=270 class="centerme" [https://i.imgur.com/xkGSiaU.png]]

Плеск волн, брызги морской пены на ветру, океанские глубины — все эти вещи взывают к вашему сердцу. Вы странствуете свободно и гордитесь своей независимостью, хотя некоторые считают вас эгоистом. 

Большинство дженази воды выглядит так, будто только что закончили купаться, с бисером влаги на волосах и коже. Они пахнут свежим дождём и чистой водой. Чаще всего их кожа синяя или зелёная, у большинства из них огромные глаза иссиня-чёрного цвета. Волосы дженази воды могут свободно раскачиваться и колебаться, как будто находятся под водой. Голос некоторых из них напоминает песнь кита или журчащий поток. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 1. |
|^Всплеск воды |^Когда вы находитесь в воде или под сильным дождём, вы можете использовать действие Рывок в качестве бонусного действия. Сразу после использования этой особенности, вы можете выбрать существу в пределах 2 м от себя. Это существо также может совершить Рывок бонусным действием до конца своего следующего хода. |
|^Призыв волны |^Вам известен заговор //формирование воды//. При достижении 5 уровня, вы можете один раз использовать заклинание //приливная волна//. Вы восстанавливаете способность накладывать это заклинание с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для использования этих заклинаний является Харизма. |
|^Сопротивление кислоте |^У вас есть сопротивление к урону кислотой. |
|^Тело амфибии |^Ваша стихийная кровь позволяет вам свободно перемещаться в воде. Вы можете дышать и на суше, и под водой, а ваша скорость плавания равна вашей скорости ходьбы. |



[img width=310 class="centerme" [https://i.imgur.com/QavdgBi.png]]

Будучи воздушным дженази, вы произошли от джинна. Как изменчива погода, так и ваше настроение очень быстро переходит от спокойного к буйному и жестокому, но эти бури не длятся долго. 

Кожа, волосы и глаза дженази воздуха обычно светло-голубого цвета. Обычно их сопровождает слабый, но постоянный ветерок, взъерошивающий их волосы и колышущий одежду. Некоторые из дженази воздуха разговаривают хриплым голосом со слабым эхом. У некоторых на коже есть странные узоры, а на голове могут расти кристаллы. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 1. |
|^Бесконечное дыхание |^Пока вы дееспособны, вы можете задерживать дыхание на неограниченное время. |
|^Объятия ветра |^Дальность ваших прыжков удвоена. Пока вы дееспособны, выбранные вами падающие существа в пределах 2 м от вас (включая вас), замедляют свою скорость падения до 12 м в раунд. Существа, приземляющиеся под действием этой особенности, не получают урона от падения.  |
|^Порывистый ветер |^Вам известен заговор //шквал//. При достижении 5 уровня, вы можете один раз использовать заклинание //защитный ветер//. Вы восстанавливаете способность накладывать это заклинание с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для использования этих заклинаний является Харизма. |
|^Сопротивление электричеству |^У вас есть сопротивление к урону электричеством. |




[img width=210 class="centerme" [https://i.imgur.com/tkEvh7j.png]]

Будучи дженази земли, вы произошли от жестокого и жадного дао, хотя вам не обязательно быть злым. В некоторой мере вы унаследовали контроль над землёй, вас радует её прочность и твёрдость. Вы склонны избегать поспешных решений, делая длительную паузу, чтобы рассмотреть все варианты. 

Стихия земли проявляется в разных дженази по разному. У некоторых с тела постоянно сыплются частички пыли, а к их одежде так и липнет грязь, как бы часто они её не чистили. Другие же блестящие и отполированные, как драгоценные камни, с тёмно-коричневой или чёрной кожей и глазами, сверкающими как агаты. Дженази земли также могут иметь гладкую металлическую плоть, тусклую кожу с пятнами ржавчины, галечно-грубую шкуру, а могут быть покрыты крошечными вкраплениями кристаллов. Самое невероятное — это трещины в их плоти, из которых исходит слабое свечение. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Телосложения увеличивается на 1. |
|^Движение земли |^Вам известен заговор //лепка земли//. При достижении 5 уровня, вы можете один раз использовать заклинание //бесследное передвижение//, без необходимости в материальном компоненте. Вы восстанавливаете способность накладывать это заклинание с помощью этой особенности, когда завершаете продолжительный отдых. Существа получают преимущества от эффектов этого заклинания, только когда передвигаются по немагической и необработанной земле или камню. Базовой характеристикой для использования этих заклинаний является Харизма. |
|^Каменная шкура |^Ваша кожа тверда как камень. Пока вы не носите доспехов, ваш КД равен 13 + ваш мод. Ловкости. Вы можете использовать КД своей каменной шкуры, если доспехи, которые вы носите, дают вам более низкий КД. При использовании каменной шкуры, эффект от щита применяется как обычно. Кроме того, вы имунны к состоянию "окаменевший". |
|^Твёрдая поступь |^Вы совершаете проверки характеристик и спасброски против эффектов, нацеленных на то, чтобы сбить вас с ног, с преимуществом. |
|^Туннелепроходчик |^Вы можете, потратив действие, получить скорость копания 3 м до начала своего следующего хода. С помощью этой скорости вы можете перемещаться сквозь немагическую и необработанную землю или камень. Используяю эту скорость, вы можете оставлять за собой туннель, достаточный для беспрепятственного перемещения Средних или меньших существ. |




[img width=250 class="centerme" [https://i.imgur.com/zTrJera.png]]

Будучи огненным дженази, вы унаследовали изменчивое настроение и острый ум ифрита. Вы нетерпеливы и делаете поспешные выводы. Вместо того чтобы скрывать свой необычный вид, вы демонстрируете его. 

Почти все дженази огня лихорадочно горячи, как будто внутри них горит огонь, а впечатление усиливает их пламенно-красного, угольно-чёрного или пепельного цвета кожа. Головы тех, что больше похожи на людей, покрыты огненно-рыжими волосами, которые извиваются при сильных эмоциях, но самые экзотичные те, у которых на головах танцует настоящее пламя. Голос огненного дженази может звучать как треск костра, а их глаза вспыхивают от злости. От некоторых из них исходит слабый запах серы. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Интеллекта увеличивается на 1. |
|^Горящее прибежище |^Пока вы дееспособны, выбранные вами существа в пределах 2 м от вас (включая вас) совершают спасброски против эффектов чрезвычайной жары с преимуществом. |
|^Ночное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение, и в темноте так, как будто это тусклое освещение. Ваша связь со Стихийным Планом Огня сделала ваше ночное зрение особенным: всё, что находится в темноте, для вас выглядит как оттенки красного цвета. |
|^Обжигающий взгляд |^Потратив действие, вы можете взглядом поджечь горючий предмет в пределах 6 м от вас, который никто не несёт и не носит.  |
|^Пылающее сердце |^Вам известен заговор //сотворение пламени//. При достижении 5 уровня, вы можете один раз использовать заклинание //раскалённый металл//, без необходимости в материальном компоненте. Вы восстанавливаете способность накладывать это заклинание с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для использования этих заклинаний является Харизма. |
|^Сопротивление огню |^У вас есть сопротивление к урону огнём. |
---

!!! [img[1.png]] Заклинания источника
Вы узнаёте заклинания источника на указанных уровнях чародея. Заклинания источника считаются для вас заклинаниями чародея и не учитываются при подсчёте количества известных вам заклинаний чародея.

Когда вы получаете уровень в этом классе, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний волшебника, колдуна или чародея того же уровня. Новое заклинание должно принадлежать школе Воплощения или Преобразования.

| !Ур. |!Заклинания |
| !1 |//власть над огнём//, //огонь фей//, //снаряд хаоса// |
| !3 |//корона безумия//, //раскалённый металл// |
| !5 |//мерцание//, //призыв низших демонов// |
| !7 |//Отилюков упругий шар//, //смятение// |
| !9 |//оживление вещей//, //создание прохода// |

---

[img [https://i.imgur.com/lYaBvye.png]]
Длиннозубые шифтеры агрессивны и свирепы, но они формируют крепкие узы со своими друзьями. Многие длиннозубые шифтеры обладают собачьими чертами, которые становятся более выраженными во время обращения, но они могут происходить и от тигров, гиен или других хищников.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Силы увеличивается на 2, а значение Ловкости увеличивается на 1. |
|^Свирепость |^Вы владеете навыком Запугивание. |
|^Особенность обращения |^Пока вы обращены, вы можете бонусным действием совершить безоружную атаку своими длинными клыками. Если вы совершаете атаку клыками, вы наносите колющий урон, равный 1к6 + ваш мод. Силы, вместо дробящего урона, обычного для безоружного удара. |
Добытчик обеспечивает путешествующую группу едой и водой. Если добытчик провалится, ваши припасы иссякнут задолго до окончания путешествия. Убедитесь в том, что заготовили достаточно припасов, если в вашей группе нет умелого добытчика.

Если вы взяли на себя роль добытчика, совершите проверку Мудрости (Сл броска установлена в приведенной таблице) в конце дня, чтобы определить сколько еды и воды вы добыли в течении дня. Наличие снаряжения для охоты и рыбалки или владение навыком Выживание позволят вам добавить бонус мастерства к броску.

''Успех''. Вы добыли 2к4 рациона еды или воды (вы можете разделить их по вашему усмотрению).

''Провал''. Вы не смогли ничего найти.

| !Сл |!Местность |
| 5 |Густой и богатый лес; еда и вода повсеместно |
| 10 |Лес; побережье; обилие еды и сичтой воды |
| 15 |Редкий лес или насаждение; добыча еды требует активной охоты, а воду сложнее найти |
| 20 |Сухая открытая равнина; малое количество еды или чистой воды |
| 25 |Пустыня; бесплодная или загрязнённая земля; еда крайне редка, а вода требует очистки |
| 30 |Токсичные или осквернённые мёртвые земли; еда несъедобна, а вода отравлена |
Ваш покровитель дарует вам гримуар, который называется «Книга Теней». Выберите 3 заговора из списков заклинаний любых классов. Пока книга с вами, вы можете сотворять эти заговоры неограниченно. Они не учитываются при подсчёте максимального числа заговоров, которые вы можете знать, и считаются для вас заклинаниями колдуна. 

Если вы теряете книгу, вам нужно провести ритуал длительностью в 1 час, чтобы получить новую от своего покровителя. Вы можете провести этот ритуал во время короткого или продолжительного отдыха. Предыдущая книга при этом уничтожается. 

Книга обращается в прах при вашей смерти.
Вы можете действием или при броске инициативы создать оружие договора в своей свободной руке. Вы сами выбираете форму этого простого или воинского оружия, не являющегося стрелковым, каждый раз, когда создаёте. Кроме того вы получаете следующие преимущества: 

* вы получаете владение этим оружием, пока используете его;
* когда вы атакуете этим оружием, вы можете использовать для бросков атаки и урона свой модификатор Харизмы вместо модификатора Силы или Ловкости;
* это оружие считается магическим при определении преодоления сопротивления и иммунитета от немагических атак и урона; 
* начиная с 5 уровня колдуна, если вы совершаете действие Атака, вы можете совершить две атаки этим оружием вместо одной.

Оружие договора исчезает, если оно в течении 1 минуты находилось дальше 1 м от вас, если вы используете это умение ещё раз, отзываете оружие (действие не требуется) или умираете. 

Вы можете трансформировать одно магическое оружие в своё оружие договора, проведя специальный ритуал, держа это оружие. Ритуал совершается 1 час, его можно провести во время отдыха. Впоследствии вы можете отозвать оружие, помещая его между измерениями. Оно будет появляться в руке, когда вы будете в дальнейшем создавать оружие договора. 

Оружие перестаёт быть оружием договора, когда вы умираете, выполняете часовой ритуал с другим оружием или когда вы исполните ритуал длиной в час для того, чтобы разорвать связь. Оружие материализуется у ваших ног, если в момент разрыва связи оно находилось между измерениями. 
Ваш покровитель дарует вам особый амулет - талисман, который может быть полезен вам или кому-то ещё, носящему его. Когда носитель талисмана проваливает проверку характеристик, он может совершить бросок к4 и добавить выпавшее число к результату. 

Это умение может быть использовано количество раз, равное вашему бонусу мастерства. Потраченные использования этого умения восстанавливаются после завершения продолжительного отдыха.

Если вы теряете талисман, вам нужно провести ритуал длительностью в 1 час, чтобы получить новый от своего покровителя. Вы можете провести этот ритуал во время отдыха. Предыдущий талисман при этом уничтожается. 

Талисман обращается в прах при вашей смерти.
Вы узнаёте заклинание //поиск фамильяра// и можете сотворять его как ритуал. Это заклинание не учитывается при подсчёте числа известных вам заклинаний. 

Когда вы сотворяете это заклинание, вы можете выбрать одну из обычных форм для вашего фамильяра, либо одну из особых форм: бес, квазит, псевдодракон или спрайт. 

Если вы выбрали псевдодракона, он получает возможность использовать следующее действие:

<<<
''Невидимость.'' Псевдодракон магическим образом становится невидимым, пока не атакует, или пока не окончится его концентрация (как при концентрации на заклинании). Все снаряжение, которое псевдодракон несёт или носит, становится невидимым вместе с ним.
<<<

Кроме того, когда вы совершаете действие Атака, вы можете вместо одной своей атаки позволить атаковать один раз фамильяру. При этом он совершает свою атаку реакцией. 
Вы неустанно ищете истину. Возможно, вами движет вера в закон и чувство всеобщей справедливости, а может быть, этот самый закон вас подвёл и и вы стремитесь всё исправить. Вы могли стать свидетелем чего-то удивительного или ужасного, и теперь вам необходимо узнать больше об этой скрытой правде. Или может быть, вы детектив по найму, раскрывающий секреты для хорошо оплачиваемых клиентов. В какие бы тайны вы ни были втянуты - в местные преступления или в заговоры, охватывающие всё королевство, вами движет личная потребность отыскивать даже самые неуловимые зацепки и раскрывать то, что другие прячут в тени. 

* ''Владение навыками:'' Два на ваш выбор из следующих: Анализ, Внимательность или Проницательность
* ''Владение инструментами:'' [[Воровские инструменты|Воровские инструменты]], [[набор для грима|Набор для грима]]
* ''Экипировка:'' Увеличительное стекло, улика из прошлого дела, комплект одежды исследователя и кошель с 10 см

!!!Путь к тайнам
Ваше первое дело повлияло на типы тайн, которые вас интересуют. Почему это дело было таким важным, личным или травмирующим? На кого оно повлияло, кроме вас? Почему и как вы оказались вовлечены в это дело? Было ли оно раскрыто? Как оно натолкнуло вас на путь расследования других тайн? Совершите бросок или выберите из таблицы ниже, чтобы развить тайну, с которой началась ваша карьера дознавателя.

| !к8 |!Дело |
| 1 |Друг был несправедливо обвинен в убийстве. Вы выследили настоящего убийцу, доказав невиновность своего друга и начав свою карьеру детектива. |
| 2 |Вам сказали, что вы пропали на несколько недель. Когда вас нашли, вы ничего не помнили о своем исчезновении. Теперь вы пытаетесь выяснить, что с вами произошло. |
| 3 |Вы помогли духу обрести покой, найдя его пропавший труп. С тех пор другие призрачные клиенты обращаются к вам, чтобы вы помогли им обрести покой. |
| 4 |Вы узнали, что монстры, терроризирующие ваш дом, были иллюзией, созданной жестоким магом. Маг сбежал, но вы продолжаете раскрывать магические мистификации. |
| 5 |Вас несправедливо обвинили и осудили за преступление. Вам удалось бежать и помочь другим избежать того, что выпало на вашу долю, даже несмотря на преследование со стороны закона. |
| 6 |Вы пережили разрушительное применение магического устройства, которое уничтожило ваш дом. Вас нашли члены секретной организации. Теперь вы работаете с ними, выслеживая опасные сверхъестественные явления и не давая им причинить вред. |
| 7 |Вы обнаружили доказательства заговора, лежащего в основе общества. Вы пытались разоблачить этот таинственный заговор, но вам никто не поверил. Вы до сих пор пытаетесь доказать, что все, что вы знаете, правда. |
| 8 |Вы получили работу в агентстве, которое расследует преступления, которые не могут раскрыть местные правоохранительные органы. Вы часто задаетесь вопросом, что вам дороже - правда или зарплата. |

!!!Умение: Официальный запрос
Вы обладаете опытом получения доступа к людям и местам, чтобы раздобыть нужную вам информацию. Благодаря сочетанию быстрой речи, решительности и официальной документации вы можете получить доступ к месту или человеку, имеющему отношение к расследуемому вами преступлению. Те, кто не участвует в вашем расследовании, не станут препятствовать вам или передадут ваши просьбы. Кроме того, местные правоохранительные органы имеют стойкое мнение о вас, рассматривая вас либо как помеху, либо как одного из своих.

!!!Персонализация

| !к12 |!Черта характера |
| 1 |У меня была встреча, которая, как я считаю, дает мне особое родство со сверхъестественным существом или событием. |
| 2 |Особенная одежда или необычное оружие служат отражением того, кто я есть. |
| 3 |Я никогда не признаю, что я не в своей тарелке. |
| 4 |Я должен знать разгадку каждой тайны. В моем присутствии ни одна дверь не остается незакрытой. |
| 5 |Я позволяю людям недооценивать меня, открывая всю свою компетентность только близким людям.|
| 6 |Я навязчиво стремлюсь собирать трофеи своих путешествий и побед. |
| 7 |Неважно, что весь мир против меня. Я всегда буду делать то, что считаю правильным. |
| 8 |У меня нездоровые интересы и мрачная внешность. |
| 9 |У меня есть личный ритуал, мантра или метод релаксации, который я использую для борьбы со стрессом. |
| 10 |Нет ничего важнее жизни, и я никогда не оставляю никого в опасности. |
| 11 |Я быстро перехожу к экстремальным решениям. Зачем рисковать тем, что меньший вариант не сработает? |
| 12 |Меня легко испугать, но я не трус. |

| !к12 |!Идеал |
| 1 |''Адреналин. ''Я испытал такие странности, что теперь чувствую себя живым только в экстремальных ситуациях. |
| 2 |''Баланс.'' Я стремлюсь противостоять поступкам того, за кого чувствую ответственность. |
| 3 |''Привязанность.'' Я причинил кому-то зло и должен исполнить его волю, чтобы избежать его проклятия. |
| 4 |''Бегство.'' Я верю, что есть что-то за пределами известного мне мира, и мне нужно это найти. |
| 5 |''Наследие.'' Я должен совершить что-то великое, чтобы меня запомнили, а мое время на исходе. |
| 6 |''Заблуждение.'' Я прилагаю все усилия, чтобы другие не узнали о моих недостатках или проступках. |
| 7 |''Одержимость.'' Я живу таким образом настолько долго, что не могу представить себе другого пути. |
| 8 |''Обязательство.'' Я обязан перед своим народом, верой, семьей или учителем продолжать унаследованное дело. |
| 9 |''Обещание.'' Моя жизнь больше не принадлежит мне. Я должен исполнить мечту того, кого уже нет. |
| 10 |''Откровение.'' Мне нужно знать, что лежит за пределами тайн смерти, мира или Тумана. |
| 11 |''Убежище.'' Я знаю, какие силы действуют в мире, и стремлюсь создать островок в стороне от них. |
| 12 |''Истина.'' Истина для меня превыше всего, даже если она никому не приносит пользы. |

| !к12 |!Привязанность |
| 1 |Мне отчаянно нужно вернуться к кому-то или куда-то, но я потерял их в тумане. |
| 2 |Все, что я делаю, служит могущественному хозяину, которого я должен держать в секрете от всех. |
| 3 |Я многим обязан своему исчезнувшему наставнику. Я стремлюсь продолжить их дело, даже когда ищу их самих. |
| 4 |Я видел великую тьму, и я намерен быть светом против нее - светом всех светов. |
| 5 |Кто-то, кого я люблю, стал монстром, убийцей или другой угрозой. Я должен спасти его. |
| 6 |Мир был убежден в ужасной лжи. Я должен открыть правду. |
| 7 |Я сильно скучаю по кому-то и быстро принимаю людей, которые напоминают мне о нем. |
| 8 |Во мне живет великое зло. Я буду бороться с ним и другими пороками мира до тех пор, пока смогу. |
| 9 |Я отчаянно ищу лекарство от недуга или проклятия, либо для кого-то из моих близких, либо для себя. |
| 10 |Духи притягиваются ко мне. Я делаю все возможное, чтобы помочь им обрести покой. |
| 11 |Я использую свой хитрый ум, чтобы разгадать тайны и добиться правосудия для тех, кого постигла несправедливость. |
| 12 |Я потерял близкого человека, но до сих пор вижу его в видениях, повторяющихся снах или в виде духа. |

| !к12 |!Слабость |
| 1 |Я верю, что рок преследует меня и что любого, кто приблизится ко мне, ждет трагический конец. |
| 2 |Я убежден, что что-то преследует меня, появляясь в зеркалах, снах и местах, где никто не мог бы появиться. |
| 3 |Я особенно суеверен и веду жизнь, стараясь избежать невезения, злых духов или тумана. |
| 4 |Я совершил невыразимое зло и сделаю все, чтобы об этом не узнали другие. |
| 5 |Я исключительно доверчив и сразу верю любой истории или легенде. |
| 6 |Я скептик и не верю в силу ритуалов, религии, суеверий или духов. |
| 7 |Я знаю, что мое будущее предопределено и что любой мой поступок приведет к предначертанному пророчеством концу. |
| 8 |Я должен находить лучшее во всех и во всем, даже если это означает отрицание очевидной злобы. |
| 9 |Я видел зло в каком-то месте, например, в лесу, городе или на кладбище, и не хочу туда идти. |
| 10 |Я исключительно осторожен, тщательно планирую и разрабатываю бесчисленные запасные варианты. |
| 11 |У меня репутация человека, победившего великое зло, но это ложь, и злая сила знает об этом. |
| 12 |Я знаю, что цель всегда оправдывает средства, и быстро иду на жертвы ради достижения своих целей. |
[img width=330 class="centerme" [https://i.imgur.com/iWdcmCg.png]]

Долговязые полурослики - представители рода, среди предков которого замешалась эльфийская кровь. Они чуть выше своих собратьев - их средний рост немного превышает 120 см. Они стройны и худощавы, но обычно весят чуть больше, чем легконогие. Долговязым полуросликам нравится общество эльфов, и многие из их деревень можно найти рядом с крупными эльфийскими поселениями. Эти деревни процветают благодаря торговле, связывая людские и эльфийские народы.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Интеллекта увеличивается на 1. |
|^Обострённые чувства |^Вы владеете навыком Внимательность. |
|^Отменный метатель |^Вы владеете простым и воинским метательным оружием. Кроме того, совершение вами атаки в пределах максимальной дальности не вызывает помеху к броску атаки метательным оружием или пращами. |
|^Эльфийское наследие |^Долговязые полурослики проводят годы, изучая эльфийские труды. Вы можете говорить, читать и писать на Эльфийском. |

<div class="tc-table-of-contents">
<<toc-selective-expandable "Домашние правила">>
</div>
!!!(1) Дополнительные владения
Вы получаете владение тяжёлыми доспехами и воинским оружием.
---

!!! [img[1.png]] Дополнительные владения
Вы получаете владение тяжёлыми доспехами и воинским оружием.

---

!!! [img[2.png]] Божественный канал: Направленный удар

<<<
Вы можете использовать Божественный канал, чтобы нанести удар со сверхъестественной точностью. 
<<<

Когда вы совершаете бросок атаки, вы можете использовать Божественный канал, чтобы получить бонус +10 к броску. Вы можете принять решение об использовании этой способности после объявления результата броска атаки.

---

!!! [img[6.png]] Божественный канал: Благословение бога войны
Если существо в пределах 6 м от вас совершает бросок атаки, вы можете реакцией предоставить этому существу бонус +10 к броску, использовав Божественный канал. Вы можете принять решение об использовании этой способности после объявления результата броска атаки.
!!!(1) Дополнительное владение
Вы получаете владение тяжёлыми доспехами.
[img [https://i.imgur.com/lYaBvye.png]]
!!!(1) Дополнительные владения
Вы получаете владение тяжёлыми доспехами и инструментами кузнеца.
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
!!!(1) Дополнительное владение
Вы получаете владение тяжёлыми доспехами.
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
* Вы не можете совершать с помощью этого умения более двух атак, если только оно не позволяет прямо это делать (как в случае с версией Дополнительной атаки у воина). 
* Если у вас есть уровни классов, имеющих доступ на 5 уровне к умению Дополнительная атака, сложите эти уровни. Вы можете использовать полученную сумму уровней для получения этого умения. 

//Например, если вы Воин 3/Паладин 2, вы получаете умение Дополнительная атака, не смотря на то, что у вас нет 5-го уровня ни в одном из этих классов.//

* Если вы получили подкласс, имеющий доступ к умению Дополнительная атака, вы можете прибавить к уровню его класса, уровни других ваших классов, имеющих доступ к этому умению. Если эти классы получают умение Дополнительная атака на разных уровнях, вы должны достигнуть требования с большим уровнем. 

//Например, если вы Бард Коллегии мечей 3/Воин 3, то вы получаете умение Дополнительная атака, т. к. сумма ваших уровней Барда и Воина удовлетворяет требованию умения Дополнительная атака Барда Коллегии мечей (6 уровень).//

//Если вы Бард Коллегии мечей 3/Воин 2, вы не получаете умение Дополнительная атака, так как, хоть сумма уровней этих классов и удовлетворяет требованию умения Дополнительная атака Воина (5 уровень), она не удовлетворяет требованию умения Дополнительная атака Барда Коллегии мечей (6 уровень).//

//Если вы Бард 2/Воин 3, вы не получаете умение Дополнительная атака, так как лишь подклассы Барда имеют доступ к этому умению. В этом случае вы не можете использовать сумму уровней.//


* Вы не можете использовать сумму уровней для получения умения, позволяющего совершать более двух атак (как в случае с версией Дополнительной атаки у воина).
* Договор клинка колдуна не предоставляет вам дополнительную атаку, если у вас есть умение Дополнительная атака.
Таблица ниже приводит характеристики самых распространённых доспехов, разделённых на три категории: лёгкие, средние и тяжёлые. Многие воители дополняют доспехи щитом.

//''Владение доспехами.''// Кто угодно может напялить доспех или пристегнуть щит к руке. Но только тот, кто знает, как носить доспех, может носить его эффективно. Ваш класс даёт владение некоторыми видами доспехов. Если вы носите доспех, которым не владеете, вы совершаете с помехой все проверки характеристик, спасброски и броски атаки, использующие Силу или Ловкость, и вы не можете сотворять заклинания.

//''Класс Доспеха (КД).''// Доспех защищает владельца от атак. Надетый доспех (и щит) определяет базовый Класс Доспеха.

//''Скрытность.''// Если в колонке доспеха написано «Помеха», владелец совершает проверки Ловеости (Скрытность) с помехой.

//''Вес. ''//Указанные значения веса используются для доспехов рассчитанных на существо Среднего размера. Доспехи Маленьких существ весят вдвое меньше, а доспехи Больших - вдвое больше. Владение доспехом вдвое уменьшает его вес, пока он надет на вас (не относится к щитам).

//''Щиты.''// Щиты чаще всего изготавливаются из нескольких слоев древесины, обшиты кожей и укреплены металлическими полосами. Щит удерживается одной рукой, и вы получаете преимущество только от одного щита одновременно.

Вы можете ударить противника щитом, как оружием в неосновной руке. Таким образом щит считается лёгким воинским дробящим оружием. Используя щит в качестве оружия, вы теряете его бонус к КД до начала вашего следующего хода.

|!//Лёгкий доспех// |!Цена |!Класс Доспеха (КД) | !Скрытность | !Вес|
|Дублет |15 см |11 + мод. ЛОВ | | 3 кг|
|Кожаный |45 см |12 + мод. ЛОВ | | 6 кг|
|Баклер |5 см |+ 1  | | 1 кг|
|!//Средний доспех// |!Цена |!Класс Доспеха (КД) | !Скрытность | !Вес|
|Ламеллярный |30 см |12 + мод. ЛОВ (макс. 2) | | 8 кг|
|Кольчужная рубаха |50 см |13 + мод. ЛОВ (макс. 2) | Помеха | 8 кг|
|Бригантина |150 см |14 + мод. ЛОВ (макс. 2) | Помеха | 10 кг|
|Кираса |250 см |14 + мод. ЛОВ (макс. 2) || 8 кг|
|Полулаты |450 см |15 + мод. ЛОВ (макс. 2) | Помеха | 18 кг|
|Средний щит |10 см |+2 | | 3 кг|
|!//Тяжёлый доспех// |!Цена |!Класс Доспеха (КД) | !Скрытность | !Вес|
|Кольчуга |100 см |16 | Помеха | 20 кг|
|Наборный |300 см |17 | Помеха | 25 кг|
|Латы |900 см |18 | Помеха | 30 кг|
|Ростовой щит |15 см |+3| Помеха | 6 кг|
|Павеза |25 см |+3| Помеха | 8 кг|

<<tabs "[tag[Категории доспехов]]" "Лёгкий доспех" "$:/state/tab1">>

---

!!!Надевание и снятие доспехов
Время, нужное для надевания и снятия доспехов, зависит от их вида.

//''Надевание''//. Столько времени требуется для надевания доспеха. Вы получаете КД от доспеха только если потратили нужное время на его надевание.

//''Снимание''//. Столько времени требуется на снятие доспеха. Если вам помогают, уменьшите время вдвое.

|!Вид|!Надевание|!Снятие|
|Лёгкий доспех|1 минута|1 минута|
|Средний доспех|3 минуты|1 минута|
|Тяжёлый доспех|10 минут|5 минут|
|Лёгкий щит| свободное действие |<|
|Средний щит| бонусное действие |<|
|Тяжёлый щит| действие |<|

---

!!!Подгонка доспеха

Доспех, изготовленный под одного человека, не подойдёт другому без значительных изменений, и униформа стражника может выглядеть заметно чужеродной, если искатель приключений оденет её для маскировки.

Когда искатели приключений находят доспех, одежду или другой похожий предмет, предназначенный для носки, им нужно посетить изготовителя доспехов, портного, кожевника или другого специалиста, который подгонит этот предмет для них. Стоимость этой работы составляет от 10 до 40 процентов от рыночной стоимости предмета.
[img width=320 class="centerme" [https://i.imgur.com/PSVgeVR.png]]

<<tabs "[tag[Драконорождённый - описание]]" "Описание драконорождённых" "$:/state/tab1">>
---

!!! [img[1.png]] Заклинания источника
Вы узнаёте заклинания источника на указанных уровнях чародея. Заклинания источника считаются для вас заклинаниями чародея и не учитываются при подсчёте количества известных вам заклинаний чародея.

Когда вы получаете уровень в этом классе, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний волшебника, колдуна или чародея того же уровня. Новое заклинание должно принадлежать школе Воплощения или Очарования.

| !Ур. |!Заклинания |
| !1 |//опознание//, //приказ//, //фокусы// |
| !3 |//дыхание дракона//, //поиск предмета// |
| !5 |//полёт//, //стена ветров// |
| !7 |//призыв стихийного духа//, //принуждение// |
| !9 |//знание легенд//, //подчинение личности// |

---

[img [https://i.imgur.com/lYaBvye.png]]
---

!!! [img[1.png]] Расширенный список заклинаний
Древний дракон позволяет вам при изучении заклинаний колдуна выбирать из более широкого списка. В ваш список заклинаний колдуна добавляются следующие заклинания.

| !УЗ  |!Заклинания |
| !1 |//героизм//, //приказ// |
| !2 |//дыхание дракона//, //поиск предмета// |
| !3 |//быстрые друзья//, //стена ветров// |
| !4 |//кабинет Морденкайнена//, //принуждение// |
| !5 |//власть над ветрами//, //знание легенд// |

//УЗ - Уровень заклинания//

---

!!! [img[1.png]] Драконья речь
Вы можете говорить, читать и писать на Драконьем языке.

---

!!! [img[1.png]] Последователь дракона
Выберите вид дракона, являющегося вашим покровителем, из таблицы ниже. Вид урона используемый вашими умениями покровителя определяется выбранным видом дракона.

|!Дракон |!Вид урона |
|Белый или Серебряный |Холод |
|Бронзовый или Синий |Электричество |
|Зелёный |Яд |
|Золотой, Красный или Латунный |Огонь |
|Медный или Чёрный |Кислота |

При сотворении заклинания, наносящего урон кислотой, огнём, холодом, электричеством или ядом, вы можете изменить его вид урона на вид, определённый выбранным видом дракона. Кроме того, когда вы определяете урон от наложенного вами заклинания, причиняющего урон этого вида, вы можете считать все выпавшие на костях «1» как «2».

---

!!! [img[6.png]] Драконья чешуя
Бонусным действием вы можете на 1 минуту покрыть участки своей кожи драконьей чешуёй, получая сопротивление к виду урона, определённого выбранным вами видом дракона, и, если вы не носите тяжёлых доспехов, бонус +1 к КД.

Вы не можете использовать это умение повторно, пока не завершите короткий или продолжительный отдых.
[img width=270 class="centerme" [https://i.imgur.com/fPkYiKo.png]]

<<tabs "[[Описание друидов]] [[Классовые умения друидов]] [[Круги друидов]]" "" "$:/state/tab1">>

Пока вы держите рукопашное оружие в одной руке, и не используете другого оружия, вы получаете бонус +2 к броскам урона этим оружием.
[img width=410 class="centerme" [https://i.imgur.com/CdSejpy.png]]

В глубоких городах Подземья живут дуэргары, или серые дварфы. Они совершают скрытные и жестокие налёты на поверхность, а пленных рабов продают другим расам Подземья. Серые дварфы обладают врождённой способностью становиться невидимыми и временно приобретать гигантские размеры. 

Дуэргары, что становятся приключенцами, почти всегда оказываются изгнанниками из своего общества. У дуэргаров нет терпения к тем, кто не может держать свои амбиции и жестокость на достаточном уровне. 

Любые серые дварфы, что были воспитаны среди своего собственного рода и впоследствии решившие стать искателями приключений, оказываются параноиками, ожидающими возможное предательство среди собственной группы приключенцев. К примеру, они могут настоять на том, чтобы они спали отдельно от остальной группы, никогда не показывать или не делится добытыми трофеями, попытаться накопить трофеи, которые помогут их выживанию, наподобие зелий, предметов или заклинаний, которые позволят им телепортироваться в безопасное место. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Силы увеличивается на 1. |
|^Ночное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение, и в темноте так, как будто это тусклое освещение. В темноте вы не можете различать цвета, только оттенки серого. |
|^Дополнительный язык |^Вы можете говорить, читать и писать на Подземном. |
|^Дуэргарская устойчивость |^Вы совершаете с преимуществом спасброски от иллюзий, а также от состояний очарованный и парализованный. |
|^Дуэргарская Магия |^При достижении 3 уровня, вы можете накладывать на себя заклинание //увеличение/уменьшение//, однако, применяя эту способность, вы можете выбирать только вариант увеличения. Когда вы достигаете 5 уровня, вы можете накладывать на себя заклинание //невидимость//. Для наложения этих заклинаний вам не требуются материальные компоненты, и вы не сможете накладывать их, находясь под прямыми солнечными лучами, впрочем, солнечные лучи не влияют на них, если вы ранее наложили заклинание. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда закончите продолжительный отдых. Базовой характеристикой для этих заклинаний является Интеллект.  |
|^Чувствительность к солнечному свету |^Вы совершаете броски атаки и проверки Мудрости (Внимательность), которые полагаются на зрение, с помехой, когда вы, цель вашей атаки или то, что вы пытаетесь увидеть, находится под прямым солнечным светом. |
Вы изучаете два заговора на ваш выбор из списка заклинаний друида. Они считаются для вас заклинаниями следопыта, а Мудрость - базовая характеристика для их использования. Когда вы получаете новый уровень в этом классе, вы можете заменить один из них на другой заговор из списка друида.
[img width=460 class="centerme" [https://i.imgur.com/Drx9qwD.png]]

<<tabs "[[Описание жрецов]] [[Классовые умения жрецов]] [[Божественные домены]]" "" "$:/state/tab1">>

[img width=320 class="centerme" [https://i.imgur.com/UNa5zwp.png]]

|!Особенность |!Описание |
|^Драконья свирепость |^Кость урона вашими зубами и когтями увеличивается с 1к4 до 1к6. Кроме того, вы можете бонусным действием совершить атаку укусом, если в свой ход совершали рукопашную атаку или использовали оружие дыхания. Если эта атака попадает, урон наносится как обычно, а вы не можете использовать эту особенность снова пока не завершите короткий или продолжительный отдых.  |
|^Закалённая чешуя |^Вы получаете бонус +1 к КД, если не носите тяжёлых доспехов. Пока вы не носите доспехов, ваш КД равен 12 + ваш мод. Ловкости. Вы можете использовать КД своей закалённой чешуи, если доспехи, которые вы носите, дают вам более низкий КД. При использовании закалённой чешуи, эффект от щита применяется как обычно.  |


<div class="tc-table-of-contents">
<<toc-selective-expandable "Заклинания">>
</div>
Вы не можете прятаться от существа, которое видит вас, и если вы издадите шум (например, прокричите предупреждение или уроните вазу), вы выдаёте своё местоположение.

Когда вы пытаетесь спрятаться, совершите проверку Ловкости (Скрытность). Пока вас не найдут или вы не прекратите прятаться, результат этой проверки будет противостоять проверкам Мудрости (Внимательность) существ, активно ищущих вас.

Если вы прячетесь, есть шанс, что вас заметят даже без активных поисков. Для определения того, заметило ли вас существо, Мастер сравнивает результат вашей проверки Ловкости (Скрытность) с пассивным значением Мудрости (Внимательность), которое равно 10 + модификатор Мудрости существа, плюс все уместные бонусы и штрафы.
Вы можете при помощи этой особой рукопашной атаки попытаться схватить и обезвредить цель.

Цель вашего захвата должна находиться в пределах вашей досягаемости, а её размер  не должен превышать ваш больше чем на одну категорию. Используя как минимум одну свободную руку, вы пытаетесь схватить цель, совершая проверку захвата: проверку Силы (Атлетика), противопоставленную проверке Силы (Атлетика) или Ловкости (Акробатика) цели (цель сама выбирает, какую характеристику использовать). Вы совершает свою проверку с преимуществом, если вы больше цели, или с помехой, если вы меньше. При успехе цель становится [[схваченной|Схваченный]].

---

Вы можете повторно совершить эту особую атаку по [[схваченному|Схваченный]] вами существу с целью скрутить его. При успехе цель становится [[опутанной|Опутанный]]. При провале цель высвобождается из захвата.

//''Живой щит.''// Вы можете использовать [[опутанное|Опутанный]] вами существо в качестве живого щита. Для этого потратьте половину своей скорости и совершите проверку захвата. При успехе вы получаете [[укрытие на половину|Укрытие]], если [[опутанное|Опутанный]] существо вашего размера, или [[укрытие на три четверти|Укрытие]], если опутанное существо больше вас, против выбранной вами цели.

//''Удушение.''// Вы можете попробовать задушить [[опутанное|Опутанный]] вами существо. Для этого повторно совершите эту особую атаку. При успехе цель начинает [[задыхаться|Удушье]].

В начале своего хода вы должны повторять эту особую атаку, чтобы продолжать душить цель.

Удушение оканчивается, если цель перестаёт быть [[опутанной|Опутанный]] вами. Вы можете прекрать душить цель досрочно в любое время (действие не требуется).

Эта атака не имеет эффекта на существ, которым не нужно дышать, или обладающих формой, непригодной к физическому удушению. На усмотрение Мастера, доспех существа может защищать его от этой атаки.

---

Вы можете повторно совершить эту особую атаку, используя как минимум две свободные руки, по [[схваченному|Схваченный]] и [[опутанному|Опутанный]] вами существу, размер которого не больше вашего, с целью прижать его к твёрдой поверхности и обездвижить его конечности. При успехе цель становится [[скованной|Скованный]], а вы становитесь [[опутанным|Опутанный]]. При провале цель высвобождается из захвата.

В начале своего хода, вы должны повторять эту особую атаку, чтобы удерживать цель в [[скованном |Скованный]] состоянии.

После успешного совершения этой особой атаки с целью [[сковать|Скованный]] существо, вы можете совершить особую атаку [[Обезоруживание|Обезоруживание]] бонусным действием.

---

Вы в любой момент можете отпустить цель (действие не требуется). 

//''Высвобождение из захвата.''// Схваченное существо может пытаться высвободиться. Для этого оно действием совершает проверку Силы (Атлетика) или Ловкость (Акробатика), противопоставленную вашей проверке Силы (Атлетика). 

//''Перемещение схваченного существа.''// Если вы перемещаетесь, вы можете тащить или нести схваченное существо вместе с собой, но ваша скорость уменьшается вдвое, если только существо не меньше вас как минимум на две категории. 
* Вы не можете перемещаться, а также совершать действия и реакции.
Если существо, которое вы видите, атакует не вас, а другое существо, находящееся в пределах 1 м от вас, вы можете реакцией создать помеху его броску атаки. Для этого вы должны использовать щит.
Если у вас уже есть умение Защита без доспехов, вы не можете получить его ещё раз от другого класса.
Во время совершения дальнобойной атаки оружием, вы можете потратить 1 очко ци, чтобы игнорировать помехи на атаки по целям, находящимися за пределами эффективной дальности, до конца этого хода.
Основные задачи в приключениях — заметить опасность, найти спрятанные предметы, попасть по врагу, нацелить заклинание — сильно зависят от способности персонажа видеть. Темнота и прочие эффекты, мешающие зрению, вызывают большие затруднения.

---

Область может быть слабо или сильно заслонённой. В ''слабо заслонённой'' области, например, в области тусклого света, в тумане, листве, существа совершают со штрафом проверки Мудрости (Внимательность), полагающиеся на зрение.

''Сильно заслонённая'' местность — такая как тьма, густой туман или густая листва — полностью блокирует зрение. Существа фактически считаются ''//ослеплёнными//'', когда пытаются рассмотреть что-то, находящееся в такой местности.

---

Наличие или отсутствие света создаёт три категории освещения: яркий свет, тусклый свет и тьму.

''Яркий свет'' позволяет большинству существ видеть хорошо. Даже пасмурный день предоставляет яркий свет, равно как факелы, фонари, костры и прочие источники света в определённом радиусе.

''Тусклый свет'', также называемый тенью, создаёт слабо заслонённую местность. Область тусклого света обычно находится между источником яркого света, таким как факел, и окружающей тьмой. На рассвете и закате свет тоже тусклый. Яркая луна в полнолуние освещает землю тусклым светом.

''Темнота'' создаёт сильно заслонённую местность. Персонажи оказываются в темноте по ночам (когда не светит луна), в коридорах подземелий и в областях магической тьмы.

---

!!!Тёмное зрение

Расовая особенность //Темное зрение// заменена на //Сумеречное зрение//.

|!Сумеречное зрение|
|На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение.|

Расовая особенность //Превосходное темное зрение// заменена на //Ночное зрение//.

|!Ночное зрение|
|На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение, и в темноте так, как будто это тусклое освещение. В темноте вы не можете различать цвета, только оттенки серого.|

Если вы получаете //Темное зрение// из источников, не являющихся вашей расой (заклинания, магические предметы, классовые умение и т.п.), замените его на //Ночное зрение//, но измените радиус на указанный в источнике (в этом случае для перевода в метры делите значение в футах на 3).

//''Чувствительность к солнечному свету''//

Если у вашего нового персонажа есть расовая особенность //Чувствительность к солнечному свету//, вы можете избавиться от нее, если лишитесь своего //Сумеречного зрения// или замените свое //Ночное зрение// на //Сумеречное зрение//.


!!!Слепое зрение
Существо со слепым зрением может воспринимать своё окружение в определённом радиусе, не полагаясь на зрение. Этим чувством обладают существа без глаз, такие как слизь, и существа с эхолокацией или обострёнными чувствами, такие как летучие мыши и драконы.



!!!Истинное зрение
Существа с истинным зрением могут в определённом радиусе видеть в обычной и магической темноте, видеть невидимые существа и предметы, автоматически обнаруживать зрительные иллюзии и преуспевать в спасбросках от них, и видеть истинный облик перевёртышей и существ, превращённых магией. Кроме того, зрение таких существ простирается на Эфирный План.

|!Игровой набор |!Цена | !Вес|
|Драконьи шахматы |1 см | 0.25 кг|
|Карты |5 мм | -|
|Кости |1 мм | -|
|Ставка трёх драконов |1 см | -|

Владение игровым набором применяется к одному виду игры, например, к ставке трёх драконов или к азартным играм, использующим кости. В таблице указаны примеры игр, но есть и другие наборы.

//''Компоненты.''//   Игровой набор включает в себя всё необходимое для конкретной игры или группы игр, как, например, полная колода карт или доска и фигуры.

//''История.''// Ваше мастерство в игре включает в себя знания о её истории, а также знания о важных событиях и известных исторических фигурах, связанных с игрой.

//''Проницательность.''// Сыграть с кем-то – это отличный способ понять его характер и что он из себя представляет, что в свою очередь позволяет вам лучше распознавать ложь и определять его настроение.

//''Ловкость рук.''//  Ловкость рук – это полезный навык для мухлежа в игре, поскольку позволяет вам менять местами фигуры, прятать карты или менять неудачный результат броска кости. С другой стороны, увлечь цель игрой, требующей совершения ловких движений – хорошее отвлечение при карманной краже.

|!Действие| !Сл |
|Поймать игрока на мухлеже   | 15 |
|Понять характер оппонента    | 15 |
<div class="tc-table-of-contents">
<<toc-selective-expandable "Игровой процесс">>
</div>
Персонаж, у которого есть время, деньги и необходимые инструменты, во время простоя может изготовить броню, оружие, одежду или другое немагическое снаряжение. 

//''Ресурсы и определение результата.''// Помимо инструментов для создания предмета персонажу требуются материалы, цена которых равна половине цены продажи предмета. Чтобы определить, сколько рабочих недель на это потребуется, разделите эту цену в серебре на 50. Персонаж может изготовить несколько предметов в течение рабочей недели, если их общая цена не превышает 50 см. Для изготовления предметов, цена которых превышает 50 см, требуется потратить больше времени, а также требуется место, где можно безопасно оставить незаконченную работу. 

Несколько персонажей могут объединить усилия. Разделите время работы на количество персонажей, которые занимаются созданием предмета. Мастер решает, сколько персонажей могут одновременно работать над предметом. Над маленьким предметом, например, кольцом, могут работать один или два персонажа, большой могут создавать 4 или больше персонажей. 

Персонаж должен иметь владение инструментами, необходимыми для создания предмета, и иметь доступ к соответствующему оборудованию. Если персонажи изготавливают предмет совместно, каждый из них должен владеть соответствующими инструментами. В таблице ниже приведено несколько примеров. 

|!Владение |!Предметы |
|Набор травника |Противоядие, зелье лечения |
|Инструменты кожевника |Кожаная броня, ботинки |
|Инструменты кузнеца |Оружие, броня |
|Инструменты ткача |Плащи, робы |

Если все вышеперечисленные требования выполнены, персонаж изготавливает предмет. Персонаж может продать предмет, изготовленный таким образом, по полной цене. 

//''Изготовление магических предметов''//. Создание магического предмета требует не только времени, усилий и материалов. Это долгий процесс, включающий в себя одно или несколько приключений для поиска редких материалов и необходимых для создания предмета знаний. 

//Зелья лечения //и //свитки заклинаний// – исключение из этого правила. Более подробно об этом читайте в разделах «Создание зелья лечения» и «Создание свитка заклинания». 

Чтобы начать работу, персонажу необходима формула магического предмета, по которой он создаётся. Формула похожа на рецепт. В ней перечислены необходимые материалы и операции, необходимые для создания предмета. 

Для завершения предмета обязательно требуется экзотический материал. Он может быть самым различным – от кожи йети до пузырька воды из водоворота на Стихийном плане Воды. Поиск этого материала может стать частью приключения. 

Таблица «Ингредиенты для магических предметов» содержит показатель опасности существа, которое персонажи должны одолеть, чтобы получить материал для предмета. Обратите внимание, что одолеть существо – не обязательно означает собрать ингреди- ент с его тела. Более вероятно, что существо может охранять место или ресурс, который персонажи должны получить. 

|!Редкость предмета |!Диапазон показателя опасности (ПО)|
|Обычный |1–3|
|Необычный |4–8|
|Редкий |9–12|
|Очень редкий |13–18|
|Легендарный |19+|

Помимо того, что герои встретятся с могучим существом, создание предмета требует больших денежных затрат, которые уйдут на прочие материалы, инструменты и многое другое, в зависимости от редкости предмета. Для любых расходуемых предметов уменьшите стоимость и затраченное время вдвое. 

|!Редкость предмета |!Рабочие недели |!Цена|
|Обычный |1 |50 зм|
|Необычный |2 |200 зм|
|Редкий |10 |2000 зм|
|Очень редкий |25 |20000 зм|
|Легендарный |50 |100000 зм|

Для создания магического предмета, персонаж должен владеть соответствующими инструментами (как и при создании обычного предмета) или навыком Магия. Если все вышеперечисленные требования выполнены, персонаж изготавливает магический предмет. 

//''Осложнения''//. Большинство осложнений, связанных с созданием чего-либо, особенно магических предметов, связаны со сложностью поиска редких ингредиентов или компонентов, необходимых для завершения работы. Осложнения, с которыми персонаж может столкнуться в процессе создания, наиболее интересны. Когда персонаж работает над магическим предметом, на каждые 5 недель работы по созданию предмета с вероятностью 10% может возникнуть осложнение. 

| !к6 |!Осложнение|
| 1 |Расходятся слухи о том, что вы работаете над чем-то нестабильным и угрожающим поселению.|
| 2 |У вас крадут инструменты, заставляя вас приобрести новые.|
| 3 |Местный волшебник проявляет сильнейшую заинтересованность в вашей работе и настаивает на том, чтобы понаблюдать за вашей работой.|
| 4 |Могущественный дворянин предлагает внушительную сумму за результат вашей работы и не желает принимать отказ.|
| 5 |Дварфийский клан обвиняет вас в краже тайных знаний, на которых основана ваша работа.|
| 6 |Соперник распускает слухи, что ваши изделия низкого качества и часто ломаются.|

//''Изготовление зелий лечения''//. Зелья лечения вынесены в отдельную категорию по созданию предметов. Персонаж, владеющий набором травника, может их изготовить. Время и золото, необходимые для создания, указаны в таблице ниже.

|!Тип |!Время |!Цена|
|Зелье лечения |1 день |25 зм|
|Зелье большого лечения |1 неделя |100 зм|
|Зелье отличного лечения |3 недели |1,000 зм|
|Зелье превосходного лечения |4 недели |10,000 зм|
[img width=315 class="centerme" [https://i.imgur.com/K3y0h8S.png]]

<<tabs "[[Описание изобретателей]] [[Классовые умения изобретателей]] [[Специализации изобретателей]]" "" "$:/state/tab1">>



Ваш персонаж может совершать действия, не описанные в правилах, такие как выламывание дверей, запугивание врагов, поиски брешей в магической обороне или призывы к переговорам с врагами. Единственным ограничением будет ваше воображение и значения характеристик.

Когда вы описываете действие, не упомянутое в правилах, Мастер сообщает, возможно ли это действие, и какие проверки нужно совершить для определения успешности.
Когда вы хотите совершить движение, не описанное в правилах, Мастер решает возможно ли это и назначает Сл проверки.
Ваши раса, класс, предыстории и черты могут давать владение некоторыми инструментами. Владение инструментом позволяет добавлять бонус мастерства к проверкам характеристик, совершенным при использовании этих инструментов. Использование инструментов не привязано к какой-то одной характеристике, так как владение инструментом отражает широкие познания в его использовании. Например, Мастер может попросить вас совершить проверку Ловкости для вырезания мелких деталей инструментом резчика по дереву, или проверку Силы для вырезания чего-то из очень твёрдого дерева.

---

!!!Описания инструментов

//''Компоненты.''// В этом абзаце приводится информация о том, из чего состоит набор инструментов. Персонаж, владеющий набором, знает, как пользоваться всеми его составными частями. 

//''Навыки.''// Каждый инструмент может предоставить преимущество на проверку, когда используется совместно с соответствующим навыком, при условии, что персонаж владеет как инструментом, так и навыком. 

//''Особое применение.''// Владение инструментом обычно представлено со специфической полезностью в виде особого применения, приведённого в этом абзаце. 

//''Примеры Сл.''// Таблица в конце каждого раздела приводит действия, для выполнения которых может быть использован инструмент, и примерную Сл для необходимых проверок характеристик. 

---

<<tabs "[tag[Виды инструментов]]" "" "$:/state/tab1">>
''Цена'': 25 см. ''Вес'': 2 кг.

Инструменты алхимика позволяют персонажу создавать полезные варева, такие как кислота или алхимический огонь.

//''Компоненты.''// Инструменты алхимика включают в себя две стеклянные мензурки, металлический каркас, удерживающий мензурку над открытым пламенем, стеклянную палочку для размешивания, небольшие ступку и пестик, мешочек обычных алхимических ингредиентов, включающих в себя соль, измельчённое железо и дистиллированную воду.

//''Магия.''// Владение инструментами алхимика позволяет вам раскрыть больше информации при проверках Магии, связанных с зельями и подобными веществами.

//''Анализ.''// Когда вы осматриваете область в поиске улик, владение инструментами алхимика даёт дополнительные знания о том, какие химикаты и прочие вещества использовались в области.

//''Алхимическое ремесло.''// Вы можете использовать владение инструментами для создания алхимических предметов. Персонаж может потратить деньги, чтобы собрать сырьё, которое весит 0.5 кг за каждые использованные 50 см. Как часть продолжительного отдыха вы можете использовать инструменты алхимика, чтобы сделать одну порцию кислоты, алхимического огня, противоядия, масла, духов или мыла. Вычтите половину стоимости созданного предмета из суммарной стоимости собранного вами сырья.

|!Действие| !Сл |
|Создать клубы густого дыма | 10 |
|Опознать яд | 10 |
|Опознать вещество | 15 |
|Устроить поджог | 15 |
|Нейтрализовать кислоту | 20 |
''Цена'': 10 см. ''Вес'': 1 кг.

Инструменты гончара используются для создания различных керамических предметов, наиболее распространённые из них – это горшки и подобные сосуды.

//''Компоненты.''// Инструменты гончара включают в себя гончарные иглы, цикли, скребки, нож и кронциркуль.

//''История.''// Ваши знания и опыт помогают вам опознавать керамические предметы, получая сведения о том, когда они были сделаны и из каких мест или какой культуры они происходят.

//''Анализ, Внимательность.''// Вы получаете дополнительные знания при осмотре керамики, находя зацепки, которые другие могут не заметить, на небольших неровностях и сколах.

//''Воссоздание облика.''// Рассмотрев керамические черепки, вы можете определить происхождение предмета, его изначальную форму и возможное предназначение.

|!Действие| !Сл |
|Определить, что было в сосуде  | 10 |
|Создать прочный горшок | 15 |
|Найти слабое место керамического предмета | 20 |
''Цена'': 10 см. ''Вес'': 2 кг.

Каллиграфия трактует письмо как прекрасное утончённое искусство. Каллиграфы создают текст, который радует глаз, используя стиль, который сложно подделать. Их инструменты также дают им возможность исследовать рукописный текст и определить его подлинность, поскольку обучение каллиграфа включало в себя множество часов обучения письму и попыток повторить его стиль и оформление.

//''Компоненты.''// Инструменты каллиграфа включают в себя чернила, множество пергаментных листов и три писчих пера.

//''Магия.''// Хотя каллиграфия мало помогает в расшифровке содержимого магического текста, владение этими инструментами помогает определить, кто написал магический текст..

//''История.''// Владение этими инструментами может увеличить выгоду при успешной проверке, совершаемой для анализа или исследования древних записей, свитков или другого текста, включая руны, вырезанные на камне, а также письмена на фресках или других изображениях.

//''Расшифровка карты сокровищ.''// Владение этими инструментами позволяет вам проводить экспертизу карт. Вы можете пройти проверку Интеллекта, чтобы оценить возраст карты, определить, содержит ли карта скрытое послание, и так далее.

|!Действие| !Сл |
|Опознать писавшего немагический рукописный текст  | 10 |
|Определить душевное состояние писавшего | 15 |
|Распознать поддельный текст | 15 |
|Подделать подпись | 20 |
''Цена'': 10 см. ''Вес'': 4 кг.

Инструменты каменщика позволяют вам возводить каменные строения, включая стены и здания из кирпича.

//''Компоненты.''// Инструменты каменщика включают в себя мастерок, молоток, долото, щётки и угольник.

//''История.''// Ваш опыт помогает вам определять дату постройки и предназначение каменного здания, а также понять, кто мог его построить.

//''Анализ.''// Вы получаете дополнительные знания при обследовании помещений в каменном здании.

//''Внимательность.''// Вы замечаете неровности на каменных стенах и полах, что облегчает поиск ловушек и тайных ходов.

//''Снос.''// Ваши познания в каменном зодчестве позволяют вам найти уязвимые места в кладке каменных стен. Вы наносите таким строениям двойной урон своими атаками оружием.

|!Действие| !Сл |
|Продолбить долотом небольшое отверстие в каменной стене  | 10 |
|Найти слабое место в каменной стене | 15 |
''Цена'': 15 см. ''Вес'': 3 кг.

Используя инструменты картографа, вы можете составить достоверную карту, чтобы сделать путешествие проще для вас и для тех, кто пойдёт здесь после вас. Это может быть, как крупномасштабная карта, описывающая горные хребты и перевалы, так и схема, показывающая планировку уровня подземелья.

//''Компоненты.''// Инструменты картографа включают в себя писчее перо, чернила, пергамент, циркуль, кронциркуль и линейку.

//''Магия, История, Религия.''// Вы можете использовать ваши познания в картах и различных местах, чтобы извлекать более детальную информацию при использовании этих навыков. Например, вы можете найти скрытое послание на карте, установить, когда была составлена карта, чтобы определить, какие географические особенности изменились с тех пор и так далее.

//''Природа.''// Ваше знакомство с физической географией облегчает вам поиск ответов на вопросы и разрешение проблем, касающихся окружающей местности.

//''Выживание.''// Ваше понимание географии облегчает поиск пути к цивилизации, позволяет прогнозировать, в какой местности могут быть найдены деревни или городки, и уменьшает вероятность того, что вы заблудитесь. Вы изучили так много карт, что общие тенденции, например, как развиваются торговые маршруты или в каких местах обычно строят поселения, вам хорошо знакомы.

//''Составление карты.''// Путешествуя, вы можете рисовать карту в дополнение к участию в других действиях.

|!Действие| !Сл |
|Определить возраст и происхождение карты   | 10 |
|Прикинуть направление и расстояние до ориентира | 15 |
|Распознать что карта поддельная  | 15 |
|Дорисовать недостающий кусок карты | 20 |
''Цена'': 5 см. ''Вес'': 2 кг.

Познания в кожевенном деле распространяются на знания о шкурах животных и их свойствах. Они также включают в себя знания о кожаных доспехах и аналогичных вещах.

//''Компоненты.''// Инструменты кожевника включают кожевенный резак (нож), небольшую киянку, канавкорез, пробойник, нить и куски кожи.

//''Магия.''// Ваши знания и опыт в работе с кожей даёт вам дополнительные знания при обследовании магических предметов, сделанных из кожи, как, например, ботинки или некоторые плащи.

//''Анализ.''// Вы получаете дополнительные знания, когда исследуете кожаные предметы или улики, связанные с ними, также вы используете свои познания в кожевничестве, чтобы находить зацепки, которые другие могут не заметить.

//''Опознание кожи.''// Смотря на кусок кожи или кожаный предмет, вы можете определить источник кожи и любые особые методы, использованные в её обработке. Например, вы можете обнаружить разницу между кожей, выделанной с использованием дварфийских методик, и кожей, выделанной с использованием методик полуросликов.

|!Действие| !Сл |
|Изменить внешний вид кожаного предмета   | 10 |
|Определить прошлое кожаного предмета | 20 |
''Цена'': 20 см. ''Вес'': 4 кг.

Инструменты кузнеца позволяют вам работать с металлом, нагревая его для изменения формы, восстанавливая повреждения или создавая из слитков полезные предметы.

//''Компоненты.''// Инструменты кузнеца включают в себя молоты, клещи, уголь, ветошь и точильный камень.

//''Магия, История.''// Ваш опыт даёт вам дополнительные знания при обследовании металлических предметов, таких как, например, оружие.

//''Анализ.''// Вы можете обнаруживать зацепки, которые другие могут не заметить, когда расследование касается брони, оружия или прочих изделий металлообработки.

//''Починка.''// При наличии доступа к инструментам и открытому огню, жара которого достаточно, чтобы сделать металл пластичным, вы можете восстановить по 10 хитов повреждённого металлического предмета за каждый час работы.

|!Действие| !Сл |
|Наточить затупившийся клинок  | 10 |
|Починить комплект доспехов | 15 |
|Разъединить немагический металлический предмет | 15 |
''Цена'': 25 см. ''Вес'': 1 кг.

Владение инструментами навигатора помогает вам определить истинный курс, основываясь на наблюдении за звёздами. Они также позволяют вам разбираться в чтении схем и карт, благодаря выработанному у вас чувство направления.

//''Компоненты.''//  Инструменты навигатора включают в себя секстант, компас, кронциркуль, линейку, пергамент, чернила и писчее перо.

//''Выживание.''// Умение обращаться с инструментами навигатора помогает вам не заблудиться и даёт знания о наиболее вероятном расположении дорог и населённых пунктов.

//''Определение положения.''//  Проведя тщательные измерения, вы можете определить своё положение на морской навигационной карте и время суток.

|!Действие| !Сл |
|Проложить курс    | 10 |
|Определить своё местоположение на морской навигационной карте    | 15 |
''Цена'': 50 см. ''Вес'': 1 кг.

Инструменты отравителя — это излюбленное средство воров, убийц и прочих сомнительных личностей. Они позволяют вам использовать яды и создавать их из различных веществ. Ваши познания в ядах также помогают вам излечивать от них.

//''Компоненты.''//  Инструменты отравителя включают в себя стеклянные склянки, ступку и пестик, химические реагенты и стеклянную палочку для размешивания.

//''История.''// Ваша подготовка в использовании ядов может помочь вам при попытках вспомнить факты о печально известных отравлениях.

//''Анализ, Внимательность.''// Ваши познания в ядах научили вас быть осторожным, имея дело с этими веществами, тем самым помогая вам при обследовании отравленного предмета или при получении зацепок о событиях, связанных с ядами.

//''Медицина.''// Когда вы лечите жертву яда, ваша осведомлённость может дать вам дополнительные знания о том, как правильнее ухаживать за отравленным.

//''Природа, Выживание.''// Работа с ядами позволила вам получить знания о том, какие растения и животные ядовиты.

//''Обращение с ядами.''//  Ваше владение позволяет вам аккуратно обращаться с ядами и использовать их без риска самому подвергнуться их действию.

|!Действие| !Сл |
|Опознать отравленный предмет  | 10 |
|Определить эффект яда  | 20 |
''Цена'': 20 см. ''Вес'': 4 кг.

Пивоварение – это искусство производства пива. Но этот процесс может использоваться не только для создания алкогольных напитков, но и для очищения воды. Для создания пива требуются недели на ферментацию, но всего несколько часов непосредственно на работу.

//''Компоненты.''// Инструменты пивовара включают в себя большую стеклянную бутыль, некоторое количество хмеля, сифон, змеевик и несколько футов трубок.

//''История.''// Владение инструментами пивовара даёт вам дополнительные знания при проверках Интеллекта (История), касающихся событий, важной частью которых был алкоголь.

//''Медицина.''// Владение этими инструментами предоставляет дополнительные знания, когда вы облегчаете страдания от алкогольного отравления, похмелья, или, когда используете алкоголь, чтобы притупить боль.

//''Убеждение.''// Крепкий напиток может помочь смягчить даже каменное сердце. Ваше владение инструментами пивовара может помочь вам угостить кого-то ровно таким количеством алкоголя, сколько понадобится для того, чтобы поднять ему настроение.

//''Дистилляция.''// Ваши знания пивоварения позволяют вам очищать воду, которая иначе была бы непригодной для питья. Как часть ночлега вы можете очистить до 20 л воды или 4 л как часть короткого отдыха. Алкоголики-смертники пьют отнюдь не воду, поэтому используют эти инструменты, чтобы гнать первач.

|!Действие| !Сл |
|Обнаружить яд или примесь в питье   | 10 |
|Опознать алкоголь | 15 |
|Игнорировать эффект алкоголя | 20 |
''Цена'': 8 см. ''Вес'': 3 кг.

Навыки плотничества позволяют персонажу строить деревянные сооружения. Плотник может построить дом, хижину, деревянный шкаф или подобный предмет.

//''Компоненты.''// Инструменты плотника включают в себя пилу, молоток, гвозди, топор, угольник, линейку, кородёр, рубанок и стамеску.

//''История.''// Владение этими инструментами помогает вам определять назначение и происхождение деревянных строений и прочих больших деревянных объектов.

//''Анализ.''// Вы получаете дополнительные знания при обследовании области в деревянном здании, потому что вы знаете строительные хитрости, которые могут скрыть что-то в области при обследовании.

//''Внимательность.''// Вы можете заметить неровности на деревянных стенах и полах, что облегчает поиск ловушек и тайных ходов.


//''Скрытность.''// Вы можете быстро найти слабое место в деревянном полу, что облегчает вам определение мест, которые сломаются или заскрипят, если на них наступить.

//''Укрепление.''// За 1 минуту при наличии материалов вы можете укрепить дверь или окно. Сл броска на выбивание увеличивается на 5.


//''Временное укрытие.''// Как часть ночлега вы можете построить навес или подобное укрытие, чтобы ваша группа была укрыта от дождя или солнечного зноя на время отдыха. Поскольку оно было построено на скорую руку из первой попавшейся древесины, укрытие разваливается через 1к3 дня после постройки.

|!Действие| !Сл |
|Построить простое деревянное сооружение   | 10 |
|Спроектировать сложное деревянное строение  | 15 |
|Найти слабое место в деревянной стене | 15 |
|Снять дверь с петель | 20 |
''Цена'': 1 см. ''Вес'': 4 кг.

Жизнь искателя приключений тяжела. При наличии в компании повара ваша пища будет намного вкуснее, чем привычные галеты и сухофрукты.

//''Компоненты.''//  Инструменты повара включают в себя металлический котёл, ножи, вилки, ложку для размешивания и половник.

//''История.''// Ваши знания кулинарных методик позволяют вам оценивать структуру социального развития, основываясь на гастрономических обычаях этой культуры.

//''Медицина.''// Оказывая лечение, вы можете превратить горькое или кислое лекарство в приятную на вкус стряпню.

//''Выживание.''// Добывая еду, вы можете использовать собранные вами ингредиенты, которые другие не смогли бы приготовить.

//''Приготовление еды.''// Как часть короткого отдыха вы можете приготовить вкусное блюдо, которое поможет вашим компаньонам восстановить силы. Этой еды хватает на количество существ равное 4 + ваш бонус мастерства. После завершения короткого отдыха, любое существо, съевшее особое блюдо и потратившее Кость Хитов на восстановление хитов, единожды восстаналивает дополнительно 1к4 хитов.

|!Действие| !Сл |
|Приготовить обычную пищу  | 10 |
|Повторить блюдо | 10 |
|Обнаружить яд или примесь в еде | 15 |
|Приготовить изысканное блюдо | 15 |
''Цена'': 1 см. ''Вес'': 2 кг.

Инструменты резчика по дереву позволяют вам создавать сложные предметы из дерева, такие как деревянные фигурки или стрелы.

//''Компоненты.''//  Инструменты резчика по дереву включают в себя нож, стамеску и маленькую пилу.

//''Магия, История.''// Ваш опыт даёт вам дополнительные знания при осмотре деревянных предметов, таких как статуэтки или стрелы.

//''Природа.''// Ваши познания о древесине дают вам дополнительные знания, когда вы изучаете деревья.

//''Починка.''//  Как часть короткого отдыха вы можете починить один повреждённый деревянный предмет.

//''Сделать стрелы.''// Как часть короткого отдыха выможете сделать до пяти стрел. Как часть продолжительного отдыха вы можете сделать до двенадцати. Вы должны иметь под рукой древесину для изготовления стрел.

|!Действие| !Сл |
|Сделать небольшую деревянную фигурку  | 10 |
|Вырезать замысловатый узор на древесине | 15 |
В эти наборы входят инструменты, необходимые для ремесла и торговли. Каждый набор связан со своим ремеслом, и для каждого из них требуется отдельное владение.


<<tabs "[tag[Инструменты ремесленников]nsort[]]" "Инструменты алхимика" "$:/state/tab1" "tc-vertical">>
''Цена'': 50 см. ''Вес'': 5 кг.

Набор инструментов ремонтника предназначен для того, чтобы чинить множество обычных предметов. И хотя вы не можете создать большинство из них инструментами ремонтника, вы можете починить порвавшуюся одежду, наточить затупившийся меч и подлатать истрепавшуюся кольчугу.

//''Компоненты.''//  Инструменты ремонтника включают в себя различные ручные инструменты, нитки, иголки, точильный камень, куски ткани и кожи, небольшую банку клея (синюю изоленту пока, увы, не придумали).

//''История.''// Вы можете определить возраст и происхождение предмета, даже если у вас в наличии всего несколько осколков, оставшихся от оригинала.

//''Анализ.''// Когда вы осматриваете повреждённый предмет, вы узнаёте, как и насколько давно он был повреждён.

//''Починка.''//  Вы можете восстановить по 10 хитов повреждённого предмета за каждый час работы. Для починки любого предмета вам необходим доступ к материалам, необходимым для ремонта. Для металлических предметов вам нужен доступ к открытому огню, жара которого достаточно, чтобы сделать металл пластичным.


|!Действие| !Сл |
|Временно починить повреждённый механизм  | 10 |
|Починить предмет вдвое быстрее | 15 |
|Смастерить из хлама временный предмет  | 20 |
''Цена'': 5 см. ''Вес'': 2 кг.

Несмотря на то, что профессия сапожника может показаться искателю приключений слишком простой, пара хороших сапог будет сопровождать персонажа и в труднопроходимой глуши, и в смертельных подземельях.

//''Компоненты.''//  Инструменты сапожника включают в себя молоток, шило, нож, обувную колодку, ножницы, запас кожи и ниток.

//''Магия, История.''// Ваши знания об обуви помогают вам определить магические свойства зачарованных сапог или узнать историю подобных предметов.

//''Анализ.''// Обувь скрывает множество секретов. Вы можете узнать, где недавно был тот, чью обувь вы осматриваете на предмет грязи и поношенности. Ваш опыт в починке обуви облегчает вам определение того, как она была повреждена.

//''Уход за обувью.''//  Как часть продолжительного отдыха, вы можете починить обувь ваших компаньонов. В течение следующих 24 часов до 6 существ по вашему выбору, носящих обувь, над которой вы поработали, могут путешествовать до 10 часов в день, не совершая спасброски от истощения.

//''Создание потайного отделения.''//  За 8 часов работы вы можете добавить потайное отделение в пару обуви. Отделение может содержать в себе предмет до 7 см длинной и 3 см шириной и высотой. Вы совершаете проверку Интеллекта, добавляя ваш бонус мастерства за владение этими инструментами, для определения Сл проверки Интеллекта (Расследование), необходимой для нахождения отделения.


|!Действие| !Сл |
|Определить возраст и происхождение обуви | 10 |
|Найти потайное отделение в каблуке | 15 |
''Цена'': 30 см. ''Вес'': 2 кг.

Владеющий инструментами стеклодува не только умеет выдувать стекло, но также знает особые методики изготовления стеклянных предметов.

//''Компоненты.''//  Инструменты стеклодува включают в себя трубку для выдувания, маленькую стеклодувную обкатку, катальник, развёртки и щипцы. Вам нужен источник тепла для работы со стеклом.

//''Магия, История.''// Ваши знания техник выдувания стекла помогают вам, когда вы изучаете стеклянный предмет, как, например, флакон с зельем или стеклянный предмет, найденный в сокровищах. Например, вы можете изучить, как стеклянный флакон с зельем изменился под действием своего содержимого, что поможет определить эффект зелья. (Зелье может оставить осадок, деформировать стекло или окрасить его).

//''Анализ.''// Когда вы изучаете область, ваши знания могут помочь вам, если улики включают в себя разбитые стекла или стеклянные предметы.

//''Определение слабого места.''//  Потратив 1 минуту, вы можете найти слабое место стеклянного предмета. Любой урон, наносимый предмету при атаке по слабому месту, удваивается.


|!Действие| !Сл |
|Определить происхождение стекла  | 10 |
|Определить, что когда-то содержал стеклянный предмет | 20 |
''Цена'': 1 см. ''Вес'': 2 кг.

Инструменты ткача позволяют вам шить одежду и подгонять её по фигуре.

//''Компоненты.''//  Инструменты ткача включают в себя нитки, иголки и куски ткани. Вы умеете пользоваться ткацким станком, но подобное оборудование слишком громоздкое для транспортировки.

//''Магия, История.''// Ваш опыт даёт вам дополнительные знания при осмотре предметов гардероба, включая плащи и прочие накидки.

//''Анализ.''// Используя свои знания о процессе пошива одежды, при обследовании гобеленов, обивки, одежды и прочих тканых предметов, вы можете обнаруживать зацепки, которые другие могут не заметить.

//''Починка.''//  Как часть короткого отдыха вы можете починить один повреждённый предмет одежды.

//''Пошив одежды.''//   Как часть продолжительного отдыха вы можете создать одежду для существа при наличии достаточного количества ткани и ниток.

|!Действие| !Сл |
|Повторное использование ткани  | 10 |
|Заштопать дырку в ткани | 10 |
|Подшить наряд  | 15 |
''Цена'': 10 см. ''Вес'': 2 кг.

Владение инструментами художника позволяет вам писать красками и рисовать карандашом. Вы также разбираетесь в истории искусств, что может помочь вам при осмотре произведений искусства.

//''Компоненты.''//  Инструменты художнику включают в себя мольберт, холст, краски, кисти, угольные карандаши и палитру.

//''Магия, История, Религия.''// Ваш опыт помогает вам раскрыть знания любого рода, которые связаны с произведениями искусства, как, например, магические свойства картины или происхождение странной фрески, найденной в подземелье.

//''Анализ, Внимательность.''// Когда вы осматриваете картину или подобное произведение изобразительного искусства, ваша осведомлённость о способах их создания может дать вам дополнительные знания.

//''Написание и рисование.''//  Как часть короткого или продолжительного отдыха вы можете создать простое произведение искусства. Хотя ваше творение и может быть недостаточно точным, вы можете запечатлеть образ или сцену, или на скорую руку сделать копию виденного вами художественного произведения.

|!Действие| !Сл |
|Написать точный портрет   | 10 |
|Создать картину со скрытым посланием  | 20 |
''Цена'': 25 см. ''Вес'': 1 кг.

Владение инструментами ювелира включает в себя знание основных способов работы с драгоценностями. Также оно позволяет опознавать драгоценные камни.

//''Компоненты.''//  Инструменты ювелира включают в себя небольшие пилу и молоточек, напильники, щипцы и пинцет.

//''Магия.''// Владение инструментами ювелира даёт вам знания об известных способах магического применения драгоценных камней. Эти знания будут кстати при проверках Магии, связанных с драгоценными камнями или инкрустированными ими предметами.

//''Анализ.''// При осмотре драгоценностей владение инструментами ювелира помогает вам находить зацепки, которые другие бы просмотрели.

//''Опознание драгоценности.''//  Вы можете опознать драгоценность и на глаз определить её стоимость.

|!Действие| !Сл |
|Изменить внешний вид драгоценности   | 15 |
|Определить прошлое драгоценности   | 20 |
При сотворении заклинания, вынуждающего других существ совершить спасбросок, вы можете потратить 3 очка чародейства, чтобы одна из целей заклинания совершила первый спасбросок от этого заклинания с помехой.
Ваша способность использовать заклинания зависит как от суммы уровней классов заклинателей, так и от индивидуальных уровней в этих классах. Если сразу несколько ваших классов даруют вам умение Использование заклинаний, используйте приведённые ниже правила. Если вы мультиклассируетесь, но это умение есть только у одного класса, используйте правила, описанные для этого класса.

---

!!!Известные и подготовленные заклинания
Вы определяете, какие заклинания знаете и можете подготовить для каждого класса индивидуально, как если бы других классов просто не было.

Все известные вам заклинания подготавливаются в рамках одного из классов, и при накладывании этого заклинания вы используете базовую характеристику этого класса. Точно так же фокусировки заклинаний, такие как священные символы, могут использоваться только классами, использующими эту фокусировку.

---

!!!Ячейки заклинаний

[[Онлайн-калькулятор ячеек заклинаний при мультклассировании|http://fexlabs.com/5eslots/]]

Количество имеющихся ячеек заклинаний вы определяете, суммируя уровни:

* [[барда|Бард]], [[волшебника|Волшебник]], [[друида|Друид]], [[жреца|Жрец]] и [[чародея|Чародей]]
* половины уровней (округляя вниз) [[паладина|Паладин]] и [[следопыта|Следопыт]]
* половину уровней (округляя вверх) [[изобретателя|Изобретатель]]
* треть уровней [[воина|Воин]] или [[плута|Плут]] (округляя вниз), если у вас есть умения [[Мистический рыцарь]] или [[Арканный трюкач]] соответственно. 

Получив сумму, определите по приведённой таблице количество имеющихся ячеек заклинаний разных уровней.

Результат из таблицы может дать ячейки заклинаний таких уровней, каких вы не знаете или не можете подготавливать. Вы можете использовать эти ячейки для заклинаний с меньшим уровнем. Если накладываемое вами низкоуровневое заклинание, такое как огненные ладони, обладает усиленным эффектом при использовании ячейки более высокого уровня, вы можете использовать усиленный эффект, несмотря на то, что у вас нет заклинаний такого высокого уровня.

| !Ур. | !1 | !2 | !3 | !4 | !5 | !6 | !7 | !8 | !9 |
| !1 | 2 | — | — | — | — | — | — | — | — |
| !2 | 3 | — | — | — | — | — | — | — | — |
| !3 | 4 | 2 | — | — | — | — | — | — | — |
| !4 | 4 | 3 | — | — | — | — | — | — | — |
| !5 | 4 | 3 | 2 | — | — | — | — | — | — |
| !6 | 4 | 3 | 3 | — | — | — | — | — | — |
| !7 | 4 | 3 | 3 | 1 | — | — | — | — | — |
| !8 | 4 | 3 | 3 | 2 | — | — | — | — | — |
| !9 | 4 | 3 | 3 | 3 | 1 | — | — | — | — |
| !10 | 4 | 3 | 3 | 3 | 2 | — | — | — | — |
| !11 | 4 | 3 | 3 | 3 | 2 | 1 | — | — | — |
| !12 | 4 | 3 | 3 | 3 | 2 | 1 | — | — | — |
| !13 | 4 | 3 | 3 | 3 | 2 | 1 | 1 | — | — |
| !14 | 4 | 3 | 3 | 3 | 2 | 1 | 1 | — | — |
| !15 | 4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | — |
| !16 | 4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | — |
| !17 | 4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | 1 |
| !18 | 4 | 3 | 3 | 3 | 3 | 1 | 1 | 1 | 1 |
| !19 | 4 | 3 | 3 | 3 | 3 | 2 | 1 | 1 | 1 |
| !20 | 4 | 3 | 3 | 3 | 3 | 2 | 2 | 1 | 1 |



---

!!!Магия договора
Если у вас есть и умение Использование заклинаний и умение Магия договора от класса колдуна, вы можете использовать ячейки заклинаний, полученные от Магии договора для накладывания известных или подготовленных заклинаний, полученных от умения Использование заклинаний, а также можете использовать ячейки заклинаний, полученные от умения Использование заклинаний для накладывания известных вам заклинаний колдуна.
Обычно вы взаимодействуете с предметами во время других действий, например, вынимаете меч частью атаки, но если предмет требует действия для его использования, вы совершаете действие Использование предмета. Это действие также пригодится, если вы хотите в течение хода взаимодействовать сразу с несколькими предметами.
* Вы совершаете с помехой проверки характеристик и броски атаки, пока источник вашего страха находится в пределах вашей линии обзора.
* Вы не способны добровольно приблизиться к источнику своего страха.
Испытания навыков позволяют моделировать множество задач, выполняемых персонажами во время приключения: от обезвреживания комплексной ловушки до проведения мирных переговоров между враждующими нациями.

Испытания навыков обычно представляют собой последовательность проверок характеристик, совершаемых несколькими персонажами с целью достижения определённого количества успешных проверок, до того, как они провалят три из них.

---

!!!Проведение испытания

# ''Определите сложность испытания.'' Мастер устанавливает количестве успехов необходимых для прохождения испытания. Сложность может быть от трёх до пяти и выше.
# ''Определите используемый навык.'' Игрок выбирает навык, которым владеет его персонаж, и описывает как применение этого навыка может помочь группе в прохождении испытания. Персонаж может использовать каждое владение только один раз за испытание. Владение навыком можно заменить следующими опциями:
## Владением инструментом или языком;
## Заговором;
## Заклинанием 1 или более высокого уровня (может предоставить автоматический успех);
## Использованием магического предмета
# ''Определите сложность проверки.'' Мастер устанавливает сложность проверки, исходя из того насколько применяемый навык уместен для ситуации.
# ''Совершите проверку с учётом преимуществ и помех.'' Персонажи могут получить преимущество на бросок, используя уместные заклинания или снаряжение. Состояние персонажа или окружающие эффекты (на усмотрение Мастера) могут предоставлять помеху на бросок. 
# ''Передайте ход другому персонажу.'' Персонаж не может совершать две проверки подряд с целью прохождения испытания. На усмотрение Мастера проверки могут совершаться как и без определённой очерёдности, так и в порядке инициативы.
# ''Продолжайте до завершения испытания.'' Испытание завершается, когда группа совершает необходимое количество успешных проверок или проваливает три из них.

---

!!!Помощь и прочие бонусы
Персонаж может дать преимущество на проверку другого персонажа, совершая действие [[Помощь|Помощь]]. Действие [[Помощь|Помощь]] может быть использовано, только если персонаж владеет навыком, используемым в совершении проверки. Персонаж, использующий действие [[Помощь|Помощь]] подчиняется тем же правилам и не может принимать участие в следующей проверке, а также повторно использовать задействованное владение.

Персонажи, использующие заклинания, умения или особенности, предоставляющие бонусы к результатам проверок (Вдохновение барда, //указание// и т.п.), не могут принимать участие в следующей проверке.


---

!!!Провалы и последствия
Проваленные проверки испытания могут сопровождаться различными негативными последствиями для группы. В некоторых случаях Мастер может не использовать правило трёх провалов, а позволить группе проходить испытание, пока персонажи готовы мириться с последствиями провалов.

Примеры последствий:

* получение урона;
* получение [[истощения|Истощённый]];
* повреждение предмета;
* потеря предмета;
* ухудшение отношений с НИП;
* получение ложной информации;
* привлечение нежелательного внимания;
* отравление/болезнь;
* потеря ресурсов (в т.ч. классовых) и т.п.

---

!!!Особые испытания навыков

<<tabs "[tag[Особые испытания навыков]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
Предупреждён – значит вооружён. Исследование во время простоя позволяет персонажу получить знания о чудовище, местности, волшебном предмете или по какому-либо другому конкретному вопросу. 

//''Ресурсы''//. Обычно для проведения исследования персонажу требуется доступ к библиотеке или к мудрецу. Если такой доступ имеется, то проведение исследования требует одной рабочей недели и не менее 50 см, которые будут потрачены на материалы, взятки, подарки и прочие расходы. 

//''Определение результата''//. Персонаж определяет, что является предметом исследования – конкретная личность, место или предмет. После одной недели персонаж совершает проверку интеллекта с бонусом +1 за каждые 100 см, потраченные сверх изначальных 100 см, до максимума в +6. Кроме того, персонаж, у которого есть доступ к библиотеке со специальными книгами по предмету исследований или к хорошо осведомлённым мудрецам, получает преимущество на эту проверку. Определите, насколько много сведений получил персонаж, используя таблицу ниже. 

| !Результат |!Итог|
| 1-5 |Безрезультатно|
| 6-10 |Вы изучили один фрагмент сведений|
| 11-20 |Вы изучили два фрагмента сведений|
| 21+ |Вы изучили три фрагмента сведений|

Каждый фрагмент сведений равноценен одному правдивому утверждению о личности, местности или предмете. Это, например, могут быть знания о сопротивлениях существа, пароль для доступа на запертый уровень подземелья, заклинания, наиболее часто применяющиеся в ордене волшебников и т. д. Мастер является последним судьёй и определяет, что именно узнал персонаж.

//''Осложнения''//. Наибольший риск при исследовании – получение ложной информации. Не все знания точны или правдивы, а соперник с наклонностями учёного, особенно если предмет исследования ему известен, может попытаться ввести персонажей в заблуждение. Соперник может подсунуть ложную информацию, подкупить мудрецов, чтобы те дали плохие советы, или просто украсть ключевые книги, необходимые для поиска достоверной информации. 

Кроме того, персонаж может столкнуться с другими осложнениями во время исследования. На каждую неделю, потраченную на исследо- вания, существует 10% шанс осложнения, примеры которых приведены в таблице ниже. 

| !к6 |!Осложнение |
| 1 |Вы случайно повредили редкую книгу. |
| 2 |Вы оскорбили мудреца, который требует теперь необыкновенный дар.|
| 3 |Если бы вы знали, что книга была проклята, вы бы ни за что её не открыли. |
| 4 |Мудрец стал одержим идеей убедить вас в правдивости нескольких странных теорий о реальности.|
| 5 |Ваши действия привели к тому, что вам запретили доступ в библиотеку, пока не возместите ущерб.|
| 6 |Вы получили полезную информацию, но пообещали выполнить опасное задание в качестве оплаты. |
<<tabs "[tag[Источник чародейства]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
Некоторые особые способности и опасности окружающей среды, такие как недоедание и длительное воздействие очень низких или высоких температур, могут стать причиной состояния, называемого истощением. Истощение делится на шесть степеней. Эффект даёт существу ту или иную степень истощения, согласно описанию.

| !Степень	|!Эффект |
| 1 |Помеха на проверки Силы и Ловкости. Вы не можете совершать действие Рывок. |
| 2 |Помеха на все проверки характеристик. Скорость уменьшается вдвое. |
| 3 |Помеха на броски атаки и спасброски. |
| 4 |Вы можете использовать либо действие, либо бонусное действие в свой ход, и не можете совершать реакции. Если вы поддерживаете концентрацию, вы должны тратить действие в начале своего хода для её сохранения. |
| 5 |Скорость снижается до 1 м. Вы не можете поддерживать концентрацию или сотворять заклинания, требующие концентрации. |
| 6 |Вы становитесь [[умирающим|Умирающий]], пока не понизите степень истощения. Каждая дополнительная степень истощения, полученная при истощении 6 степени, считается двумя проваленными спасбросками от смерти. |

Если существо, уже находящееся в состоянии истощения, подвергается воздействию другого эффекта, вызывающего истощение, его текущая степень истощения повышается на значение, указанное в описании эффекта.

На существо воздействуют эффекты не только текущей степени истощения, но и более слабых степеней. Например, существо на 2 степени истощения не может совершать действие Рывок, перемещается в два раза медленнее и совершает с помехой проверки характеристик.

Эффект, снимающий истощение, понижает его степень согласно описанию эффекта, вплоть до окончания действия истощения, если степень истощения существа становится ниже 1.

Непотревоженный сон снижает степень истощения на 1, при условии, что существо в течении дня употребило как минимум половину требуемого количества [[пищи и воды.|Голод и жажда]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img width=185 class="centerme" [https://i.imgur.com/LPSQUVl.png]]

Ваш персонаж калаштар обладает следующими особенностями.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значения вашей Мудрости и Харизмы увеличиваются на 1. |
|^Двойной разум |^Вы совершаете все спасброски Мудрости с преимуществом. |
|^Ментальная дисциплина |^У вас есть сопротивление к урону психической энергией. |
|^Отсечённый от снов |^Калаштары спят, но они не связаны с Планом Снов, как прочие существа. Вместо этого их разум черпает видения из воспоминаний своего потустороннего духа, пока они спят. Вы невосприимчивы к заклинаниям и другим магическим эффектам, которые требуют от вас возможности видеть сны, например к //вещему сну//, но не к заклинаниям и другим магическим эффектам, усыпляющим вас. |
|^Связь разумов |^Вы можете разговаривать телепатически с любым существом, которое видите в пределах дистанции в количестве метров, равному вашему удвоенному уровню. Вам не нужно знать общий с существом язык для того, чтобы оно понимало ваши телепатические высказывания, но существо должно быть в состоянии понимать как минимум один язык. Когда вы используете эту особенность, вы можете действием дать существу, с которым вы общаетесь телепатически, возможность говорить телепатически с вами в течении 1 часа, или пока вы не прервёте этот эффект преждевременно действием, либо дадите эту возможность другому существу. Чтобы использовать эту особенность, существо должно видеть вас и находиться в пределах дальности этой особенности.|
|^Речь Куори |^Вы можете говорить, читать и писать на языке Куори. |
//Стоимость перемещения:// 2 м за 1 м.

Карабканье по скользкой вертикальной поверхности или поверхности, где мало за что можно ухватиться, может требовать успешную проверку Силы (Атлетика).
Вы привыкли к жизни в дороге. Вы гордитесь тем, что прошли все основные торговые пути в своём регионе, включая лучшие проселочные дороги и короткие пути. Путешествуя по этим дорогам, вы знаете, где находятся лучшие постоялые дворы, места для привала и источники воды, а также потенциальные опасные места. Пробыв в дороге так долго, вы завели много знакомств и легко собираете информацию и слухи, которые ходят из города в город. Вы хорошо управляетесь с вьючными животными, а также с фургонами всех видов и их ремонтом.

* ''Владение навыками:'' Выживание, Уход за животными
* ''Владение инструментами:'' [[Наземный транспорт|Наземный и водный транспорт]]
* ''Языки:'' Один на ваш выбор 
* ''Снаряжение:'' Кнут, средняя палатка, карта области, комплект дорожной одежды и кошель с 10 см 

!!!Умение: Погонщик
Вы привыкли к ответственности и заработали репутацию надёжного человека. Опыт научил вас полагаться на свою интуицию. Другие осознают это и обращаются к вам за указаниями, когда ситуация становится серьезной. Вы можете определить наиболее безопасные места для привала. Если вы являетесь частью экипажа каравана, вы можете привлечь двух дополнительных рабочих, которые лояльны к вам в зависимости от вашей репутации. У вас отличная память на карты и местность, и вы всегда можете определить  стороны света во время путешествия.

!!!Персонализация

| !к8 |!Черта характера |
| 1 |Любая группа настолько сильна, насколько сильно её самое слабое звено. Каждый должен несити свою ношу сам. |
| 2 |Всегда находится кто-то, кто пытается забрать что-то принадлежащее мне. Будьте бдительны. |
| 3 |Всему можно научиться, если у вас есть правильный учитель. Большинству людей просто нужен шанс. |
| 4 |Рано ложиться и рано вставать; по крайней мере, это под моим контролем. |
| 5 |Вы можете слушать меня или не слушать и жалеть, что не послушали. Все оказываются по одну сторону этого забора. |
| 6 |В конце концов мой упорный труд будет вознагражден. Может, это время наконец-то пришло. |
| 7 |Сильный вол или лошадь надёжнее большинства людей, которых я встречал. |
| 8 |У меня никогда не было времени на книги, но хотелось бы. Я восхищаюсь людьми, которые потратили время на обучение. |

| !к6 |!Идеал |
| 1 |''Служба.'' Использование моих талантов для помощи другим - лучший способ помочь себе. |
| 2 |''Эгоизм.'' То, о чем люди не знают, навредит им, но почему это моя проблема? |
| 3 |''Скитания.'' Я иду туда, куда ведет меня дорога. Иногда это хорошо... |
| 4 |''Адаптация.'' На открытой дороге побеждает закон природы. Жертвами становятся неподготовленные. |
| 5 |''Сосредоточенность. ''У меня просто есть работа, и я собираюсь её выполнить. |
| 6 |''Мотивация.'' Есть причина, по которой у меня хорошо получается то, что я делаю - я обращаю внимание на детали. |

| !к6 |!Привязанность |
| 1 |У моего брата есть ферма, и я помог ему и его соседям перевезти их товары в близлежащие города. Это хорошие люди. |
| 2 |На караван, который я возглавлял, напали бандиты, и многие невиновные погибли. Я клянусь, что отомщу за них, убивая всех бандитов, с которыми столкнусь. |
| 3 |Солдаты - в основном хорошие ребята, понимающие важность защиты дорог. Городская стража - те, на кого нужно обратить внимание. Если они проверяют ваши товары, приготовьтесь заплатить штраф. |
| 4 |Новый капитан местного патруля понимает важность безопасных дорог. Он нанимал меня несколько раз, и я ему благодарен. |
| 5 |Всегда найдётся дорога, по которой я раньше не ходил. Я всегда ищу новые места для изучения. |
| 6 |Богатство и власть мало что значат без свободы идти куда угодно и когда угодно. |

| !к6 |!Слабость |
| 1 |Мне трудно доверять людям, которых я только что встретил. |
| 2 |Мне нравится открытая дорога. Под землей и в тесноте я очень нервничаю. |
| 3 |Я ожидаю, что другие прислушаются к моим приказам, и не испытываю особого уважения или сочувствия, если они этого не сделают. |
| 4 |Из-за своей гордыни я с трудом признаю свою неправоту. |
| 5 |После того, как я определюсь с планом действий, я не отказываюсь от него. |
| 6 |Мне нравится исследовать, и мое любопытство иногда приводит к неприятностям. |
Тепло костра и приятный запах горячей еды может привлечь внимание населения дикой местности - от жестоких бандитов до голодных медведей или кровожадных культистов. Вы подвергаете себя большому риску, если разбиваете лагерь не назначив тех, кто присматривал бы за потенциальными незваными гостями. Караульные отвечают за безопасность лагеря и осматривают местность на предмет возможной опасности. Для того, чтобы покрыть все время ночлега, необходимо минимум трое караульных, дежурящих по 4 часа.

При приближении опасности караульный совершает проверку Мудрости (Внимательность) против Скрытности незваного гостя.

''Успех''. Караульный успешно обнаружил нарушителей и может разбудить группу, у которой будет немного времени, чтобы подготовиться к нападению.

''Провал''. Караульный и вся остальная группа застигнуты врасплох.

Караульный охраняет лагерь по ночам. Если караульный проваливается, вы рискуете подвергнуться нападению во время сна.

Если вы взяли на себя роль караульного, вы отвечаете за совершение проверок Мудрости (Внимательность) для обнаружения приближающихся угроз в ночное время. Мастер сообщит вам, если нужно совершить проверку. Караульный не может участвовать ни в какой другой деятельности, кроме принятия пищи и сна. Убедитесь в том, что тот, кто несёт дежурство, не нужен для чего-то ещё. Установка сигнализирующих ловушек позволит вам добавить бонус мастерства к броску.

''Успех''. Вы успели вовремя разбудить группу, чтобы подготовиться к нападению.

''Провал''. Вы не успели вовремя заметить опасность, и группу застали врасплох.
!!!Волшебные палочки
Волшебные палочки достигают в длину 40 см и изготавливаются из металла, кости или дерева. Палочка может быть также украшена навершием из стекла, камня, или какого-либо другого материала. 

---

!!!Доспехи
Если в описании доспехов не сказано иначе, то для использования их магических свойств они должны быть надеты. 
Для некоторых комплектов магических доспехов может быть указан вид доспеха, например, «кольчуга» или «латы». Если же особого указания по этому поводу нет, Мастер может определить вид доспеха случайным образом.

---

!!!Жезлы
Магические жезлы могут выглядеть как скипетры, другие же просто представляют собой тяжёлые цилиндры. Они, как правило, изготовлены из металла, дерева или кости; весят 1-3 кг, имеют длину 0.5-1 м при толщине 2-3 см.

---

!!!Зелья
Различные виды магических жидкостей сгруппированы в категорию зелий: варева из колдовских трав, вода из магических фонтанов или священных источников, и масла, которые наносятся на существо или предмет. Объём большинства зелий составляет примерно 100 мл. 
Зелья являются расходуемыми магическими предметами. Персонаж может выпить зелье бонусным действием или применить его на другого персонажа действием, если в описании зелья не сказано иначе. Использованное зелье действует немедленно и считается израсходованным. 

---

!!!Кольца
Магические кольца наделяют удивительной силой тех, кому повезло найти их. Если в описании кольца не сказано иначе, то для того, чтобы магия кольца работала, его необходимо носить на пальце.

---

!!!Оружие
Созданное для воплощения самых жестоких замыслов своего владельца или же напротив, выкованное служить высоким рыцарским идеалам, магическое оружие является желанным предметом для многих искателей приключений. 
Для некоторых экземпляров магического оружия в описании может быть указан его вид, такой как «короткий меч» или «длинный лук». Если же вид оружия не указан, Мастер можете выбрать его самостоятельно или же определить случайным образом. 
Боеприпасы, выпущенные из магического оружия, считаются магическими в вопросе преодоления сопротивления и иммунитета к немагическим атакам и урону. 

---

!!!Посохи
Длина магического посоха 1.5-2 м. Внешне посохи могут весьма отличаться друг от друга: одни гладкие и имеют практически равный диаметр по всей длине, другие — витые и корявые; одни изготовлены из дерева, другие из полированного металла или кристалла. В зависимости от материала, посох может весить от 1 до 3 кг. 
Если в описании посоха не сказано иначе, то посох может использоваться, как оружие, являясь при этом «дубинкой». 

---

!!!Свитки
Большинство свитков — это заклинания, хранящиеся в письменной форме, но есть и те, что несут уникальные чары, которые предоставляют мощную охрану. Каким бы ни было его содержание, свиток представляет собой свёрток бумаги, иногда прикреплённый к деревянному стержню, и, как правило, хранящийся в тубе из слоновой кости, нефрита, кожи, дерева или металла. 
Свиток является расходуемым магическим предметом. Независимо от характера магии, содержащейся в свитке, активация этой магии требует использования действия, чтобы прочитать свиток. После того, как магия, заключённая свитке, высвобождается, свиток не может быть использован повторно. Слова исчезают, или он рассыпается в прах. 

---

!!!Чудесные предметы
Чудесные предметы — это довольно обширная категория магических предметов, которая включает в себя предметы одежды, такие как: сапоги, ремни, плащи, перчатки и различные ювелирные изделия и украшения: амулеты, броши и обручи. Сумки, ковры, хрустальные шары, разного рода фигурки, музыкальные инструменты и многие другие предметы также попадают в эту категорию. 
[img width=320 class="centerme" [https://i.imgur.com/GBEOJ7D.png]]

<<tabs "[tag[Кенку - описание]]" "Описание кенку" "$:/state/tab1">>
[img width=330 class="centerme" [https://i.imgur.com/MiiZQy0.png]]

Кенку покражи - наиболее распространённый вид кенку. Они часто встречаются в крупных городах в роли попрошаек и мелких преступников. Отчасти это связано с их способностью ловко управляться со своим клювом, позволяя им выхватывать предметы из чужих карманов в мгновение ока. По той же причине, кенку покражи обычно не пускают в дорогие заведения, где воровство является распространённой проблемой. Многие кенку покражи выживают, служа посыльными, шпионами и наблюдателями для воровских гильдий, разбойных банд и преступных картелей.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 1. |
|^Клюв |^Своим клювом вы можете выполнять точные действия, для которых обычно понадобилась бы свободная рука. Ваш клюв недостаточно крепок для совершения действий требующих приложения силы, например, для подъёма тяжестей или совершения атак. Соматические компоненты заклинаний слишком сложны для исполнения клювом. |
|^Мастер подделок |^Вы можете копировать почерк и ремесло других существ. Вы получаете преимущество на все проверки, проводимые для создания подделки или копии существующего объекта. |
|^Подготовка кенку |^Вы владеете на ваш выбор двумя из следующих навыков: Акробатика, Ловкость рук, Обман и Скрытность. |
|^Тёмное оперение |^Вы можете использовать действие Засада в качестве бонусного действия, если находитесь в области тусклого освещения или темноты. |





[img width=350 class="centerme" [https://i.imgur.com/YrowN2y.png]]

Кенку савана - странники, которые собирают безделушки по пограничным землям и редко останавливаются в одном городе дольше чем на несколько дней. Они пересказывают мрачные пророчества в надежде на то, что другие смогут избежать ту же тяжёлую участь, что выпала им. Из-за этих предсказаний, кенку савана часто ассоциируют с грядущей бедой и называют их "предвестниками несчастья". По той же причине, многие боятся общаться с ними, опасаясь узнать что-то страшное о своём будущем. Кенку савана уделяют уделяют пристальное внимание чужим действиям, изучая каждого, с кем встречаются. Можно быть уверенным в том, что эти "пернатые цыгане" улавливают в чужом поведении куда больше, чем раскрывают их предсказания.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 1. |
|^Вещун |^Вы владеете навыками Проницательность и Религия. |
|^Глазами птицы |^С помощью звуков и жестов вы можете передавать простые понятия Маленьким или ещё меньшим птицам. Кроме того, вы можете действием указать на невраждебную Маленькую или ещё меньшую птицу, которую вы можете видеть в пределах 5 м от себя, и начать смотреть её глазами. В это время вы слепы. Эффект оканчивается, если птица удаляется от вас больше чем на 10 м, либо если вы оканчиваете его бонусным действием.|
|^Око предзнаменований |^Вам известен заговор //указание//. При достижении 3 уровня, вы можете один раз использовать заклинание //почтовое животное// на птицу. При достижении 5 уровня, вы можете один раз использовать заклинание //гадание//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Мудрость. |






[img width=320 class="centerme" [https://i.imgur.com/klkPo11.png]]

Те, кто знают о существовании кенку страды, называют их "боронами". Кенку страды прочёсывают поля битв ради великой цели. Никто не знает, кто или что побуждает их к ужасной жизни жнеца, но все рождающиеся боронами посвящают себя этой безрадостной обязанности следить за тем, чтобы все мертвецы оставались таковыми. Сами они считают своё дело самым почётным, без устали охотясь на нежить. Кенку страды полагаются на свой медицинский опыт, чтобы излечивать болезни живых, потому что верят, что погибшие от болезни перенесут свои недуги в загробную жизнь. Многие кенку страды носят с собой косу или серп, и ходят слухи о том, что коса борона может украсть сущность души существа.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Харизмы увеличивается на 2. |
|^Жнец |^Вы владеете косами и серпами и можете использовать их в качестве фокусировки для заклинаний. |
|^Последние слова |^Вы можете подражать словам мёртвых. Вы можете действием прикоснуться к трупу, не являющимся нежитью, и точно сымитировать последнюю произнесённую им фразу. Вы не можете использовать эту особенность повторно, пока не завершите продолжительный отдых. |
|^Смертный приговор |^Вы можете бонусным действием приговорить окровавленное существо, которое находится в пределах 3 м от вас, к смерти, окружив его тёмной аурой. Любое магическое лечение, которое получает приговорённое существо, уменьшается вдвое на 1 минуту. Конструкты обладают иммунитетом к этому эффекту. |
|^Чумной доктор |^Вы владеете навыками История и Медицина. Кроме того, вы совершаете спасброски от болезней с преимуществом. |
| !Ур. | !БМ |!Умения | !ИЗаг | !ИЗакл |
| !1 | +2 |Вдохновение барда (1к6), Использование заклинаний  | 2 | 4 |
| !2 | +2 |Мастер на все руки, Песнь отдыха (1к6) | 2 | 5 |
| !3 | +2 |Коллегия бардов, Компетентность, Увеличение характеристики | 2 | 6 |
| !4 | +2 |Черта | 3 | 7 |
| !5 | +3 |Вдохновение барда (1к8), Источник вдохновения  | 3 | 8 |
| !6 | +3 |Контрочарование, Увеличение характеристики, Умение коллегии бардов | 3 | 9 |
| !7 | +3 |—  | 3 | 10 |
| !8 | +3 |Черта | 3 | 11 |
| !9 | +4 |Песнь отдыха (1к8), Увеличение характеристики | 3 | 12 |
| !10 | +4 |Вдохновение барда (1к10), Компетентность, Тайны магии | 4 | 14 |
| !11 | +4 |—   | 4 | 15 |
| !12 | +4 |Увеличение характеристики, Черта | 4 | 15 |
| !13 | +5 |Песнь отдыха (1к10)  | 4 | 16 |
| !14 | +5 |Тайны магии, Умение коллегии бардов | 4 | 18 |
| !15 | +5 |Вдохновение барда (1к12), Увеличение характеристики | 4 | 19 |
| !16 | +5 |Черта | 4 | 19 |
| !17 | +6 |Песнь отдыха (1к12)  | 4 | 20 |
| !18 | +6 |Тайны магии | 4 | 22 |
| !19 | +6 |Увеличение характеристики | 4 | 22 |
| !20 | +6 |Превосходное вдохновение | 4 | 22 |

//Ур. - Уровень, БМ - Бонус мастерства, ИЗаг - Известные заговоры, ИЗакл - Известные заклинания//

''Ячейки заклинаний на уровень заклинаний''

| !Ур. | !1 | !2 | !3 | !4 | !5 | !6 | !7 | !8 | !9 |
| !1 |  2 | — | — | — | — | — | — | — | — |
| !2 | 3 | — | — | — | — | — | — | — | — |
| !3 |  4 | 2 | — | — | — | — | — | — | — |
| !4 |  4 | 3 | — | — | — | — | — | — | — |
| !5 |  4 | 3 | 2 | — | — | — | — | — | — |
| !6 |  4 | 3 | 3 | — | — | — | — | — | — |
| !7 |  4 | 3 | 3 | 1 | — | — | — | — | — |
| !8 |  4 | 3 | 3 | 2 | — | — | — | — | — |
| !9 |  4 | 3 | 3 | 3 | 1 | — | — | — | — |
| !10 |  4 | 3 | 3 | 3 | 2 | — | — | — | — |
| !11 |  4 | 3 | 3 | 3 | 2 | 1 | — | — | — |
| !12 |  4 | 3 | 3 | 3 | 2 | 1 | — | — | — |
| !13 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | — | — |
| !14 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | — | — |
| !15 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | — |
| !16 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | — |
| !17 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | 1 |
| !18 |  4 | 3 | 3 | 3 | 3 | 1 | 1 | 1 | 1 |
| !19 |  4 | 3 | 3 | 3 | 3 | 2 | 1 | 1 | 1 |
| !20 |  4 | 3 | 3 | 3 | 3 | 2 | 2 | 1 | 1 |

---
---

!!!Быстрое создание
Вы можете быстро создать барда, следуя этим рекомендациям. Во-первых, у вашей Харизмы должно быть наивысшее значение. Следующей по величине характеристикой должна быть Ловкость. Во-вторых, выберите предысторию «[[артист|Артист]]». В-третьих, выберите заговоры //злая насмешка// и //пляшущие огоньки//, а также заклинания 1 уровня //волна грома//, //лечащее слово//, //обнаружение магии// и //очарование личности//.

---
---

!!!Хиты
''Кость Хитов:'' 1к8 за каждый уровень барда

''Хиты на 1 уровне:'' 8 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к8 (или 5) + мод. Телосложения за каждый уровень барда после первого

---

!!!Владение
* [[Доспехи|Доспехи и щиты]]: Лёгкие доспехи
* [[Оружие|Оружие]]: Простое лёгкое и одноручное оружие, воинское лёгкое и одноручное клинковое оружие
* [[Инструменты|Инструменты]]: Три музыкальных инструмента на ваш выбор
* ''Спасброски:'' Ловкость, Харизма
* ''Навыки:'' Три любых навыка на ваш выбор

!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) шпага, (б) сабля или (в) простое оружие не дороже 25 см
* (а) набор дипломата или (б) набор артиста
* (а) лютня или (б) другой музыкальный инструмент
* дублет, кинжал и походный набор

''Произвольная экипировка''

* Вы получаете 4к4 × 10 серебряных монет (или 100 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! [img[1.png]] Вдохновение барда

<<<
Своими словами или музыкой вы можете вдохновлять других. 
<<<

Вы можете бонусным действием выбрать одно существо, отличное от вас, в пределах 12 м, которое может вас слышать:

* Это существо получает кость Вдохновения барда — 1к6. В течение следующих 10 минут оно может один раз бросить эту кость и добавить результат к проверке характеристики, броску атаки или спасброску, который оно совершает. Существо может принять решение о броске кости Вдохновения барда уже после объявления результата броска к20.
* Если существо сотворяет заклинание, оно может один раз бросить эту кость и добавить результат к урону или исцелению, полученному одной из целей этого заклинания.
* Как только кость Вдохновения барда брошена, она пропадает.
* Существо может иметь только одну такую кость одновременно.

Вы можете использовать это умение количество раз, равное модификатору вашей Харизмы (минимум 1). Потраченные использования этого умения восстанавливаются после завершения продолжительного отдыха.

Ваша кость Вдохновения барда изменяется с ростом вашего уровня в этом классе. Она становится 1к8 на 5 уровне, 1к10 на 10 уровне и 1к12 на 15 уровне.

---

!!! [img[1.png]] Использование заклинаний

<<<
Вы научились изменять ткань реальности в гармонии со своей волей и музыкой. Ваши заклинания являются частью вашего обширного репертуара; это магия, которой вы найдёте применение в любой ситуации.
<<<

''Заговоры (заклинания 0 уровня)''

Вы известен заговор //фокусы// и ещё два заговора на ваш выбор из списка заклинаний барда. Вы узнаёте дополнительные заговоры барда на более высоких уровнях, как показано в колонке «ИЗаг (известные заговоры)».

''Ячейки заклинаний''

Таблица выше показывает, сколько ячеек заклинаний у вас есть для сотворения заклинаний 1 и более высоких уровней. Для сотворения заклинания вы должны потратить ячейку соответствующего, либо более высокого уровня. Вы восстанавливаете все потраченные ячейки после завершения продолжительного отдыха.

''Известные заклинания первого и более высоких уровней''

Вам известны четыре заклинания 1 уровня на ваш выбор из списка заклинаний барда.

Колонка «ИЗакл (известные заклинания)» показывает, когда вы сможете выучить новые заклинания. Уровень заклинаний не должен превышать уровень самой высокой имеющейся у вас ячейки заклинаний барда.

''Заклинательная гибкость''

Каждый раз, когда вы завершаете продолжительный отдых, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний барда того же уровня.

Кроме того, когда вы получаете уровень в этом классе, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний барда, с уровнем, не превышающим уровень ячеек заклинаний барда.

''Базовая характеристика заклинаний''

Харизма является базовой характеристикой для сотворения ваших заклинаний барда. Ваша магия проистекает из сердечности и душевности, которую вы вкладываете в исполнение музыки и произнесение речей. 

Вы используете Харизму в случаях, когда заклинание барда ссылается на базовую характеристику. Кроме того, вы используете Харизму при определении Сл спасбросков от ваших заклинаний барда, и при броске атаки заклинаниями.

```
Сл спасброска = 8 + бонус мастерства + модификатор Харизмы
Модификатор броска атаки = бонус мастерства + модификатор Харизмы
```

''Ритуальное колдовство''

Вы можете сотворить известное вам заклинание барда как ритуал, если у этого заклинания есть ключевое слово «ритуал».

''Фокусировка заклинания''

Вы можете использовать ваш [[музыкальный инструмент|Музыкальные инструменты]] в качестве фокусировки для ваших заклинаний барда.

---

!!! [img[2.png]] Мастер на все руки
Вы можете добавлять половину бонуса мастерства, округлённую в меньшую сторону, ко всем проверкам характеристик, куда этот бонус ещё не включён.

---

!!! [img[2.png]] Песнь отдыха

<<<
С помощью успокаивающей музыки или речей вы можете помочь своим раненым союзникам восстановить их силы во время короткого отдыха. 
<<<

Если вы, или любые союзные существа, способные слышать ваше исполнение во время короткого отдыха или ночлега, тратите Кости Хитов на восстановление хитов, вы единожды восстаналиваете дополнительно 1к6 хитов.

Количество дополнительно восстанавливаемых хитов растёт с вашим уровнем в этом классе: 1к8 на 9 уровне, 1к10 на 13 уровне и 1к12 на 17 уровне.

---

!!! [img[3.png]] Коллегия бардов


<<<
Барды не любят одиночества. Они разыскивают друг друга, чтобы обменяться песнями и историями, похвастаться достижениями и поделиться знаниями. Барды образуют открытые ассоциации, называемые коллегиями, которые помогают им собираться вместе, и способствуют сохранению традиций.
<<<


Вы углубляетесь в традиции выбранной вами коллегии бардов: [[Доблести|Коллегия Доблести]], [[Знаний|Коллегия Знаний]], [[Красноречия|Коллегия Красноречия]], [[Мечей|Коллегия Мечей]], [[Очарования|Коллегия Очарования]], [[Созидания|Коллегия Созидания]] или [[Шёпотов|Коллегия Шёпотов]]. Ваш выбор определит умения, предоставляемые на 3, 6 и 14 уровнях. 

---

!!! [img[3.png]] Компетентность
Выберите 2 навыка из тех, которыми вы владеете. Ваш бонус мастерства для проверок этих навыков удваивается. 

На 10 уровне вы можете выбрать ещё 2 навыка и получить для них это преимущество.

---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[4.png]] Черта
При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[5.png]] Источник вдохновения

<<<
Вы можете восстановить все потраченные использования вдохновения барда, черпая вдохновение в чужом или своём творчестве. 
<<<

Вы должны провести 30 минут изучая предметы искусства, совершенствуя собственное мастерство, вдохновляясь окружением или ища вдохновения другим подходящим для вас способом. Вы можете делать это частью отдыха.

Вы можете использовать это умение количество раз, равное вашему бонусу мастерства. Потраченные использования этого умения восстанавливаются после завершения продолжительного отдыха.

---

!!! [img[6.png]] Контрочарование

<<<
Вы получаете возможность использовать звуки или слова силы для разрушения воздействующих на разум эффектов. 
<<<

Вы можете действием начать исполнение, которое продлится до конца вашего следующего хода. В течение этого времени вы и все дружественные существа, способные слышать ваше исполнение, в пределах 6 м от вас совершают спасброски от [[испуга|Испуганный]] и [[очарования|Очарованный]] с преимуществом. 

Исполнение заканчивается преждевременно, если вы оказываетесь [[недееспособны|Недееспособный]], теряете способность говорить, или прекращаете исполнение добровольно (действие не требуется).

---

!!! [img[10.png]] Тайны магии

<<<
Вы успели накопить багаж знаний из самого широкого спектра магических дисциплин.
<<<

Вы изучаете два заклинания любого класса на ваш выбор, включая ваш собственный. Уровень заклинаний не должен превышать уровень самой высокой имеющейся у вас ячейки заклинаний барда.

Эти заклинания считаются для вас заклинаниями барда, и они учитываются в общее количество известных вам заклинаний.

Вы изучаете ещё по два заклинания таким образом на 14 и 18 уровнях.

---

!!! [img[20.png]] Превосходное вдохновение
Если на момент броска инициативы у вас не осталось неиспользованных костей Вдохновения барда, вы получаете одно.
| !Ур. | !БМ |!Умения | !Ярость | !Урон ярости |
| !1 | +2 |Защита без доспехов, Ярость | 2 | +2 |
| !2 | +2 |Безрассудная атака, Чувство опасности | 2 | +2 |
| !3 | +2 |Первобытное знание, Путь дикости, Увеличение характеристики | 3 | +2 |
| !4 | +2 |Черта | 3 | +2 |
| !5 | +3 |Быстрое передвижение, Дополнительная атака | 3 | +2 |
| !6 | +3 |Увеличение характеристики, Умение пути | 4 | +2 |
| !7 | +3 |Дикий инстинкт, Инстинктивный наскок | 4 | +2 |
| !8 | +3 |Черта | 4 | +2 |
| !9 | +4 |Сильный критический удар (1 кость), Увеличение характеристики | 4 | +3 |
| !10 | +4 |Первобытное знание, Умение пути | 4 | +3 |
| !11 | +4 |Непреклонная ярость | 4 | +3 |
| !12 | +4 |Увеличение характеристики, Черта | 5 | +3 |
| !13 | +5 |Сильный критический удар (2 кости) | 5 | +3 |
| !14 | +5 |Умение пути | 5 | +3 |
| !15 | +5 |Непрерывная ярость, Увеличение характеристики | 5 | +3 |
| !16 | +5 |Черта | 5 | +4 |
| !17 | +6 |Сильный критический удар (3 кости) | 6 | +4 |
| !18 | +6 |Неукротимая мощь | 6 | +4 |
| !19 | +6 |Увеличение характеристики | 6 | +4 |
| !20 | +6 |Дикий чемпион | Неогр. | +4 |

//Ур. - Уровень, БМ - Бонус мастерства//

---
---

!!!Быстрое создание
Вы можете быстро создать варвара, следуя этим рекомендациям. Во-первых, у вашей Силы должно быть наивысшее значение. Следующим по величине должно быть Телосложение. Во-вторых, выберите предысторию «[[чужеземец|Чужеземец]]».

---
---

!!!Хиты
''Кость Хитов:'' 1к12 за каждый уровень варвара

''Хиты на 1 уровне:'' 12 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к12 (или 7) + мод. Телосложения за каждый уровень варвара после первого

---

!!!Владение
* [[Доспехи|Доспехи и щиты]]: Лёгкие доспехи, средние доспехи
* [[Оружие|Оружие]]: Простое оружие, воинское оружие
* [[Инструменты|Инструменты]]: Нет
* ''Спасброски:'' Сила, Телосложение
* ''Навыки:'' Выберите два навыка из следующих: Атлетика, Внимательность, Выживание, Выносливость, Запугивание, Природа, Уход за животными

!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый'' или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) бердыш или (б) воинское оружие, не являющееся метательным или стрелковым, не дороже 50 см
* (а) абордажный топор, (б) два метательных топора или (в) простое оружие, не являющееся метательным или стрелковым
* четыре дротика, набор странника и комплект одежды не дороже 8 см

''Произвольная экипировка''

* Вы получаете 3к4 × 10 серебряных монет (или 75 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! [img[1.png]] Защита без доспехов
Если вы не носите доспехов, ваш Класс Доспеха равен 10 + мод. Ловкости + мод. Телосложения. Вы можете использовать щит, не теряя этого преимущества.

---

!!! [img[1.png]] Ярость

<<<
В бою вы сражаетесь с первобытной свирепостью.
<<<

В свой ход вы можете бонусным действием впасть в ярость.

Пока вы пребываете в ярости, вы получаете следующие преимущества, если не носите тяжёлую броню:

* Вы совершаете проверки и спасброски Силы с преимуществом.
* Если вы совершаете рукопашную атаку оружием, используя Силу, вы получаете бонус к броску урона, соответствующий вашему уровню варвара, как показано в колонке «Урон ярости» таблицы выше.
* Вы получаете сопротивление дробящему, колющему и рубящему урону.

Если вы были способны использовать заклинания, то вы не можете использовать или концентрироваться на заклинаниях, пока пребываете в ярости.

Ваша ярость длится 1 минуту. Она прекращается раньше, если вы потеряли сознание, если вы закончили ход, не атаковав враждебное по отношению к вам существо с момента окончания прошлого хода, или если вы с момента окончания прошлого хода не получили урон. Также вы можете прекратить свою ярость бонусным действием.

Если вы впадали в ярость максимальное для вашего уровня количество раз (смотрите колонку «Ярость»), то вы должны завершить продолжительный отдых, прежде чем сможете впасть в ярость ещё раз.

---

!!! [img[2.png]] Безрассудная атака

<<<
Вы способны отбросить любую заботу о защите, чтобы атаковать ожесточённо и безрассудно.
<<<

Когда вы совершаете первую атаку в свой ход, вы можете решить, что будете атаковать безрассудно. Решившись на это, вы в этом ходу совершаете рукопашные атаки оружием, использующие Силу, с преимуществом, но все броски атаки по вам до начала вашего следующего хода тоже совершаются с преимуществом.

---

!!! [img[2.png]] Чувство опасности

<<<
Вы получаете обострённое ощущение происходящего вокруг, помогающее вам избегать опасности.
<<<

Вы совершаете с преимуществом спасброски Ловкости от эффектов, которые вы можете видеть, такие как заклинания и ловушки. Для использования этого преимущества вы не должны быть [[ослеплены|Ослеплённый]], [[оглушены|Оглохший]] или [[недееспособны|Недееспособный]].

---

!!! [img[3.png]] Первобытное знание
Вы получаете владение одним навыком из списка доступных варвару на 1 уровне. На 10 уровне вы получаете владение ещё одним таким навыком.

---

!!! [img[3.png]] Путь дикости

<<<
В сердце каждого варвара пылает ярость, и в этом горниле выплавляется путь к величию варвара. Разные варвары связывают свою ярость с разными источниками. Для некоторых это внутреннее вместилище, где боль, горе и гнев сплавляются в кипящую ярость. Для других же это благословение, даруемое тотемным животным.
<<<

Вы выбираете путь, определяющий природу вашей ярости: [[Берсерка|Путь Берсерка]], [[Буревестника|Путь Буревестника]], [[Бушующего в бою|Путь Бушующего в бою]], [[Дикой магии|Путь Дикой магии]], [[Зверя|Путь Зверя]], [[Предка-хранителя|Путь Предка-хранителя]], [[Тотемного воина|Путь Тотемного воина]] или [[Фанатика|Путь Фанатика]]. Ваш выбор определит умения, предоставляемые на 3, 6, 10 и 14 уровнях. 


---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[4.png]] Черта
При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.


---

!!! [img[5.png]] Быстрое передвижение
Ваша скорость передвижения увеличивается на 2 м, если вы не носите тяжёлых доспехов.


---

!!! [img[5.png]] Дополнительная атака
Если вы совершаете действие Атака, вы можете совершить две атаки вместо одной.

---

!!! [img[7.png]] Дикий инстинкт
Ваши инстинкты настолько обостряются, что вы совершаете с преимуществом броски инициативы.

Кроме того, если вы были [[захвачены врасплох|Захваченный врасплох]] в начале боя, и вы не являетесь [[недееспособным|Недееспособный]], вы можете в первом ходу действовать нормальным образом, но только если вы впадёте в ярость раньше всех других действий в этом ходу.


---

!!! [img[7.png]] Инстинктивный наскок
Частью того же бонусного действия, которым вы впадаете в ярость, вы можете переместиться на расстояние не превышающее половину вашей скорости.

---

!!! [img[9.png]] Сильный критический удар
Вы можете бросать одну дополнительную кость урона оружия, когда определяете дополнительный урон от критического попадания рукопашной атакой.

Количество костей увеличивается до двух на 13 уровне и трёх на 17 уровне.

---

!!! [img[11.png]] Непреклонная ярость

<<<
Ваша ярость позволяет вам сражаться, несмотря на тяжелейшие раны. 
<<<

Если ваши хиты опустились до 0, когда вы пребываете в ярости, и вы не умерли сразу, вы можете совершить спасбросок Телосложения со Сл 10. В случае успеха ваши хиты опускаются лишь до 1.

Каждый раз, когда вы используете эту способность повторно, Сл спасброска увеличивается на 5. После того, как вы завершите короткий либо продолжительный отдых, Сл снова станет равна 10.

---

!!! [img[15.png]] Непрерывная ярость
Ваша ярость становится настолько сильной, что досрочно прекращается только если вы [[теряете сознание|Бессознательный]] или сами прекращаете её.

---

!!! [img[18.png]] Неукротимая мощь
Если результат вашей проверки Силы оказался меньше значения вашей Силы, то вы можете использовать значение характеристики вместо результата проверки.

---

!!! [img[20.png]] Дикий чемпион

<<<
Вы становитесь воплощением дикой силы. 
<<<

Ваши значения Силы и Телосложения увеличиваются на 4. Максимальное значение для этих характеристик теперь 24.
| !Ур. | !БМ |!Умения |
| !1 | +2 |Боевой стиль, Второе дыхание |
| !2 | +2 |Всплеск действий (1/отдых) |
| !3 | +2 |Архетип воина, Увеличение характеристики |
| !4 | +2 |Черта |
| !5 | +3 |Дополнительная атака |
| !6 | +3 |Увеличение характеристики, Черта |
| !7 | +3 |Умение архетипа воина |
| !8 | +3 |Увеличение характеристики, Черта |
| !9 | +4 |Упорный (1/прод. отдых) |
| !10 | +4 |Увеличение характеристики, Умение архетипа воина |
| !11 | +4 |Дополнительная атака (2) |
| !12 | +4 |Увеличение характеристики, Черта |
| !13 | +5 |Упорный (2/прод. отдых) |
| !14 | +5 |Увеличение характеристики, Черта |
| !15 | +5 |Умение архетипа воина |
| !16 | +5 |Увеличение характеристики, Черта |
| !17 | +6 |Всплеск действий (2/отдых), Упорный (3/прод. отдых) |
| !18 | +6 |Умение архетипа воина |
| !19 | +6 |Увеличение характеристики |
| !20 | +6 |Дополнительная атака (3) |

//Ур. - Уровень, БМ - Бонус мастерства//

---
---

!!!Быстрое создание
Вы можете быстро создать воина, следуя этим рекомендациям. Во-первых, у вашей Силы или Ловкости (в зависимости от того, какие [[доспехи|Доспехи и щиты]] и [[оружие|Оружие]] вы хотите использовать) должно быть наивысшее значение. Следующим по величине должно быть значение Телосложения (или Интеллекта, если вы планируете взять архетип воина [[Арканный лучник|Арканный лучник]], [[Мистический рыцарь|Мистический рыцарь]] или [[Пси-боец|Пси-боец]]). Во-вторых, выберите предысторию «[[солдат|Солдат]]».

---
---


!!!Хиты
''Кость Хитов:'' 1к10 за каждый уровень воина

''Хиты на 1 уровне:'' 10 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к10 (или 6) + мод. Телосложения за каждый уровень воина после первого

---

!!!Владение
* ''[[Доспехи|Доспехи и щиты]]:'' Все доспехи
* ''[[Оружие|Оружие]]:'' Простое оружие, воинское оружие, три экзотических оружия на ваш выбор
* ''[[Инструменты|Инструменты]]:'' Нет
* ''Спасброски:'' Сила, Телосложение
* ''Навыки:'' Выберите два навыка из следующих: Акробатика, Атлетика, Внимательность, Выживание, Выносливость, Запугивание, История, Проницательность, Уход за животными


!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) кольчуга или (б) дублет, длинный лук и кoлчан с 20 стрелами
* (а) щит и воинское лёгкое или одноручное оружие или (б) два воинских оружия, каждое не дороже 50 см
* (а) лёгкий арбалет и контейнер с 20 болтами или (б) четыре метательных топора
* (а) комплект дорожной одежды или (б) комплект одежды солдата
* набор путешественника и походный набор

''Произвольная экипировка''

* Вы получаете 8к4 × 10 серебряных монет (или 200 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! [img[1.png]] Боевой стиль
Вы выбираете боевой стиль, соответствующий вашей специализации. Выберите один из следующих вариантов. Вы не можете выбирать один и тот же вариант боевого стиля, даже если позже у вас будет возможность выбрать ещё один стиль.

<<tabs "[tag[Боевой стиль воина]nsort[]]" "" "$:/state/tab1" "tc-vertical">>

---

!!! [img[1.png]] Второе дыхание

<<<
Вы обладаете ограниченным источником выносливости, которым можете воспользоваться, чтобы уберечь себя.
<<<

В свой ход вы можете бонусным действием восстановить себе хиты в размере 1к10 + ваш уровень воина.

Вы не можете использовать это умение повторно, пока не завершите короткий или продолжительный отдых.

---

!!! [img[2.png]] Всплеск действий

<<<
Вы способны на мгновение преодолеть обычные возможности. 
<<<

В свой ход вы можете совершить одно дополнительное действие помимо обычного и бонусного действий.

Вы не можете использовать это умение повторно, пока не завершите короткий или продолжительный отдых. 

Начиная с 17 уровня вы можете использовать это умение дважды, прежде чем вам понадобится отдых, но в течение одного хода его всё равно можно использовать лишь один раз.

---

!!! [img[3.png]] Архетип воина

<<<
Разные воины используют разные подходы для совершенствования своих воинских способностей. Воинский архетип отражает выбранный вами подход.
<<<

Вы выбираете архетип, отражающий стиль и технику, к которым вы стремитесь: [[Арканный лучник]], [[Баннерет]], [[Кавалерист]], [[Мастер боевых искусств]], [[Мистический рыцарь]], [[Пси-боец]], [[Рунный рыцарь]], [[Самурай]], [[Чемпион]] или [[Эхо-рыцарь]]. Ваш выбор определит умения, предоставляемые на 3, 7, 10, 15 и 18 уровнях.

---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 8, 10, 12, 14 и 16 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[4.png]] Черта
При достижении 4, 6, 8, 12, 14 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[5.png]] Дополнительная атака
Если вы совершаете действие Атака, вы можете совершить две атаки вместо одной.

Количество атак увеличивается до трёх на 11 уровне этого класса, и до четырёх на 20 уровне.

---

!!! [img[9.png]] Упорный
Вы можете перебросить проваленный спасбросок, и должны использовать новый результат. 

Вы не можете использовать это умение повторно, пока не завершите продолжительный отдых. 

Вы можете использовать это умение дважды между периодами продолжительного отдыха после достижения 13 уровня, и трижды после достижения 17 уровня.
| !Ур. | !БМ |!Умения |!ИЗаг |
| !1 | +2 |Использование заклинаний, Книга заклинаний, Магическое восстановление | 3 |
| !2 | +2 |Магическая традиция | 3 |
| !3 | +2 |Увеличение характеристики, Формулы заговоров | 3 |
| !4 | +2 |Черта | 4 |
| !5 | +3 |—  | 4 |
| !6 | +3 |Умение магической традиции, Увеличение характеристики | 4 |
| !7 | +3 |—  | 4 |
| !8 | +3 |Черта | 4 |
| !9 | +4 |Увеличение характеристики | 4 |
| !10 | +4 |Умение магической традиции | 5 |
| !11 | +4 |—  | 4 |
| !12 | +4 |Увеличение характеристики, Черта | 5 |
| !13 | +5 |—  | 5 |
| !14 | +5 |Умение магической традиции | 5 |
| !15 | +5 |Увеличение характеристики | 5 |
| !16 | +5 |Черта | 5 |
| !17 | +6 |—  | 5 |
| !18 | +6 |Мастерство заклинателя | 5 |
| !19 | +6 |Увеличение характеристики | 5 |
| !20 | +6 |Фирменное заклинание | 5 |

''Ячейки заклинаний на уровень заклинаний''

| !Ур. | !1 | !2 | !3 | !4 | !5 | !6 | !7 | !8 | !9 |
| !1 |  2 | — | — | — | — | — | — | — | — |
| !2 | 3 | — | — | — | — | — | — | — | — |
| !3 |  4 | 2 | — | — | — | — | — | — | — |
| !4 |  4 | 3 | — | — | — | — | — | — | — |
| !5 |  4 | 3 | 2 | — | — | — | — | — | — |
| !6 |  4 | 3 | 3 | — | — | — | — | — | — |
| !7 |  4 | 3 | 3 | 1 | — | — | — | — | — |
| !8 |  4 | 3 | 3 | 2 | — | — | — | — | — |
| !9 |  4 | 3 | 3 | 3 | 1 | — | — | — | — |
| !10 |  4 | 3 | 3 | 3 | 2 | — | — | — | — |
| !11 |  4 | 3 | 3 | 3 | 2 | 1 | — | — | — |
| !12 |  4 | 3 | 3 | 3 | 2 | 1 | — | — | — |
| !13 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | — | — |
| !14 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | — | — |
| !15 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | — |
| !16 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | — |
| !17 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | 1 |
| !18 |  4 | 3 | 3 | 3 | 3 | 1 | 1 | 1 | 1 |
| !19 |  4 | 3 | 3 | 3 | 3 | 2 | 1 | 1 | 1 |
| !20 |  4 | 3 | 3 | 3 | 3 | 2 | 2 | 1 | 1 |


//Ур. - Уровень, БМ - Бонус мастерства, ИЗаг - Известные заговоры//

---
---

!!!Быстрое создание
Вы можете быстро создать волшебника, следуя этим рекомендациям. Во-первых, у вашего Интеллекта должно быть наивысшее значение. Следующим по величине должно быть значение Телосложения или Ловкости. Если вы планируете присоединиться к [[Школе Очарования|Школа Очарования]], сделайте вторым по величине значение Харизмы. Во-вторых, выберите предысторию «[[мудрец|Мудрец]]». В-третьих, выберите заговоры //волшебная рука//, //луч холода// и //свет//, а также заклинания 1 уровня для вашей книги заклинаний: //волшебная стрела//, //доспехи мага//, //огненные ладони//, //очарование личности//, //падение пёрышком// и //усыпление//.

---
---


!!!Хиты
''Кость Хитов:'' 1к6 за каждый уровень волшебника

''Хиты на 1 уровне:'' 6 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к6 (или 4) + мод. Телосложения за каждый уровень волшебника после первого

---

!!!Владение
* ''[[Доспехи|Доспехи и щиты]]:'' Нет
* ''[[Оружие|Оружие]]:'' Простое лёгкое и одноручное дробящее, клинковое и стрелковое оружие
* ''[[Инструменты|Инструменты]]:'' Нет
* ''Спасброски:'' Интеллект, Мудрость
* ''Навыки:'' Выберите два навыка из следующих: Анализ, История, Магия, Медицина, Проницательность, Религия

!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) кинжал или (б) праща и кошель с 20 пулями
* (а) мешочек с компонентами или (б) арканная фокусировка
* (а) набор алхимика, (б) набор путешественника или (в) набор учёного
* (а) комплект дорожной одежды или (б) комплект одежды мудреца
* книга заклинаний и походный набор

''Произвольная экипировка''

* Вы получаете 4к4 × 10 серебряных монет (или 100 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! [img[1.png]] Использование заклинаний

<<<
Как изучающий тайны магии, вы обладаете книгой, содержащей заклинания, которые отражают первые проблески вашей истинной силы.
<<<

''Заговоры (заклинания 0 уровня)''

Вам известен заговор //фокусы// и ещё три заговора на ваш выбор из списка заклинаний волшебника. Вы узнаёте дополнительные заговоры волшебника на более высоких уровнях, как показано в колонке « ИЗаг (известные заговоры)».

Кроме того, когда вы получаете уровень в этом классе, вы можете выбрать один из известных вам заговоров, изученных с помощью этого умения, и заменить его другим заговором из списка заклинаний волшебника.

''Подготовка и сотворение заклинаний''

Таблица выше показывает, какое количество ячеек для сотворения заклинаний у вас есть на первом и более высоких уровнях. Для сотворения одного из этих заклинаний вы должны потратить ячейку заклинания того же уровня или выше, что и само заклинание. Вы восстанавливаете все потраченные ячейки после завершения продолжительного отдыха.

Вы подготавливаете список заклинаний волшебника, доступных для сотворения. При этом вы выбираете количество заклинаний волшебника из списка своей книги заклинаний, равное ''модификатору Интеллекта + уровень волшебника '' (минимум одно заклинание). Уровень заклинаний не должен превышать уровень самой высокой имеющейся у вас ячейки заклинаний волшебника.

Вы можете изменить список подготовленных заклинаний, когда завершаете продолжительный отдых. Подготовка нового списка заклинаний волшебника требует времени, проведённого в изучении книги заклинаний и запоминании слов и жестов, которые вы должны совершить, чтобы сотворить заклинание: не менее 1 минуты за уровень заклинания для каждого заклинания в вашем списке.

''Базовая характеристика заклинаний''

Интеллект является базовой характеристикой для сотворения ваших заклинаний волшебника, так как вы узнаёте свои заклинания путём целенаправленного исследования и запоминания. 

Вы используете Интеллект в случаях, когда заклинание волшебника ссылается на базовую характеристику. Кроме того, вы используете модификатор Интеллект при определении Сл спасбросков от ваших заклинаний волшебника, и при броске атаки заклинаниями.



```
Сл спасброска = 8 + бонус мастерства + модификатор Интеллекта
Модификатор броска атаки = бонус мастерства + модификатор Интеллекта
```



''Ритуальное колдовство''

Вы можете сотворить заклинание волшебника как ритуал, если у этого заклинания есть ключевое слово «ритуал», и оно есть в вашей книге заклинаний. Вам не нужно иметь это заклинание подготовленным.

''Фокусировка заклинания''

Вы можете использовать арканную фокусировку в качестве заклинательной фокусировки для заклинаний волшебника.


---

!!! [img[1.png]] Книга заклинаний

На 1 уровне ваша книга заклинаний содержит шесть заклинаний волшебника 1 уровня по вашему выбору. Заговоры в ней не хранятся.


''Известные заклинания первого и более высоких уровней''

<<<
Заклинания, которые вы добавляете в свою книгу заклинаний, получая уровни, отражают исследования, которые вы проводите, а также интеллектуальные прорывы в изучении природы вселенной, сделанные вами. Вы также можете найти другие заклинания во время приключений. Вы можете обнаружить заклинание, записанное на свитке в сундуке злого волшебника, или, например, в пыльном фолианте в древней библиотеке.
<<<

Каждый раз, когда вы получаете уровень волшебника, вы можете добавить два заклинания волшебника по вашему выбору в книгу заклинаний. 

''Копирование заклинания в книгу''

<<<
Копирование заклинания в вашу книгу включает воспроизведение основной формы заклинания, а также расшифровку уникальной системы обозначений, используемой волшебником, который записал его. Вы должны подобрать нужные жесты и звуки, после чего записываете его в свою книгу заклинаний, используя собственные обозначения.
<<<

Если вы находите заклинание волшебника 1 или более высокого уровня, вы можете добавить его в свою книгу заклинаний, если у вас имеется свободное время для его расшифровки и копирования.

За каждый уровень заклинания процесс занимает 2 часа и стоит 50 см. Стоимость представляет собой материальные компоненты, которые вы расходуете на эксперименты с заклинанием, чтобы им овладеть, а также высококачественные чернила для записи текста. После того как вы потратили время и деньги, вы можете подготавливать это заклинание как и свои прочие заклинания.

''Замена книги''

Вы можете копировать заклинание из своей книги заклинаний в другую, например, если хотите сделать запасную копию. Это делается так же как и простое копирование заклинаний, но быстрее и проще, так как вы понимаете свои собственные обозначения и уже знаете, как творить это заклинание. Вам необходимо потратить только по 10 см и 1 часу для каждого уровня копируемого заклинания.

Если вы потеряли свою книгу заклинаний, вы можете использовать ту же процедуру для записи заклинаний, которые у вас подготовлены, в новую книгу заклинаний. Для заполнения оставшейся части книги заклинаний необходимо найти и скопировать их повторно. По этой причине многие волшебники держат запасные книги заклинаний в безопасном месте.

''Внешний вид книги''

Ваша книга заклинаний является уникальным сборником заклинаний, со своими декоративными деталями и ремарками. Она может быть обычной, обтянутой кожей книгой, которую вы получили в подарок от наставника, или оплетённым золотом томом, который вы нашли в древней библиотеке, или даже разрозненной коллекцией записей, собранной вместе после потери предыдущей книги заклинаний в результате несчастного случая.


---

!!! [img[1.png]] Магическое восстановление

<<<
Вы способны восстанавливать часть магической энергии, изучая книгу заклинаний. 
<<<

После завершения короткого отдыха или ночлега, вы можете восстановить часть использованных ячеек заклинаний. Ячейки заклинаний могут иметь суммарный уровень, который не превышает половину уровня вашего волшебника (округляя вверх), и ни одна из ячеек не может быть шестого уровня или выше.

Вы не можете использовать это умение повторно, пока не завершите продолжительный отдых.


---

!!! [img[1.png]] Магическая традиция

<<<

Изучение волшебства старо настолько, что простирает корни к самым ранним открытиям магии смертных. Магия опирается на различные традиции, посвящённые её комплексному изучению.

Наиболее распространённые магические традиции в мультивселенной вращаются вокруг школ магии. Волшебники на протяжении веков каталогизировали тысячи заклинаний, группируя их по восьми так называемым школам. В некоторых местах эти традиции в буквальном смысле являются школами; один волшебник может пройти обучение в школе Иллюзии, а другой будет обучаться в городе со школой Очарования. В других учреждениях школы больше похожи на факультеты, соперничающие за студентов и финансирование. Даже волшебники-одиночки, которые учат в своих башнях, используют разделение магии по школам в учебном процессе, так как заклинания каждой школы требуют различного рода мастерства и методов.

Но среди волшебников есть и те, кто не специализируются на той или иной школе, а посвящают себя другим более узким направлениям. Такими волшебниками могут быть, например, члены организаций, для деятельности которых требуется опредлённый набор навыков, или энтузиасты, занимающиеся исследованием и комбинированием заклинаний различных школ со схожим эффектом.
<<<


Вы выбираете магическую традицию, формирующую вашу магическую практику, определённую либо одной из восьми школ: [[Воплощения|Школа Воплощения]], [[Вызова|Школа Вызова]], [[Иллюзии|Школа Иллюзии]], [[Некромантии|Школа Некромантии]], [[Ограждения|Школа Ограждения]], [[Очарования|Школа Очарования]], [[Преобразования|Школа Преобразования]] или [[Прорицания|Школа Прорицания]]; либо одним из более узких направлений: [[Военную магию|Военная магия]], [[Гравитургию|Гравитургия]], [[Орден Писарей]], [[Песнь клинка]] или [[Хронургию|Хронургия]]. Ваш выбор определит умения, предоставляемые на 2, 6, 10 и 14 уровнях.

---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[3.png]] Формулы заговоров
<<<
Вы записали набор магических формул в своей книги заклинаний, которые вы можете использовать, чтобы сформулировать заговор в уме.
<<<

Каждый раз, когда вы завершаете продолжительный отдых, вы можете свериться с формулами в своей книге заклинаний, выбрать один из известных вам заговоров волшебника и заменить его другим заговором из списка заклинаний волшебника.

---

!!! [img[4.png]] Черта
При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[18.png]] Мастерство заклинателя
<<<
Вы достигли такого мастерства в отношении некоторых заклинаний, что можете творить их неограниченное количество раз.
<<<

Выберите одно заклинание волшебника 1 уровня и одно заклинание волшебника 2 уровня, которые есть в вашей книге заклинаний. Вы можете использовать эти заклинания без увеличения их уровня, не тратя ячеек заклинаний, при условии, что вы их подготовили. Если вы хотите увеличить уровень этих заклинаний, вы должны потратить ячейку заклинаний как обычно.

Потратив 8 часов на изучение, вы можете изменить одно или оба этих заклинания по своему усмотрению на заклинания тех же уровней.

---

!!! [img[20.png]] Фирменное заклинание
<<<
Вы отточили мастерство сотворения двух мощных заклинаний и можете сотворять их без усилий. 
<<<

Выберите два заклинания волшебника 3 уровня из своей книги заклинаний в качестве фирменных заклинаний. Для вас эти заклинания всегда считаются подготовленными, они не учитываются в количестве подготовленных заклинаний, и вы можете сотворить каждое из этих заклинаний без увеличения их уровня, не тратя ячейку заклинаний. Если вы хотите увеличить уровень этих заклинаний, вы должны потратить ячейку заклинаний как обычно.

Вы не можете сотворить то же самое заклинание с помощью этого умения повторно, пока не завершите короткий или продолжительный отдых.
| !Ур. | !БМ |!Умения |!ИЗаг |
| !1 | +2 |Друидический язык, Использование заклинаний | 2 |
| !2 | +2 |Дикий облик, Дикий спутник, Круг друидов | 2 |
| !3 | +2 |Увеличение характеристики | 2 |
| !4 | +2 |Улучшение дикой формы, Черта | 3 |
| !5 | +3 |—  | 3 |
| !6 | +3 |Умение круга друидов, Увеличение характеристики | 3 |
| !7 | +3 |—  | 3 |
| !8 | +3 |Улучшение дикой формы, Черта | 3 |
| !9 | +4 |Увеличение характеристики | 3 |
| !10 | +4 |Умение круга друидов | 4 |
| !11 | +4 |—  | 4 |
| !12 | +4 |Увеличение характеристики, Черта | 4 |
| !13 | +5 |—  | 4 |
| !14 | +5 |Умение круга друидов | 4 |
| !15 | +5 |Увеличение характеристики | 4 |
| !16 | +5 |Черта | 4 |
| !17 | +6 |—  | 4 |
| !18 | +6 |Безвременное тело, Заклинания зверя | 4 |
| !19 | +6 |Увеличение характеристики | 4 |
| !20 | +6 |Архидруид | 4 |

''Ячейки заклинаний на уровень заклинаний''

| !Ур. | !1 | !2 | !3 | !4 | !5 | !6 | !7 | !8 | !9 |
| !1 |  2 | — | — | — | — | — | — | — | — |
| !2 | 3 | — | — | — | — | — | — | — | — |
| !3 |  4 | 2 | — | — | — | — | — | — | — |
| !4 |  4 | 3 | — | — | — | — | — | — | — |
| !5 |  4 | 3 | 2 | — | — | — | — | — | — |
| !6 |  4 | 3 | 3 | — | — | — | — | — | — |
| !7 |  4 | 3 | 3 | 1 | — | — | — | — | — |
| !8 |  4 | 3 | 3 | 2 | — | — | — | — | — |
| !9 |  4 | 3 | 3 | 3 | 1 | — | — | — | — |
| !10 |  4 | 3 | 3 | 3 | 2 | — | — | — | — |
| !11 |  4 | 3 | 3 | 3 | 2 | 1 | — | — | — |
| !12 |  4 | 3 | 3 | 3 | 2 | 1 | — | — | — |
| !13 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | — | — |
| !14 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | — | — |
| !15 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | — |
| !16 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | — |
| !17 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | 1 |
| !18 |  4 | 3 | 3 | 3 | 3 | 1 | 1 | 1 | 1 |
| !19 |  4 | 3 | 3 | 3 | 3 | 2 | 1 | 1 | 1 |
| !20 |  4 | 3 | 3 | 3 | 3 | 2 | 2 | 1 | 1 |


//Ур. - Уровень, БМ - Бонус мастерства, ИЗаг - Известные заговоры//

---
---

!!!Быстрое создание
Вы можете быстро создать друида, следуя этим рекомендациям. Во-первых, у вашей Мудрости должно быть наивысшее значение. Следующим по величине должно быть значение Телосложения. Во-вторых, выберите предысторию «[[отшельник|Отшельник]]».

---
---


!!!Хиты
''Кость Хитов:'' 1к8 за каждый уровень друида

''Хиты на 1 уровне:'' 8 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к8 (или 5) + мод. Телосложения за каждый уровень друида после первого

---

!!!Владение
* ''[[Доспехи|Доспехи и щиты]]:'' Лёгкие доспехи, средние доспехи
* ''[[Оружие|Оружие]]:'' Простое древковое, дробящее, клинковое и метательное оружие, болас, бумеранг, праща
* ''[[Инструменты|Инструменты]]:'' Набор травника
* ''Спасброски:'' Интеллект, Мудрость
* ''Навыки:'' Выберите два навыка из следующих: Внимательность, Выживание, Магия, Медицина, Обращение с животными, Природа, Проницательность, Религия

!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) средний щит или (б) простое оружие не дороже 10 см
* (а) серп или (б) простое древковое оружие
* (а) комплект дорожной одежды или (б) комплект одежды мудреца
* дублет, набор странника и фокусировка друидов

''Произвольная экипировка''

* Вы получаете 3к4 × 10 серебряных монет (или 75 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! [img[1.png]] Друидический язык
Вы знаете Друидический язык — тайный язык друидов. Вы можете на нём говорить и оставлять тайные послания. Владеющие этим языком автоматически замечают эти послания. Остальные замечают присутствие послания при успешной проверке Мудрости (Внимательность) со Сл 15, но без помощи магии не могут расшифровать его.

---

!!! [img[1.png]] Использование заклинаний

<<<
Для сотворения заклинаний друиды пользуются сакральной эссенцией самой природы, формируя её согласно своей воле.
<<<

''Заговоры (заклинания 0 уровня)''

Вам известен заговор //искусство друидов// и ещё два заговора на ваш выбор из списка заклинаний друида. Вы узнаёте дополнительные заговоры друида на более высоких уровнях, как показано в колонке « ИЗаг (известные заговоры)».

Кроме того, когда вы получаете уровень в этом классе, вы можете выбрать один из известных вам заговоров, изученных с помощью этого умения, и заменить его другим заговором из списка заклинаний друида.

''Подготовка и сотворение заклинаний''

Таблица выше показывает, какое количество ячеек для сотворения заклинаний у вас есть на первом и более высоких уровнях. Для сотворения одного из этих заклинаний вы должны потратить ячейку заклинания того же уровня или выше, что и само заклинание. Вы восстанавливаете все потраченные ячейки после завершения продолжительного отдыха.

Вы подготавливаете список заклинаний друида, доступных для сотворения. При этом вы выбираете количество заклинаний друида из списка заклинаний друида, равное ''модификатору Мудрости + уровень друида'' (минимум одно заклинание).

Вы можете изменить список подготовленных заклинаний, когда завершаете продолжительный отдых. Подготовка нового списка заклинаний друида требует времени, проведённого в молитвах и медитации: не менее 1 минуты за уровень заклинания для каждого заклинания в вашем списке.

''Базовая характеристика заклинаний''

Мудрость является базовой характеристикой для сотворения ваших заклинаний друида, поскольку ваша магия подпитывается вашей преданностью и близостью к природе. 

Вы используете Мудрость в случаях, когда заклинание друида ссылается на базовую характеристику. Кроме того, вы используете модификатор Мудрости при определении Сл спасбросков от ваших заклинаний друида, и при броске атаки заклинаниями.

```
Сл спасброска = 8 + бонус мастерства + модификатор Мудрости
Модификатор броска атаки = бонус мастерства + модификатор Мудрости
```

''Ритуальное колдовство''

Вы можете сотворить заклинание друида как ритуал, если у этого заклинания есть ключевое слово «ритуал», и оно подготовлено вами.

''Фокусировка заклинания''

Вы можете использовать фокусировку друидов в качестве заклинательной фокусировки для заклинаний друида.

---

!!! [img[2.png]] Дикий облик
Вы можете действием принять магическим образом форму любого зверя, которого вы видели. Вы можете использовать это умение дважды. 

Чтобы восстановить все потраченные использования вы должны провести 30 минут в медитации или единении с природой. Вы можете делать это частью отдыха, но не чаще чем количество раз равное вашему бонусу мастерства до завершения продолжительного отдыха.

Уровень друида определяет, в каких зверей можно превращаться.

| !Ур. | !Макс. ПО |!Ограничения |!Пример |
| !2  | 1/4 |Без скорости плавания и полёта |Волк |
| !4  | 1/2 |Без скорости полёта |Крокодил  |
| !8  | 1   |— |Гигантский орёл |

В облике животного можно оставаться количество часов, равное половине уровня друида. После чего вы возвращаетесь в нормальный облик, если не потратите ещё одно использование Дикого облика. Вы можете досрочно вернуться в нормальный облик бонусным действием. Вы автоматически возвращаетесь в нормальный облик, если теряете сознание, ваши хиты опускаются до 0, либо если вы умираете.

Когда вы превращены, действуют следующие правила:

* Вы получаете игровые параметры зверя (включая особые чувства), но сохраняете мировоззрение, личность и значения Интеллекта, Мудрости и Харизмы. Легендарные действия и действия в логове недоступны.
* Вы принимаете хиты и Кость Хитов зверя. Вернувшись в нормальный облик, ваши хиты будут такими же, как до превращения. Если ваши хиты опускаются до 0 после получения урона, излишки урона переносятся на нормальный облик. Если этот урон не довёл хиты персонажа до 0, он не становится [[умирающим|Умирающий]].
* У вас остаются владения навыками и спасбросками, в дополнение к таковым нового облика. Если владение есть и у вас и у зверя, но у него бонус выше, используется бонус зверя.
* Вы сохраняете преимущества от всех умений класса, расы и прочих источников, и можете пользоваться ими, если этому не препятствует новый физический облик.
* Вы не можете сотворять заклинания, а речь и действия, требующие рук, могут быть ограничены видом зверя. Превращение не прерывает вашу концентрацию на уже сотворённых заклинаниях и не мешает совершать действия, являющиеся частью заклинания, такие как в случае заклинания //призыв молнии//.
* Вы сами определяете, какое снаряжение останется лежать на земле, какое сольётся с новым обликом, а какое будет надето. Мастер решает, какое снаряжение может носить животное, чтобы оно действовало как обычно. Снаряжение не меняет форму и размер под новый облик, и если не подходит новому облику, оно должно остаться на земле или слиться с новым обликом. Слившееся с обликом снаряжение не работает, пока вы опять не примете свой облик.

---

!!! [img[2.png]] Дикий спутник

Вы можете действием потратить одно использование Дикого облика, чтобы сотворить заклинание //поиск фамильяра//, не тратя материальные компоненты. Призванный таким образом фамильяр принимает облик животного, но является феей и исчезает через количество часов, равное половине уровня друида.

---

!!! [img[2.png]] Круг друидов

<<<
Немногие знают, что друиды составляют единое сообщество, существующее вне политических границ. Любой друид считается частью сообщества, даже если живёт настолько изолированно, что никогда не видел высокопоставленных собратьев и не бывал на собраниях. Друиды считают друг друга братьями и сёстрами, но, как и диким зверям, это не мешает им иногда считать друг друга соперниками или даже добычей.

На местном уровне друиды, разделяющие определённые взгляды на природу, баланс и образ жизни друида, объединяются в круги.
<<<

Вы выбираете в каком круге друидов состоит ваш персонаж: [[Звёзд|Круг Звёзд]], [[Земли|Круг Земли]], [[Лесного пожара|Круг Лесного пожара]], [[Луны|Круг Луны]], [[Пастыря|Круг Пастыря]] или [[Снов|Круг Снов]]. Ваш выбор определит умения, предоставляемые на 2, 6, 10 и 14 уровнях.

---

!!! [img[3.png]] Увеличение характеристики
При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[4.png]] Черта
При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[18.png]] Безвременное тело
<<<
Пронизывающая вас природная магия замедляет старение. 
<<<

За каждые 10 лет ваше тело стареет только на 1 год.

---

!!! [img[18.png]] Заклинания зверя
Вы можете сотворять заклинания друида в Диком облике. Будучи зверем, вы можете совершать соматические и вербальные компоненты заклинаний друида, но не можете обеспечить материальные компоненты.

---

!!! [img[20.png]] Архидруид
Ваше число использований Дикого облика не ограничено.

Кроме того, вы можете игнорировать соматический и вербальный компоненты заклинаний друида, а также материальные компоненты без указанной цены и не расходуемые заклинанием. Это действует как в нормальном облике, так и в Диком облике.
| !Ур. | !БМ |!Умения |!ИЗаг |
| !1 | +2 |Божественный домен, Использование заклинаний  | 3 |
| !2 | +2 |Божественный канал (1), Поглощение божественной энергии, Умение божественного домена | 3 |
| !3 | +2 |Увеличение характеристики | 3 |
| !4 | +2 |Черта | 4 |
| !5 | +3 |Уничтожение нежити (ПО 1/2)  | 4 |
| !6 | +3 |Божественный канал (2), Умение божественного домена, Увеличение характеристики | 4 |
| !7 | +3 |—  | 4 |
| !8 | +3 |Благословенные удары, Уничтожение нежити (ПО 1), Черта | 4 |
| !9 | +4 |Увеличение характеристики | 4 |
| !10 | +4 |Божественное вмешательство | 5 |
| !11 | +4 |Уничтожение нежити (ПО 2)  | 5 |
| !12 | +4 |Увеличение характеристики, Черта | 5 |
| !13 | +5 |—  | 5 |
| !14 | +5 |Уничтожение нежити (ПО 3) | 5 |
| !15 | +5 |Увеличение характеристики | 5 |
| !16 | +5 |Черта | 5 |
| !17 | +6 |Уничтожение нежити (ПО 4), Умение божественного домена  | 5 |
| !18 | +6 |Божественный канал (3) | 5 |
| !19 | +6 |Увеличение характеристики | 5 |
| !20 | +6 |Улучшение божественного вмешательства | 5 |

''Ячейки заклинаний на уровень заклинаний''

| !Ур. | !1 | !2 | !3 | !4 | !5 | !6 | !7 | !8 | !9 |
| !1 |  2 | — | — | — | — | — | — | — | — |
| !2 | 3 | — | — | — | — | — | — | — | — |
| !3 |  4 | 2 | — | — | — | — | — | — | — |
| !4 |  4 | 3 | — | — | — | — | — | — | — |
| !5 |  4 | 3 | 2 | — | — | — | — | — | — |
| !6 |  4 | 3 | 3 | — | — | — | — | — | — |
| !7 |  4 | 3 | 3 | 1 | — | — | — | — | — |
| !8 |  4 | 3 | 3 | 2 | — | — | — | — | — |
| !9 |  4 | 3 | 3 | 3 | 1 | — | — | — | — |
| !10 |  4 | 3 | 3 | 3 | 2 | — | — | — | — |
| !11 |  4 | 3 | 3 | 3 | 2 | 1 | — | — | — |
| !12 |  4 | 3 | 3 | 3 | 2 | 1 | — | — | — |
| !13 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | — | — |
| !14 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | — | — |
| !15 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | — |
| !16 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | — |
| !17 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | 1 |
| !18 |  4 | 3 | 3 | 3 | 3 | 1 | 1 | 1 | 1 |
| !19 |  4 | 3 | 3 | 3 | 3 | 2 | 1 | 1 | 1 |
| !20 |  4 | 3 | 3 | 3 | 3 | 2 | 2 | 1 | 1 |


//Ур. - Уровень, БМ - Бонус мастерства, ИЗаг - Известные заговоры//

---
---

!!!Быстрое создание
Вы можете быстро создать жреца, следуя этим рекомендациям. Во-первых, у вашей Мудрости должно быть наивысшее значение. Следующей по величине характеристикой должна быть Сила или Телосложение. Во-вторых, выберите предысторию «[[прислужник|Прислужник]]».

---
---


!!!Хиты
''Кость Хитов:'' 1к8 за каждый уровень жреца

''Хиты на 1 уровне:'' 8 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к8 (или 5) + мод. Телосложения за каждый уровень жреца после первого

---

!!!Владение
* ''[[Доспехи|Доспехи и щиты]]:'' Лёгкие доспехи, средние доспехи
* ''[[Оружие|Оружие]]:'' Простое оружие
* ''[[Инструменты|Инструменты]]:'' Нет
* ''Спасброски:'' Мудрость, Харизма
* ''Навыки:'' Выберите два навыка из следующих: История, Медицина, Проницательность, Религия, Убеждение

!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) тяжёлая булава или (б) боевой молот (если владеете)
* (а) дублет, (б) кольчужная рубаха или (в) кольчуга (если владеете)
* (а) лёгкий арбалет и контейнер с 20 болтами или (б) простое оружие не дороже 25 см
* (а) набор путешественника или (б) набор священника
* походный набор, священный символ, средний щит и комплект одежды не дороже 5 см

''Произвольная экипировка''

* Вы получаете 5к4 × 10 серебряных монет (или 125 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! [img[1.png]] Божественный домен

<<<
В пантеоне все божества оказывают влияние на разные аспекты жизни смертных, называемые божественным доменом. Все домены, на которые оказывает влияние божество, составляют его портфолио. Например, портфолио греческого бога Аполлона включает в себя домены Жизни, Знания и Света. Как жрец, вы выбираете один аспект из портфолио своего божества, которому вы придаёте особое значение, и получаете силы, относящиеся к этому домену.

Ваш выбор может соответствовать определённому религиозному течению, посвящённому вашему божеству. Аполлона, например, в одном регионе могут почитать как Аполлона Феба («Лучезарный», «Сияющий»), подчеркивая его влияние на домен Света, а в другом месте - как Аполлона Акесия («Целитель»), подчеркивая его связь с доменом Жизни. Кроме того, ваш выбор домена может быть просто вопросом личных предпочтений, аспектом божества, который больше всего близок вам.
<<<

Вы выбираете домен, связанный с вашим божеством: [[Буря|Домен Бури]], [[Война|Война]], [[Жизнь|Домен Жизни]], [[Знание|Домен Знания]], [[Кузня|Домен Кузни]], [[Мир|Домен Мира]], [[Обман|Домен Обмана]], [[Порядок|Домен Порядка]], [[Природа|Домен Природы]], [[Свет|Домен Света]], [[Смерть|Домен Смерти]], [[Сумерки|Домен Сумерек]] или [[Упокоение|Домен Упокоения]]. Описание каждого домена приводит примеры божеств, которые влияют на соответствующие аспекты. 

Ваш выбор определит заклинания домена, дополнительные способы использования Божественного канала на 2 уровне, и дополнительные умения, предоставляемые на 6, 8 и 17 уровнях.

''Заклинания домена''

У каждого домена есть список заклинаний, которые вы получаете на новых уровнях жреца. Как только вы получаете заклинание домена, оно всегда считается подготовленным и не учитывается при подсчёте количества заклинаний, которые можно подготовить.

Если вы получаете доступ к заклинанию, отсутствующему в списке заклинаний жреца, оно всё равно будет считаться для вас заклинанием жреца.

---

!!! [img[1.png]] Использование заклинаний

<<<
Будучи проводником божественной силы, вы можете сотворять заклинания жреца.
<<<

''Заговоры (заклинания 0 уровня)''

На 1 уровне вам известен заговор //чудотворство// и ещё три заговора на ваш выбор из списка заклинаний жреца. Вы узнаёте дополнительные заговоры жреца на более высоких уровнях, как показано в колонке «ИЗаг (известные заговоры)».

Кроме того, когда вы получаете уровень в этом классе, вы можете выбрать один из известных вам заговоров, изученных с помощью этого умения, и заменить его другим заговором из списка заклинаний жреца.

''Подготовка и сотворение заклинаний''

Таблица выше показывает, какое количество ячеек для сотворения заклинаний у вас есть на первом и более высоких уровнях. Для сотворения одного из этих заклинаний вы должны потратить ячейку заклинаний того же уровня или выше, что и само заклинание. Вы восстанавливаете все потраченные ячейки после завершения продолжительного отдыха.

Вы подготавливаете список заклинаний жреца, доступных для сотворения. При этом вы выбираете количество заклинаний жреца, равное ''модификатору Мудрости + уровень жреца'' (минимум одно заклинание). Уровень заклинаний не должен превышать уровень самой высокой имеющейся у вас ячейки заклинаний жреца.

Вы можете изменить список подготовленных заклинаний, когда завершаете продолжительный отдых. Подготовка нового списка заклинаний жреца требует времени, проведённого в молитвах и медитации: не менее 1 минуты за уровень заклинания для каждого заклинания в вашем списке.

''Базовая характеристика заклинаний''
Мудрость является базовой характеристикой для сотворения ваших заклинаний жреца. Сила ваших заклинаний исходит от вашей преданности своему божеству. 

Вы используете Мудрость в случаях, когда заклинание жреца ссылается на базовую характеристику. Кроме того, вы используете модификатор Мудрости при определении Сл спасбросков от ваших заклинаний жреца, и при броске атаки заклинаниями.


```
Сл спасброска = 8 + бонус мастерства + модификатор Мудрости
Модификатор броска атаки = бонус мастерства + модификатор Мудрости
```


''Ритуальное колдовство''

Вы можете сотворить заклинание жреца как ритуал, если у этого заклинания есть ключевое слово «ритуал», и оно подготовлено вами.

''Фокусировка заклинания''

Вы можете использовать священный символ в качестве заклинательной фокусировки для заклинаний жреца.

---

!!! [img[2.png]] Божественный канал

<<<
Вы получаете возможность направлять божественную энергию непосредственно от своего божества, используя её для подпитки магических эффектов. 
<<<

Вы начинаете с двумя такими эффектами: Изгнание нежити и эффектом, определяемым вашим доменом. Некоторые домены дают вам дополнительные эффекты, как только вы получите новые уровни.

Когда вы используете Божественный канал, вы выбираете, какой эффект создать. 

Некоторые эффекты Божественного канала требуют совершить спасбросок. Когда вы используете эффекты такого рода, Сл равна Сл спасброска от ваших заклинаний жреца.

Вы можете использовать Божественный канал один раз. Начиная с 6 уровня вы можете использовать Божественный канал дважды, а начиная с 18 уровня, вы можете использовать его три раза. Чтобы восстановить все потраченные использования вы должны провести 30 минут в молитве своему божеству, вы можете делать это частью отдыха, но не чаще чем количество раз равное вашему бонусу мастерства до завершения продолжительного отдыха.

''Божественный канал: Изгнание нежити''

Вы действием демонстрируете свой священный символ и читаете молитву, изгоняющую нежить. Вся нежить, которая может видеть или слышать вас в пределах 6 м, должна совершить спасбросок Мудрости. Если существо провалило спасбросок, оно изгоняется на 1 минуту, или пока не получит урон.

Изгнанное существо должно тратить свои ходы, пытаясь уйти от вас как можно дальше, и не может добровольно переместиться в пространство, находящееся в пределах 6 м от вас. Оно также не может совершать реакции. В качестве действия существо может использовать только Рывок или пытаться освободиться от эффекта, препятствующего его передвижению. Если двигаться некуда, существо может использовать действие Уклонение.

---

!!! [img[2.png]] Поглощение божественной энергии

<<<
Вы способны подпитывать свои заклинания божественной энергией.
<<<

Бонусным действием вы можете прикоснуться к своему священному символу, прочесть молитву и, потратив одно использование Божественного канала, восстановить себе одну потраченную ячейку заклинаний, уровнем не выше, чем половина вашего бонуса мастерства (округляя вверх).

Количество раз, которое вы можете использовать это умение, зависит от вашего уровня в этом классе: начиная с 2 уровня один раз, начиная с 6 уровня дважды и начиная с 18 уровня трижды. Потраченные использования этого умения восстанавливаются после завершения продолжительного отдыха.

---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[4.png]] Черта
При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[5.png]] Уничтожение нежити
Если нежить проваливает спасбросок от вашего умения Изгнание нежити, существо мгновенно уничтожается, если его показатель опасности не превышает значения, указанного в таблице:

| !Ур. жреца |!ПО нежити |
| 5  | 1/2  |
| 8  | 1  |
| 11 | 2  |
| 14 | 3  |
| 17 | 4  |

---

!!! [img[8.png]] Благословенные удары

<<<
Ваши удары благословены божественной мощью.
<<<

Когда существо получает урон от одного из ваших заговоров или атаки оружием, вы можете нанести ему дополнительно 1к8 урона излучением. Вы не можете использовать это умение повторно до начала вашего следующего хода.

---

!!! [img[10.png]] Божественное вмешательство


<<<
Вы можете воззвать к своему божеству о помощи, когда сильно в этом нуждаетесь. 
<<<

Действием вы можете описать помощь, которую вы ожидаете от своего божества, и совершить бросок к100. При выпадении значения, не превышающего ваш уровень жреца, ваше божество вмешается. Мастер сам выбирает природу вмешательства; подойдёт эффект какого-либо заклинания жреца или заклинания домена. 

Если божество вмешивается, вы не можете использовать это умение в течение 30 дней. В противном случае вы можете использовать это умение после продолжительного отдыха. 

На 20 уровне ваше просьба о вмешательстве автоматически успешна без необходимости в броске.
| !Ур. | !БМ |!Умения |!ИП |!ПП |!ИЗаг | !Ячейки заклинаний |<|<|<|<|
|~|~|~|~|~|~| !1 | !2 | !3 | !4 | !5 |
| !1 | +2  |Magical Tinkering, Spellcasting | — | — | 2 | — | — | — | — | — |
| !2 | +2  |Infuse Item | 4 | 2 | 2 | 2 | — | — | — | — |
| !3 | +2  |Artificer Specialist, The Right Tool for the Job, Увеличение характеристики | 4 | 2 | 2 | 3 | — | — | — | — |
| !4 | +2  |Черта | 4 | 2 | 2 | 3 | — | — | — | — |
| !5 | +3  |Artificer Specialist feature | 4 | 2 | 2 | 4 | 2 | — | — | — |
| !6 | +3  |Tool Expertise, Увеличение характеристики | 6 | 3 | 2 | 4 | 2 | — | — | — |
| !7 | +3  |Flash of Genius | 6 | 3 | 2 | 4 | 3 | — | — | — |
| !8 | +3  |Черта | 6 | 3 | 2 | 4 | 3 | — | — | — |
| !9 | +4  |Увеличение характеристики, Artificer Specialist feature | 6 | 3 | 2 | 4 | 3 | 2 | — | — |
| !10 | +4 |Magic Item Adept | 8 | 4 | 3 | 4 | 3 | 2 | — | — |
| !11 | +4 |Spell-Storing Item | 8 | 4 | 3 | 4 | 3 | 3 | — | — |
| !12 | +4 |Увеличение характеристики, Черта | 8 | 4 | 3 | 4 | 3 | 3 | — | — |
| !13 | +5 |— | 8 | 4 | 3 | 4 | 3 | 3 | 1 | — |
| !14 | +5 |Magic Item Savant | 10 | 5 | 4 | 4 | 3 | 3 | 1 | — |
| !15 | +5 |Увеличение характеристики, Artificer Specialist feature | 10 | 5 | 4 | 4 | 3 | 3 | 2 | — |
| !16 | +5 |Черта | 10 | 5 | 4 | 4 | 3 | 3 | 2 | — |
| !17 | +6 |— | 10 | 5 | 4 | 4 | 3 | 3 | 3 | 1 |
| !18 | +6 |Magic Item Master | 12 | 6 | 4 | 4 | 3 | 3 | 3 | 1 |
| !19 | +6 |Увеличение характеристики | 12 | 6 | 4 | 4 | 3 | 3 | 3 | 2 |
| !20 | +6 |Soul of Artifice | 12 | 6 | 4 | 4 | 3 | 3 | 3 | 2 |

//Ур. - Уровень, БМ - Бонус мастерства, ИП - Известные примочки, ПП - Примочки-предметы, ИЗаг - Известные заговоры //

---
---

!!!Быстрое создание
Вы можете быстро создать изобретателя, следуя этим рекомендациям. Во-первых, у вашего Интеллекта должно быть наивысшее значение. Следующим по величине должно быть значение Телосложения или Ловкости. Во-вторых, выберите предысторию «[[гильдейский ремесленник|Гильдейский ремесленник]]».

---
---

!!!Хиты
''Кость Хитов:'' 1к8 за каждый уровень изобретателя

''Хиты на 1 уровне:'' 8 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к8 (или 5) + мод. Телосложения за каждый уровень изобретателя после первого

---

!!!Владение
* ''[[Доспехи|Доспехи и щиты]]:'' Лёгкие доспехи, средние доспехи
* ''[[Оружие|Оружие]]:'' Простое оружие, тяжёлые арбалеты, одно экзотическое стрелковое оружие на выш выбор
* ''[[Инструменты|Инструменты]]:'' Воровские инструменты, инструменты ремонтника, один вид инструментов ремесленника на ваш выбор
* ''Спасброски:'' Телосложение, Интеллект
* ''Навыки:'' Выберите три навыка из следующих: Анализ, Внимательность, История, Ловкость рук, Магия, Медицина, Природа


!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) дублет или (б) кольчужная рубаха
* (а) лёгкий арбалет и контейнер с 20 болтами или (б) два простых оружия, каждое не дороже 10 см
* (а) набор алхимика, (б) набор исследователя или (в) набор путешественника
* воровские инструменты, походный набор и комплект одежды не дороже 10 см

''Произвольная экипировка''

* Вы получаете 5к4 × 10 серебряных монет (или 125 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.


---

!!! [img[1.png]] MAGICAL TINKERING

<<<
You've learned how to invest a spark of magic into mundane objects. 
<<<

To use this ability, you must have thieves' tools or artisan's tools in hand. You then touch a Tiny nonmagical object as an action and give it one of the following magical properties of your choice:

* The object sheds bright light in a 5-foot radius and dim light for an additional 5 feet.
* Whenever tapped by a creature, the object emits a recorded message that can be heard up to 10 feet away. You utter the message when you bestow this property on the object, and the recording can be no more than 6 seconds long.
* The object continuously emits your choice of an odor or a nonverbal sound (wind, waves, chirping, or the like). The chosen phenomenon is perceivable up to 10 feet away.
* A static visual effect appears on one of the object's surfaces. This effect can be a picture, up to 25 words of text, lines and shapes, or a mixture of these elements, as you like.

The chosen property lasts indefinitely. As an action, you can touch the object and end the property early.

You can bestow magic on multiple objects, touching one object each time you use this feature, though a single object can only bear one property at a time. The maximum number of objects you can affect with this feature at one time is equal to your Intelligence modifier (minimum of one object). If you try to exceed your maximum, the oldest property immediately ends, and then the new property applies.

---

!!! [img[1.png]] SPELLCASTING 

<<<
You've studied the workings of magic and how to cast spells, channeling the magic through objects. To observers, you don't appear to be casting spells in a conventional way; you appear to produce wonders from mundane items and outlandish inventions.
<<<

''TOOLS REQUIRED''

You produce your artificer spell effects through your tools. You must have a spellcasting focus-specifically thieves' tools or some kind of artisan's tool-in hand when you cast any spell with this Spellcasting feature (meaning the spell has an "M" component when you cast it). You must be proficient with the tool to use it in this way. See the equipment chapter in the Player's Handbook for descriptions of these tools. 

After you gain the Infuse Item feature at 2nd level, you can also use any item bearing one of your infusions as a spellcasting focus. 

''CANTRIPS ( 0-LEVEL SPELLS )'' 

You know two cantrips of your choice from the artificer spell list. At higher levels, you learn additional artificer cantrips of your choice, as shown in the Cantrips Known column of the Artificer table. 

When you gain a level in this class, you can replace one of the artificer can trips you know with another cantrip from the artificer spell list. 

''PREPARING AND CASTING SPELLS''

The Artificer table shows how many spell slots you have to cast your artificer spells. To cast one of your artificer spells of 1st level or higher, you must expend a slot of the spell's level or higher. You regain all expended spell slots when you finish a long rest. 

You prepare the list of artificer spells that are available for you to cast, choosing from the artificer spell list. When you do so, choose a number of artificer spells equal to your Intelligence modifier + half your artificer level, rounded down (minimum of one spell). The spells must be of a level for which you have spell slots. 

For example, if you are a 5th-level artificer, you have four 1st-level and two 2nd-level spell slots. With an Intelligence of 14, your list of prepared spells can include four spells of 1st or 2nd level, in any combination. If you prepare the 1st-level spell cure wounds, you can cast it using a 1st-level or a 2nd-level slot. Casting the spell doesn't remove it from your list of prepared spells. 

You can change your list of prepared spells when you finish a long rest. Preparing a new list of artificer spells requires time spent tinkering with your spellcasting focuses: at least 1 minute per spell level for each spell on your list. 

SPELLCASTING ABILITY 

Intelligence is your spellcasting ability for your artificer spells; your understanding of the theory behind magic allows you to wield these spells with superior skill. 

Вы используете Интеллект в случаях, когда заклинание изобретателя ссылается на базовую характеристику. Кроме того, вы используете модификатор Интеллект при определении Сл спасбросков от ваших заклинаний волшебника, и при броске атаки заклинаниями.

```
Сл спасброска = 8 + бонус мастерства + модификатор Интеллекта
Модификатор броска атаки = бонус мастерства + модификатор Интеллекта
```

''Ритуальное колдовство''

Вы можете сотворить заклинание изобретателя как ритуал, если у этого заклинания есть ключевое слово «ритуал», и оно подготовлено вами.


---

!!! [img[2.png]] INFUSE ITEM 

<<<
You've gained the ability to imbue mundane items with certain magical infusions, turning those objects into magic items. 
<<<

Artificer infusions are extraordinary processes that rapidly turn a nonmagical object into a magic item. The description of each of the following infusions details the type of object that can receive it, along with whether the resulting magic item requires attunement.

Some infusions specify a minimum artificer level. You can't learn such an infusion until you are at least that level.

Unless an infusion's description says otherwise, you can't learn an infusion more than once. 

[[Актуальный список примочек|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=1587747735]]

''INFUSIONS KNOWN'' 

When you gain this feature, pick four artificer infusions to learn, choosing from the "Artificer Infusions" section at the end of the class's description. You learn additional infusions of your choice when you reach certain levels in this class, as shown in the Infusions Known column of the Artificer table. Whenever you gain a level in this class, you can replace one of the artificer infusions you learned with a new one. 

''INFUSING AN ITEM''

Whenever you finish a long rest, you can touch a nonmagical object and imbue it with one of your artificer infusions, turning it into a magic item. An infusion works on only certain kinds of objects, as specified in the infusion's description. If the item requires attunement, you can attune yourself to it the instant you infuse the item. If you decide to attune to the item later, you must do so using the normal process for attunement (see the attunement rules in the Dungeon Master's Guide).

Your infusion remains in an item indefinitely, but when you die, the infusion vanishes after a number of days equal to your Intelligence modifier (minimum of 1 day). The infusion also vanishes if you replace your knowledge of the infusion.

You can infuse more than one nonmagical object at the end of a long rest; the maximum number of objects appears in the Infused Items column of the Artificer table. You must touch each of the objects, and each of your infusions can be in only one object at a time. Moreover, no object can bear more than one of your infusions at a time. If you try to exceed your maximum number of infusions, the oldest infusion ends, and then the new infusion applies.

If an infusion ends on an item that contains other things, like a bag of holding, its contents harmlessly appear in and around its space.

---

!!! [img[3.png]] ARTIFICER SPECIALIST
Choose the type of specialist you are: Alchemist, Armorer, Artillerist, or Battle Smith, each of which is detailed after the class's description. Your choice grants you features at 5th level and again at 9th and 15th level. 


---

!!! [img[3.png]] THE RIGHT TOOL FOR THE JOB 
You've learned how to produce exactly the tool you need: with thieves' tools or artisan's tools in hand, you can magically create one set of artisan's tools in an unoccupied space within 5 feet of you. This creation requires 1 hour of uninterrupted work, which can coincide with a short or long rest. Though the product of magic, the tools are nonmagical, and they vanish when you use this feature again. 

---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[4.png]] Черта
При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[6.png]] TOOL EXPERTISE 
Your proficiency bonus is now doubled for any ability check you make that uses your proficiency with a tool.

---

!!! [img[7.png]] FLASH OF GENIUS 
You've gained the ability to come up with solutions under pressure. When you or another creature you can see within 30 feet of you makes an ability check or a saving throw, you can use your reaction to add your Intelligence modifier to the roll.

You can use this feature a number of times equal to your Intelligence modifier (minimum of once). You regain all expended uses when you finish a long rest.

---

!!! [img[10.png]] MAGIC ITEM ADEPT
You've achieved a profound understanding of how to use and make magic items:

* You can attune to up to four magic items at once.
* If you craft a magic item with a rarity of common or uncommon, it takes you a quarter of the normal time, and it costs you half as much of the usual gold. 


---

!!! [img[11.png]] SPELL-STORING ITEM
You can now store a spell in an object. Whenever you finish a long rest, you can touch one simple or martial weapon or one item that you can use as a spellcasting focus, and you store a spell in it, choosing a 1stor 2nd-level spell from the artificer spell list that requires 1 action to cast (you needn't have it prepared).

While holding the object, a creature can take an action to produce the spell's effect from it, using your spellcasting ability modifier. If the spell requires concentration, the creature must concentrate. The spell stays in the object until it's been used a number of times equal to twice your Intelligence modifier (minimum of twice) or until you use this feature again to store a spell in an object.

---

!!! [img[14.png]] MAGIC ITEM SAVANT 
Your skill with magic items deepens:
* You can attune to up to five magic items at once.
* You ignore all class, race, spell, and level requirements on attuning to or using a magic item. 

---

!!! [img[18.png]] MAGIC ITEM MASTER 
You can now attune to up to six magic items at once. 

---

!!! [img[20.png]] SOUL OF ARTIFICE 
You have developed a mystical connection to your magic items, which you can draw on for protection:

* You gain a +1 bonus to all saving throws per magic item you are currently attuned to.
* If you're reduced to 0 hit points but not killed outright, you can use your reaction to end one of your artificer infusions, causing you to drop to 1 hit point instead of 0. 
| !Ур. | !БМ |!Умения | !ИЗаг | !ИЗакл | !ЯЗ | !УЯ  | !ИВ |
| !1 | +2 |Магия договора, Потусторонний покровитель | 2 | 2 | 1 | 1 | —  |
| !2 | +2 |Таинственные воззвания | 2 | 3 | 2 | 1 | 2 |
| !3 | +2 |Предмет договора, Увеличение характеристики | 2 | 4 | 2 | 2 | 2 |
| !4 | +2 |Черта | 3 | 5 | 2 | 2 | 2 |
| !5 | +3 |—  | 3 | 6 | 2 | 3 | 3 |
| !6 | +3 |Увеличение характеристики, Умение покровителя | 3 | 7 | 2 | 3 | 3 |
| !7 | +3 |—  | 3 | 8 | 2 | 4 | 4 |
| !8 | +3 |Черта | 3 | 9 | 2 | 4 | 4 |
| !9 | +4 |Увеличение характеристики | 3 | 10 | 2 | 5 | 5 |
| !10 | +4 |Умение покровителя | 4 | 10 | 2 | 5 | 5 |
| !11 | +4 |Таинственный арканум (6 уровень) | 4 | 11 | 3 | 5 | 5 |
| !12 | +4 |Увеличение характеристики, Черта | 4 | 11 | 3 | 5 | 6 |
| !13 | +5 |Таинственный арканум (7 уровень) | 4 | 12 | 3 | 5 | 6 |
| !14 | +5 |Умение покровителя | 4 | 12 | 3 | 5 | 6 |
| !15 | +5 |Таинственный арканум (8 уровень), Увеличение характеристики | 4 | 13 | 3 | 5 | 7 |
| !16 | +5 |Черта | 4 | 13 | 3 | 5 | 7 |
| !17 | +6 |Таинственный арканум (9 уровень) | 4 | 14 | 4 | 5 | 7 |
| !18 | +6 |- | 4 | 14 | 4 | 5 | 8 |
| !19 | +6 |Увеличение характеристики | 4 | 15 | 4 | 5 | 8 |
| !20 | +6 |Мастер мистики | 4 | 15 | 4 | 5 | 8 |

//Ур. - Уровень, БМ - Бонус мастерства, ИЗаг - Известные заговоры, ИЗакл - Известные заклинания, ЯЗ - Ячейки заклинаний, УЯ - Уровень ячеек, ИВ - Известные воззвания//

---
---

!!!Быстрое создание
Вы можете быстро создать колдуна, следуя этим рекомендациям. Во-первых, у вашей Харизмы должно быть наивысшее значение. Следующим по величине должно быть значение Телосложения. Во-вторых, выберите предысторию «[[шарлатан|Шарлатан]]». В-третьих, выберите заговоры //леденящее прикосновение// и //мистический заряд//, а также заклинания 1 уровня //ведьмин снаряд// и //очарование личности//.

---
---

!!!Хиты
''Кость Хитов:'' 1к8 за каждый уровень колдуна

''Хиты на 1 уровне:'' 8 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к8 (или 5) + мод. Телосложения за каждый уровень колдуна после первого

---


!!!Владение
* ''[[Доспехи|Доспехи и щиты]]:'' Лёгкие доспехи
* ''[[Оружие|Оружие]]:'' Простое оружие
* ''[[Инструменты|Инструменты]]:'' Нет
* ''Спасброски:'' Мудрость, Харизма
* ''Навыки:'' Выберите два навыка из следующих: Анализ, Запугивание, История, Магия, Обман, Природа, Религия

!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) лёгкий арбалет и контейнер с 20 болтами или (б) простое оружие не дороже 15 см
* (а) мешочек с компонентами или (б) арканная фокусировка
* дублет, два кинжала, простое оружие не дороже 10 см, набор исследователя, походный набор и комплект одежды не дороже 10 см

''Произвольная экипировка''

* Вы получаете 4к4 × 10 серебряных монет (или 100 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! Альтернативный вариант колдуна: Сделка архивиста

Вы можете посчитать, что ваш персонаж-колдун, представляет собой скорее интеллектуальную нежели харизматичную личность. Это опциональное правило позволяет вам создать колдуна, базовой характеристикой которого является Интеллект. Для этого:

* замените владение спасбросками Харизмы владением спасбросками Интеллекта;
* замените любые упоминания вашего модификатора Харизмы в умениях колдуна или таинственных воззваниях вашим модификатором Интеллекта;
* используйте Интеллект вместо Харизмы в качестве вашей базовой характеристики заклинаний.


---

!!! [img[1.png]] Магия договора


<<<
Исследования тайн и магия, дарованная покровителем, дают вам возможность использовать заклинания.
<<<


''Заговоры (заклинания 0 уровня)''

Вы известен заговор //фокусы// и ещё два заговора на ваш выбор из списка заклинаний колдуна. Вы узнаёте дополнительные заговоры колдуна на более высоких уровнях, как показано в колонке «ИЗаг (известные заговоры)».

''Ячейки заклинаний''

Таблица выше показывает, какое количество ячеек для сотворения заклинаний у вас есть, а также уровень этих ячеек — все ваши ячейки заклинаний одного уровня. Для сотворения одного из заклинаний колдуна 1 уровня и выше вы должны потратить ячейку заклинаний. Вы восстанавливаете все потраченные ячейки после завершения продолжительного отдыха.

''Известные заклинания первого и более высоких уровней''

Вам известны два заклинания 1 уровня на ваш выбор из списка заклинаний колдуна.

Колонка «ИЗакл (известные заклинания)» показывает, когда вы сможете выучить новые заклинания. Уровень заклинаний не должен превышать уровень самой высокой имеющейся у вас ячейки заклинаний колдуна.

''Заклинательная гибкость''

Каждый раз, когда вы завершаете продолжительный отдых, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний колдуна того же уровня.

Кроме того, когда вы получаете уровень в этом классе, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний колдуна, с уровнем, не превышающим уровень ячеек заклинаний колдуна.

''Базовая характеристика заклинаний''

Харизма является базовой характеристикой для сотворения ваших заклинаний колдуна.

Вы используете Харизму в случаях, когда заклинание колдуна ссылается на базовую характеристику. Кроме того, вы используете Харизму при определении Сл спасбросков от ваших заклинаний колдуна, и при броске атаки заклинаниями.

```
Сл спасброска = 8 + бонус мастерства + модификатор Харизмы
Модификатор броска атаки = бонус мастерства + модификатор Харизмы
```

''Фокусировка заклинания''

Вы можете использовать арканную фокусировку в качестве заклинательной фокусировки для заклинаний колдуна.

---

!!! [img[1.png]] Мистический ритуал
Вы можете восполнить запасы вашей магии договора, потратив 30 минут на проведение особого мистического ритуала. Этот ритуал может быть проведён частью отдыха, а по его окончанию вы восстанавливаете все потраченные ячейки заклинаний, полученные вами от умения Магия договора.

Содержание и метод проведения ритуала могут сильно варьироваться. Ритуалом может быть жертвоприношение, медитация с целью связаться с космосом, выполнение особого условия договора, прямое общение с покровителем или что-то другое. Решите, как будет выглядеть ваш мистический ритуал, основываясь на вашем покровителе и характере договора.

Вы можете использовать это умение количество раз, равное вашему бонусу мастерства. Потраченные использования этого умения восстанавливаются после завершения продолжительного отдыха.

---

!!! [img[1.png]] Потусторонний покровитель

<<<
Существа, выступающие покровителями колдунов, являются могущественными обитателями других планов существования. Не боги, но почти равные богам в своих силах. Разные покровители предоставляют колдунам доступ к разным силам и воззваниям, и ожидают определённых услуг взамен.

Некоторые покровители коллекционируют колдунов, раздавая мистические знания относительно свободно, или похваляются возможностью подчинять смертных своей воле. Другие покровители даруют свои силы неохотно, и могут заключить договор лишь с одним колдуном. Колдуны, служащие общему покровителю, могут относиться друг к другу как к союзникам, родственникам или соперникам.
<<<

Вы заключили сделку с потусторонним существом на ваш выбор: [[Архифея]], [[Бессмертный]], [[Ведьмовской клинок]], [[Великий Древний]], [[Гений]], [[Исчадие]] или [[Небожитель]]. Ваш выбор определит умения, предоставляемые на 1, 6, 10 и 14 уровнях.

---

!!! [img[2.png]] Таинственные воззвания
<<<
В процессе изучения оккультных знаний вы раскопали таинственные воззвания: фрагменты запрещённых знаний, которые даруют магические способности.
<<<

Вы получаете два воззвания на ваш выбор. Получая новые уровни колдуна, вы получаете дополнительные воззвания на ваш выбор, как показано в колонке «ИВ (известные воззвания)».

[[Актуальный список таинственных воззваний|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=1448348621]]

Кроме того, когда вы получаете новый уровень этого класса, вы можете выбрать одно известное вам воззвание и заменить его другим, которое вы способны выучить на этом уровне.

Если воззвание требует от существа совершения спасброска, используется Сл спасбросков от ваших заклинаний колдуна.

---

!!! [img[3.png]] Предмет договора


<<<
Потусторонний покровитель дарует вам подарок за верную службу. 
<<<


Вы получаете одно из следующих умений на выбор: 

<<tabs "[tag[Предмет договора]]" "" "$:/state/tab1">>

---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[4.png]] Черта
При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[11.png]] Таинственный арканум

<<<
Ваш покровитель дарует вам магический секрет, называемый арканумом.
<<<

Выберите одно заклинание 6 уровня из списка заклинаний колдуна в качестве арканума.

Вы можете сотворить это заклинание, не используя ячейку заклинаний. Вы должны завершить продолжительный отдых, чтобы сделать это ещё раз.

На следующих уровнях вы получаете новые заклинания, которые можно применить таким образом: 

* одно 7 уровня на 13 уровне;
* одно 8 уровня на 15 уровне;
* одно 9 уровня на 17 уровне.

Вы восстанавливаете все потраченные использования арканумов после завершения продолжительного отдыха.

Кроме того, всякий раз когда вы получаете новый уровень колдуна, вы можете заменить один из магических арканумов другим заклинанием того же уровня из списка заклинаний колдуна.

---

!!! [img[20.png]] Мастер мистики

<<<

Вы можете обратиться к своему покровителю с просьбой восстановить ваши потраченные силы. 
<<<

Вы можете действием обратиться к покровителю, чтобы восстановить все использованные ячейки заклинаний, дарованные умением Магия договора, а также потраченные Таинственные арканумы 6 и 7 уровней. 

Вы не можете использовать это умение повторно, пока не завершите продолжительный отдых.
| !Ур. | !БМ |!Умения | !КГ | !ИПК |
| !1 | +2 |Hunter’s Bane, Blood Maledict | 1к4 | 1 |
| !2 | +2 |Fighting Style, Crimson Rite | 1к4 | 1 |
| !3 | +2 |Blood Hunter Order, Увеличение характеристики | 1к4 | 1 |
| !4 | +2 |Черта | 1к4 | 1 |
| !5 | +3 |Дополнительная атака | 1к6 | 1 |
| !6 | +3 |Brand of Castigation, Blood Maledict (2/rest), Увеличение характеристики | 1к6 | 2 |
| !7 | +3 |Order feature, Primal Rite | 1к6 | 2 |
| !8 | +3 |Черта | 1к6 | 2 |
| !9 | +4 |Grim Psychometry, Увеличение характеристики | 1к6 | 2 |
| !10 | +4 |Dark Augmentation | 1к6 | 3 |
| !11 | +4 |Order feature | 1к8 | 3 |
| !12 | +4 |Увеличение характеристики, Черта | 1к8 | 3 |
| !13 | +5 |Brand of Tethering, Blood Maledict (3/rest) | 1к8 | 3 |
| !14 | +5 |Hardened Soul, Esoteric Rite | 1к8 | 4 |
| !15 | +5 |Order feature, Увеличение характеристики | 1к8 | 4 |
| !16 | +5 |Черта | 1к8 | 4 |
| !17 | +6 |Blood Maledict (4/rest) | 1к10 | 4 |
| !18 | +6 |Order feature | 1к10 | 5 |
| !19 | +6 |Увеличение характеристики | 1к10 | 5 |
| !20 | +6 |Sanguine Mastery | 1к10 | 5 |

//Ур. - Уровень, БМ - Бонус мастерства, КГ - Кость гемомантии, ИПК - Известные проклятия крови//

---
---


!!!Быстрое создание
Вы можете быстро создать кровавого охотника, следуя этим рекомендациям. Во-первых, у вашей Силы или Ловкости (в зависимости от того, какие [[доспехи|Доспехи и щиты]] и [[оружие|Оружие]] вы хотите использовать) должно быть наивысшее значение. Следующим по величине должно быть значение Телосложения (или Интеллекта, если вы хотите сосредоточиться на силе своих проклятий или магических сил). Во-вторых, выберите предысторию «[[беспризорник|Беспризорник]]» или «[[солдат|Солдат]]».


---
---

!!!Хиты
''Кость Хитов:'' 1к10 за каждый уровень кровавого охотника

''Хиты на 1 уровне:'' 10 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к10 (или 6) + мод. Телосложения за каждый уровень кровавого охотника после первого

---


!!!Владение
* ''[[Доспехи|Доспехи и щиты]]:'' Лёгкие доспехи, средние доспехи
* ''[[Оружие|Оружие]]:'' Простое оружие, воинское оружие, два экзотических оружия на ваш выбор
* ''[[Инструменты|Инструменты]]:'' Инструменты алхимика
* ''Спасброски:'' Ловкость, Интеллект
* ''Навыки:'' Выберите три навыка из следующих: Акробатика, Анализ, Атлетика, Выживание, Выносливость, История, Магия, Проницательность, Религия


!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) воинское оружие не дороже 50 см или (б) два простых оружие, каждое не дороже 15 см
* (а) лёгкий арбалет и контейнер с 20 болтами или (б) простое оружие не дороже 15 см
* (а) кожаный доспех или (б) кольчужная рубаха
* (а) набор алхимика, (б) набор исследователя, (в) набор охотника на чудовищ или (г) набор путешественника
* походный набор и комплект одежды не дороже 5 см

''Произвольная экипировка''

* Вы получаете 6к4 × 10 серебряных монет (или 150 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! [img[1.png]] Hunter's Bane 

<<<
Beginning at 1st level, you have survived the Hunter’s Bane, a dangerous, long-guarded ritual that alters your life’s blood, forever binding you to the darkness and honing your senses against it. 
<<<

You have advantage on Wisdom (Survival) checks to track fey, fiends, or undead, as well as on Intelligence ability checks to recall information about them. 


<<<
The Hunter’s Bane also empowers your body to control and shape hemocraft magic, using your own blood and life essence to fuel your abilities. 
<<<


Some of your features require your target to make a saving throw to resist the feature’s effects. The saving throw DC is calculated as follows: 

```
Hemocraft save DC = 8 + your proficiency bonus + your Intelligence modifier. 
```


---

!!! [img[1.png]] Проклятие крови

<<<
Вы научились направлять, а иногда и жертвовать, часть своей жизненной эссенции, чтобы проклинать или манипулировать существами с помощью искусства гемомантии. 
<<<

Вам известно одно проклятие крови на ваш выбор. 

Колонка «ИПК (Известные проклятия крови)» показывает, когда вы сможете выучить новые проклятия крови. Когда вы получаете уровень в этом классе, вы можете выбрать одно из известных вам проклятий крови, изученных с помощью этого умения, и заменить его другим.

При наложении проклятия крови, но до того, как оно подействует на цель, вы можете усилить его, потеряв количество хитов равное одному броску вашей кости гемомантии, как показано в колонке «КГ (кость гемомантии)». Усиленное проклятие получает дополнительный эффект, указанный в его описании. 

Бескровные существа невосприимчивы к не усиленным проклятиям крови.

Вы можете использовать проклятие крови один раз. Начиная с 6 уровня вы можете использовать проклятие крови дважды, начиная с 13 уровня - трижды, а начиная с 17 уровня - четыре раза. Чтобы восстановить все потраченные использования, вы должны потратить 30 минут на проведение ритуала крови, вы можете делать это частью отдыха, но не чаще чем количество раз равное вашему бонусу мастерства до завершения продолжительного отдыха.

<<tabs "[tag[Проклятие крови]nsort[]]" "" "$:/state/tab1" "tc-vertical">>


---

!!! [img[2.png]] Боевой стиль
Вы выбираете боевой стиль, соответствующий вашей специализации. Выберите один из следующих вариантов. Вы не можете выбирать один и тот же вариант боевого стиля, даже если позже у вас будет возможность выбрать ещё один стиль.

<<tabs "[tag[Боевой стиль кровавого охотника]nsort[]]" "" "$:/state/tab1" "tc-vertical">>

---

!!! [img[2.png]] Crimson Rite 

<<<
At 2nd level, you learn to invoke a rite of hemocraft within your weapon at the cost of your own vitality. 
<<<

Choose one rite from the Primal Rites list below to learn. 

As a bonus action, you activate a crimson rite on a single weapon with the elemental energy of a known rite of your choice that lasts until you finish a short or long rest, or if you aren’t holding the weapon at the end of your turn. When you activate a rite, you lose a number of hit points equal to one roll of your hemocraft die, as shown in the Hemocraft Die column of the Blood Hunter table. 

While active, attacks from this weapon deal an addition- al 1d4 damage of the chosen rite’s type. This damage is magical, and increases as you gain levels as a blood hunter, as shown in the Hemocraft Die column of the Blood Hunter table. A weapon can only hold a single active rite at a time. 

You learn an additional Primal Rite of your choice at 7th level, and choose an Esoteric Rite to learn at 14th level. 

''Primal Rites'' 

Choose from the following: 

* //''Rite of the Flame.''// Your rite damage is fire damage. 
* //''Rite of the Frozen.''// Your rite damage is cold damage. 
* //''Rite of the Storm.''// Your rite damage is lightning damage. 

''Esoteric Rites'' 

Choose from the following: 

* //''Rite of the Dead.''// Your rite damage is necrotic damage. 
* //''Rite of the Oracle.''// Your rite damage is psychic damage. 
* //''Rite of the Roar.''// Your rite damage is thunder damage. 

---

!!! [img[3.png]] Blood Hunter Order


<<<
There are a handful of secretive orders of blood hunters that guard their cryptic techniques and rituals. One must adhere to one of these orders to even be granted access to the Hunter’s Bane rite that starts their journey, and only once they’ve proven their dedication and ability will the secrets of the order begin to be revealed. It’s within these small, enigmatic sects that the real power of a blood hunter is learned. 
<<<


At 3rd level, you commit to an order of blood hunter martial focus. Choose Order of the Ghostslayer, Order of the Profane Soul, Order of the Mutant, or Order of the Lycan, all detailed at the end of the class description. The order you choose grants you features at 3rd level, and again at 7th, 11th, 15th, and 18th level. 

---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[4.png]] Черта
При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[5.png]] Дополнительная атака
Если вы совершаете действие Атака, вы можете совершить две атаки вместо одной.

---

!!! [img[6.png]] Brand of Castigation
At 6th level, whenever you damage a creature with your Crimson Rite feature, you can choose to sear an arcane brand of hemocraft magic into it (requires no action). You always know the direction to the branded creature, and each time the branded creature deals damage to you or a creature you can see within 5 feet of you, the branded creature suffers psychic damage equal to your Intelligence modifier (minimum of 1 damage). 

Your brand lasts until you dismiss it, or you apply a brand to another creature. Your brand counts as a spell for the purposes of dispel magic, and the spell level is equal to half of your blood hunter level (maximum of 9th level spell). 

Once you use this feature, you can’t use it again until you finish a short or long rest. 

---

!!! [img[9.png]] Grim Psychometry 

<<<
When you reach 9th level, you have a supernatural talent for discerning the history surrounding mysterious objects or places touched by evil. 
<<<

When making an Intelligence (History) check to recall information about a darker past surrounding an object you are touching, or a location you are present in, you have advantage on the roll. The information gleaned often leans towards the more sinister influences of the past, and sometimes conveys visions of things previously unknown to the character on higher rolls. 


---

!!! [img[10.png]] Dark Augmentation 

<<<
Upon reaching 10th level, arcane blood magic suffuses your body, permanently reinforcing your resilience. 
<<<

Your speed increases by 5 feet, and whenever you make a Strength, Dexterity, or Constitution saving throw, you gain a bonus to the saving throw equal to your Intelligence modifier (minimum of one). 

---

!!! [img[13.png]] Brand of Tethering 
Starting at 13th level, the psychic damage from your Brand of Castigation feature increases to twice your Intelligence modifier (minimum of 2). 

In addition, a branded creature can’t take the Dash action, and if a creature branded by you attempts to teleport or leave their current plane via ability, spell, or portal, they take 4d6 psychic damage and must make a Wisdom saving throw. On a failure, the teleport or plane shift fails. 

---

!!! [img[14.png]] Hardened Soul 
When you reach 14th level, you have advantage on saving throws against being charmed and frightened. 

---

!!! [img[20.png]] Sanguine Mastery 
<<<
Upon becoming 20th level, you honed your control over blood magic, mitigating your sacrifice and empowering your capability. 
<<<

Once per turn, whenever a blood hunter feature requires you to roll a hemocraft die, you can choose to reroll the die and choose which result to use. 

In addition, whenever you score a critical hit with a weapon attack empowered by your Crimson Rite, you regain one expended use of your Blood Maledict feature. 
| !Ур. | !БМ | !БИ | !ОЦ | !Скорость |!Умения |
| !1  | +2 | 1к4   | —  | — |Защита без доспехов, Боевые искусства |
| !2  | +2 | 1к4   | 2  | +2 м  |Движение без доспехов, Ци |
| !3  | +2 | 1к4   | 3  | +2 м   |Заряженный ци удар, Монастырская практика, Отражение снарядов, Увеличение характеристики |
| !4  | +2 | 1к4   | 4  | +2 м  |Медленное падение, Черта, Ускоренное исцеление |
| !5  | +3 | 1к6   | 5  | +2 м   |Дополнительная атака, Ошеломляющий удар |
| !6  | +3 | 1к6   | 6  | +3 м |Увеличение характеристики, Умение монастырской практики, Энергетические удары |
| !7  | +3 | 1к6   | 7  | +3 м |Спокойствие разума, Увёртливость |
| !8  | +3 | 1к6   | 8  | +3 м |Черта |
| !9  | +4 | 1к6   | 9  | +3 м |Увеличение характеристики, Улучшенное движение без доспехов |
| !10 | +4 | 1к6   | 10 | +4 м   |Чистота тела |
| !11 | +4 | 1к8   | 11 | +4 м   |Умение монастырской практики  |
| !12 | +4 | 1к8   | 12 | +4 м   |Увеличение характеристики, Черта |
| !13 | +5 | 1к8   | 13 | +4 м   |Язык солнца и луны  |
| !14 | +5 | 1к8   | 14 | +5 м |Алмазная душа  |
| !15 | +5 | 1к8   | 15 | +5 м |Безвременное тело, Увеличение характеристики  |
| !16 | +5 | 1к8   | 16 | +5 м |Черта  |
| !17 | +6 | 1к10  | 17 | +5 м |Умение монастырской практики |
| !18 | +6 | 1к10  | 18 | +6 м  |Пустое тело |
| !19 | +6 | 1к10  | 19 | +6 м  |Увеличение характеристики |
| !20 | +6 | 1к10  | 20 | +6 м   |Совершенство  |

//Ур. - Уровень, БМ - Бонус мастерства, БИ - Боевые искусства, ОЦ - Очки ци//

---
---

!!!Быстрое создание
Вы можете быстро создать монаха, следуя этим рекомендациям. Во-первых, у вашей Ловкости должно быть наивысшее значение. Следующим по величине должно быть значение Мудрости. Во-вторых, выберите предысторию «[[отшельник|Отшельник]]».

---
---

!!!Хиты
''Кость Хитов:'' 1к8 за каждый уровень монаха

''Хиты на 1 уровне:'' 8 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к8 (или 5) + мод. Телосложения за каждый уровень монаха после первого

---

!!!Владение
* ''[[Доспехи|Доспехи и щиты]]:'' Нет
* ''[[Оружие|Оружие]]:'' Монашеское оружие (//см. Боевые искусства//)
* ''[[Инструменты|Инструменты]]:'' Один вид инструментов ремесленика или музыкальных инструментов на ваш выбор
* ''Спасброски:'' Сила, Ловкость
* ''Навыки:'' Выберите два навыка из следующих: Акробатика, Атлетика, Выносливость, История, Проницательность, Религия, Скрытность

!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) боевой посох, (б) короткий меч или (в) другое монашеское оружие
* набор странника и комплект одежды не дороже 5 см

''Произвольная экипировка''

* Вы получаете 1к4 × 10 серебряных монет (или 25 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! [img[1.png]] Боевые искусства

Ваше знание боевых искусств позволяет вам эффективно использовать в бою безоружные удары и монашеское оружие, приведённое в таблице ниже.

''Монашеское оружие''

|!Древковое |!Дробящее |!Клинковое |!Контактное |
|Боевой посох |Дубинка  |Кама  |Верёвочная обмотка |
|Короткое копьё |Лёгкая булава |Короткий меч |Кастет  |
|Трезубец |Сай |—  |Кастет-топор |
|—  |Тонфа |—  |Цестус |
|!Метательное |!Стрелковое |!Топоры |!Цепы |
|Сюрикен |— |Абордажный топор |Нунчаки |
|—  |—  |Походный топорик |—  |

Если вы безоружны или используете только монашеское оружие, и не носите ни доспехов, ни щита, вы получаете следующие преимущества:

* Вы можете использовать Ловкость вместо Силы для бросков атак и урона ваших безоружных ударов и атак монашеским оружием.
* Вы можете использовать 1к4 вместо обычной кости урона ваших безоружных ударов или атак монашеским оружием. Эта кость увеличивается с вашим уровнем, как показано в колонке « БИ (боевые искусства)».
* Если в свой ход вы используете действие Атака для безоружной атаки, или атаки монашеским оружием, вы можете совершить ещё одну безоружную атаку бонусным действием.

---

!!! [img[1.png]] Защита без доспехов
Если вы не носите ни доспехов, ни щита, ваш Класс Доспеха равен 10 + мод. Ловкости + мод. Мудрости.

---

!!! [img[2.png]] Движение без доспехов
Ваша скорость увеличивается на 2 м, если вы не носите доспехов и щитов. Этот бонус увеличивается с ростом вашего уровня, согласно колонке «Скорость».

На 9 уровне вы получаете возможность в свой ход перемещаться по вертикальным поверхностям и по поверхности жидкости, не падая во время движения.

---

!!! [img[2.png]] Ци

<<<
Ваши тренировки позволяют вам управлять мистической энергией ци. 
<<<

Ваш доступ к этой энергии выражается количеством очков ци. Ваш уровень монаха определяет это количество, согласно колонке «ОЦ (очки ци)».

Вы можете использовать эти очки чтобы активировать различные умения ци. Вначале вам известны следующие три умения: Зоркий глаз, Поступь ветра, Терпеливая оборона и Шквал ударов. С повышением уровня в этом классе вы выучите новые умения ци.

Некоторые из ваших умений ци требуют от цели спасброска, позволяющего избежать эффекта. Сл такого спасброска определяется следующим образом:

```
Сл спасброска ци = 8 + бонус мастерства + модификатор Мудрости
```

<<tabs "[tag[Умение ци]nsort[]]" "" "$:/state/tab1" "tc-vertical">>


Если вы совершаете действие, тратящее очки ци, вы можете совершить одну безоружную атаку бонусным действием.

Вы должны потратить как минимум 30 минут на медитацию для восстановления потраченных очков ци, и можете восстановить их таким образом количество раз равное вашему бонусу мастерства до завершения продолжительного отдыха.

---

!!! [img[3.png]] Заряженный ци удар
Если вы совершаете действие, тратящее очки ци, вы можете совершить одну безоружную атаку или атаку монашеским оружием бонусным действием.

---

!!! [img[3.png]] Монастырская практика

<<<
В монастырях мультивселенной следуют нескольким основным практикам. Большинство монастырей следуют какой-то одной практике, но в некоторых почитают каждую из них и обучают монахов согласно их способностям и интересам. Все практики основываются на одних и тех же базовых техниках - различия проявляются при более глубоком изучении. Поэтому монах должен выбрать ту или иную практику только по достижении 3 уровня.
<<<


Вы выбираете монастырскую практику, которой следуете: [[Астрального тела|Практика Астрального тела]], [[Кенсея|Практика Кенсея]], [[Милосердия|Практика Милосердия]], [[Открытой ладони|Практика Открытой ладони]], [[Познания смерти|Практика Познания смерти]], [[Пьяного мастера|Практика Пьяного мастера]], [[Солнечной души|Практика Солнечной души]], [[Тени|Практика Тени]] или [[Четырёх стихий|Практика Четырёх стихий]]. Ваш выбор определит умения, предоставляемые на 3, 6, 11 и 17 уровнях.

---

!!! [img[3.png]] Отражение снарядов
Вы можете реакцией отразить или поймать снаряд, если по вам попали атакой дальнобойным оружием. Если вы делаете это, урон снижается на 1к10 + модификатор Ловкости + уровень монаха.

Если вы снизили урон до 0, вы можете поймать снаряд в случае, если он достаточно мал, чтоб держать его одной рукой, и одна из ваших рук свободна. Если вы поймали снаряд с помощью этого умения, вы можете потратить одно очко ци, чтобы частью реакции совершить дальнобойную атаку пойманным оружием или боеприпасом с дальностью 8 (24) м. Этот снаряд считается для данной атаки монашеским оружием, которым вы владеете.

---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[4.png]] Медленное падение
Вы можете реакцией уменьшить полученный вами урон от падения на значение, равное вашему уровню монаха, умноженному на пять.

---

!!! [img[4.png]] Ускоренное исцеление
Вы можете действием потратить 2 очка ци и совершить бросок вашей кости боевых искусств. Вы восстанавливаете хиты в количестве равном выпавшему значению + ваш бонус мастерства.

---

!!! [img[4.png]] Черта

При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[5.png]] Дополнительная атака
Если вы совершаете действие Атака, вы можете совершить две атаки вместо одной.

---

!!! [img[5.png]] Ошеломляющий удар

<<<
Вы можете взаимодействовать с энергией ци, текущей в теле вашего противника. 
<<<

Если вы попали по другому существу атакой рукопашным оружием, вы можете потратить 1 очко ци, чтобы нанести ошеломляющий удар. Цель должна преуспеть в спасброске Телосложения, иначе она станет [[ошеломлённой|Ошеломлённый]] до конца вашего следующего хода.

---

!!! [img[6.png]] Энергетические удары
Ваши безоружные удары считаются магическими при определении преодоления сопротивления и иммунитета к немагическим атакам и урону.

---

!!! [img[7.png]] Спокойствие разума
Вы можете действием окончить один из действующих на вас эффектов, делающих вас [[очарованным|Очарованный]] или [[испуганным|Испуганный]].

---

!!! [img[7.png]] Увёртливость

<<<
Ваше инстинктивное проворство позволяет вам уклоняться от эффектов, направленных на определённую область, вроде дыхания синего дракона или заклинания //огненный шар//. 
<<<

Если вы попадаете под действие эффекта, позволяющего совершить спасбросок Ловкости, чтобы получить только половину урона, вы вместо этого не получаете урона при успешном спасброске и получаете только половину урона при проваленном.

---

!!! [img[10.png]] Чистота тела
Ваше мастерство ци, текущем сквозь ваше тело, делает вас иммунным к болезням и яду.

---

!!! [img[13.png]] Язык солнца и луны
Вы научились взаимодействовать с энергией ци в чужом разуме, и теперь вы понимаете речь на любом языке. Кроме того, все существа, способные понимать хотя бы один язык, понимают то, что вы сказали.

---

!!! [img[14.png]] Алмазная душа
Ваше мастерство ци предоставляет вам владение всеми спасбросками.

Кроме того, если вы провалили спасбросок, вы можете повторить его, потратив 1 очко ци, и должны использовать новый результат.

---

!!! [img[15.png]] Безвременное тело
Ваша ци подпитывает вас так, что ваше тело больше не подвержено признакам старения,  но вы всё ещё можете умереть от старости. Вы не можете быть состарены магически. Кроме того, вам больше не требуется еда и вода.

---

!!! [img[18.png]] Пустое тело
Вы можете действием потратить 4 очка ци, чтобы стать [[невидимым|Невидимый]] на 1 минуту. В течение этого времени вы получаете сопротивление всем видам урона, кроме урона силовым полем.

Кроме того, вы можете потратить 8 очков ци, чтобы сотворить заклинание //проекция в астрал// без применения материальных компонентов. Вы не можете перемещать кого-либо вместе с собой, сотворяя это заклинание таким образом.

---

!!! [img[20.png]] Совершенство
Если при проверке инициативы у вас нет очков ци, вы получаете 4 таких очка.
| !Ур. | !БМ |!Умения | !Ячейки заклинаний |<|<|<|<|
|~|~|~| !1 | !2 | !3 | !4 | !5 |
| !1 | +2  |Божественное чувство, Наложение рук | — | — | — | — | — |
| !2 | +2  |Боевой стиль, Использование заклинаний, Божественная кара | 2 | — | — | — | — |
| !3 | +2  |Божественное здоровье, Поглощение божественной энергии, Священная клятва, Увеличение характеристики | 3 | — | — | — | — |
| !4 | +2  |Черта | 3 | — | — | — | — |
| !5 | +3  |Дополнительная атака | 4 | 2 | — | — | — |
| !6 | +3  |Аура защиты, Увеличение характеристики | 4 | 2 | — | — | — |
| !7 | +3  |Умение священной клятвы| 4 | 3 | — | — | — |
| !8 | +3  |Черта | 4 | 3 | — | — | — |
| !9 | +4  |Увеличение характеристики | 4 | 3 | 2 | — | — |
| !10 | +4 |Аура отваги | 4 | 3 | 2 | — | — |
| !11 | +4 |Улучшенная божественная кара 	| 4 | 3 | 3 | — | — |
| !12 | +4 |Увеличение характеристики, Черта | 4 | 3 | 3 | — | — |
| !13 | +5 |—| 4 | 3 | 3 | 1 | — |
| !14 | +5 |Очищающее касание | 4 | 3 | 3 | 1 | — |
| !15 | +5 |Увеличение характеристики, Умение священной клятвы | 4 | 3 | 3 | 2 | — |
| !16 | +5 |Черта | 4 | 3 | 3 | 2 | — |
| !17 | +6 |— | 4 | 3 | 3 | 3 | 1 |
| !18 | +6 |Улучшения ауры | 4 | 3 | 3 | 3 | 1 |
| !19 | +6 |Увеличение характеристики | 4 | 3 | 3 | 3 | 2 |
| !20 | +6 |Умение священной клятвы | 4 | 3 | 3 | 3 | 2 |

//Ур. - Уровень, БМ - Бонус мастерства//

---
---

!!!Быстрое создание
Вы можете быстро создать паладина, следуя этим рекомендациям. Во-первых, у вашей Силы должно быть наивысшее значение. Следующим по величине должно быть значение Харизмы. Во-вторых, выберите предысторию «[[благородный|Благородный]]».

---
---


!!!Хиты
''Кость Хитов:'' 1к10 за каждый уровень паладина

''Хиты на 1 уровне:'' 10 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к10 (или 6) + мод. Телосложения за каждый уровень паладина после первого

---

!!!Владение
* ''[[Доспехи|Доспехи и щиты]]:'' Все доспехи
* ''[[Оружие|Оружие]]:'' Простое оружие, воинское оружие, одно экзотическое оружие на ваш выбор
* ''[[Инструменты|Инструменты]]:'' Нет
* ''Спасброски:'' Мудрость, Харизма
* ''Навыки:'' Выберите два навыка из следующих: Атлетика, Выносливость, Запугивание, Медицина, Проницательность, Религия, Убеждение

!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) щит и воинское лёгкое или одноручное оружие или (б) два воинских оружия, каждое не дороже 50 см
* (а) пять дротиков или (б) простое оружие не дороже 25 см
* (а) набор охотника на чудовищ, (б) набор священника или (в) набор путешественника
* (а) комплект дорожной одежды или (б) комплект одежды солдата
* кольчуга, походный набор и священный символ

''Произвольная экипировка''

* Вы получаете 8к4 × 10 серебряных монет (или 200 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! [img[1.png]] Божественное чувство

<<<
Присутствие сильного зла воспринимается вашими чувствами как неприятный запах, а могущественное добро звучит как небесная музыка в ваших ушах. 
<<<

Вы можете действием открыть своё сознание для обнаружения таких сил. До конца своего следующего хода вы знаете местоположение всех исчадий, небожителей и нежити, не находящихся за полным укрытием, в пределах 12 м от вас. Вам известен тип (исчадие, небожитель, нежить) любого существа, чьё присутствие вы чувствуете, но вы не можете определить, кто это конкретно. В этом же радиусе вы также обнаруживаете присутствие мест и предметов, которые были освящены или осквернены, например, заклинанием //святилище//.

Вы можете использовать это умение количество раз, равное 1 + мод. Харизмы. Потраченные использования этого умения восстанавливаются после завершения продолжительного отдыха.

---

!!! [img[1.png]] Наложение рук
<<<
Ваше благословенное касание может лечить раны. 
<<<

У вас есть запас целительной силы, который восстанавливается после завершения продолжительного отдыха. При помощи этого запаса вы можете восстанавливать количество хитов, равное уровню паладина, умноженному на 5.

Вы можете действием коснуться существа и, зачерпнув силу из запаса, восстановить количество хитов этого существа на любое число, вплоть до максимума, оставшегося в вашем запасе.

В качестве альтернативы, вы можете потрать 5 хитов из вашего запаса хитов для излечения цели от одной болезни или одного действующего на неё яда. Вы можете устранить несколько эффектов болезни и ядов одним использованием Наложения рук, тратя хиты отдельно для каждого эффекта.

Это умение не оказывает никакого эффекта на нежить и конструктов.

---

!!! [img[2.png]] Боевой стиль
Вы выбираете боевой стиль, соответствующий вашей специализации. Выберите один из следующих вариантов. Вы не можете выбирать один и тот же вариант боевого стиля, даже если позже у вас будет возможность выбрать ещё один стиль.

<<tabs "[tag[Боевой стиль паладина]nsort[]]" "" "$:/state/tab1" "tc-vertical">>


---

!!! [img[2.png]] Божественная кара
Если вы попадаете по существу атакой рукопашным оружием, вы можете потратить одну ячейку заклинаний для причинения цели урона излучением, который добавится к урону от оружия. Дополнительный урон равен 2к8 за ячейку 1 уровня, плюс 1к8 за каждый уровень ячейки выше первого, до максимума 5к8. Урон увеличивается на 1к8, если цель — нежить или исчадие, до максимума 6к8.

---

!!! [img[2.png]] Использование заклинаний
<<<
Вы узнаёте, как черпать божественную магию посредством медитации и молитв, чтобы творить заклятья подобно жрецу.
<<<

''Подготовка и сотворение заклинаний''

Таблица выше показывает, какое количество ячеек для сотворения заклинаний у вас есть на первом и более высоких уровнях. Для сотворения одного из этих заклинаний вы должны потратить ячейку заклинаний того же уровня или выше, что и само заклинание. Вы восстанавливаете все потраченные ячейки после завершения продолжительного отдыха.

Вы подготавливаете список заклинаний паладина, доступных для сотворения. При этом вы выбираете количество заклинаний паладина, равное ''модификатору Харизмы + половина уровня паладина, округляя вниз'' (минимум одно заклинание). Уровень заклинаний не должен превышать уровень самой высокой имеющейся у вас ячейки заклинаний паладина.

Вы можете изменить список подготовленных заклинаний, когда завершаете продолжительный отдых. Подготовка нового списка заклинаний паладина требует времени, проведённого в молитвах и медитации: не менее 1 минуты за уровень заклинания для каждого заклинания в вашем списке.


''Базовая характеристика заклинаний''

Харизма является базовой характеристикой для сотворения ваших заклинаний паладина, так как их мощь проистекает из силы ваших убеждений. 

Вы используете Харизму в случаях, когда заклинание паладина ссылается на базовую характеристику. Кроме того, вы используете модификатор Харизмы при определении Сл спасбросков от ваших заклинаний паладина, и при броске атаки заклинаниями.

```
Сл спасброска = 8 + бонус мастерства + модификатор Харизмы
Модификатор броска атаки = бонус мастерства + модификатор Харизмы
```

''Фокусировка заклинания''

Вы можете использовать священный символ в качестве заклинательной фокусировки для заклинаний паладина.

---

!!! [img[3.png]] Божественное здоровье
Божественная магия, текущая через вас, делает вас иммунным к болезням.

---

!!! [img[3.png]] Поглощение божественной энергии

<<<
Вы способны подпитывать свои заклинания божественной энергией.
<<<

Бонусным действием вы можете прикоснуться к своему священному символу, прочесть молитву и, потратив одно использование Божественного канала, восстановить себе одну потраченную ячейку заклинаний, уровнем не выше, чем половина вашего бонуса мастерства (округляя вверх).

Количество раз, которое вы можете использовать это умение, зависит от вашего уровня в этом классе: начиная с 3 уровня один раз, начиная с 7 уровня дважды и начиная с 15 уровня трижды. Потраченные использования этого умения восстанавливаются после завершения продолжительного отдых

---

!!! [img[3.png]] Священная клятва
<<<
Становление паладином подразумевает под собой принятие обетов, которые обращают паладина к праведным делам и пути активного сопротивления злу. Финальная клятва, взятая им на 3 уровне, является кульминацией всего обучения паладина. Некоторые персонажи этого класса не считают себя настоящими паладинами до того, как они получат 3 уровень и дадут эту клятву. Для других эта клятва является формальностью, официальной отметкой того, что и так было всегда в сердце паладина.
<<<

Вы выбираете данную вами клятву: [[Древних|Клятва Древних]], [[Искупления|Клятва Искупления]], [[Короны|Клятва Короны]], [[Мести|Клятва Мести]], [[Покорения|Клятва Покорения]], [[Преданности|Клятва Преданности]], [[Славы|Клятва Славы]] или [[Смотрителей|Клятва Смотрителей]] . Ваш выбор определит заклинания клятвы, способы использования Божественного канала, и дополнительные умения, предоставляемые на 3, 7, 15 и 20 уровнях.

''Заклинания клятвы''

У каждой клятвы есть список заклинаний, которые вы получаете на новых уровнях паладина. Как только вы получаете заклинание клятвы, оно всегда считается подготовленным и не учитывается при подсчёте количества заклинаний, которые можно подготовить.

Если вы получаете доступ к заклинанию, отсутствующему в списке заклинаний паладина, оно всё равно будет считаться для вас заклинанием паладина.

''Божественный канал''

<<<
Ваша клятва позволяет направлять божественную энергию, чтобы подпитывать магические эффекты. 
<<<

Каждый вариант Божественного канала, предоставленный клятвой, объясняет, как его использовать.

Когда вы используете ваш Божественный канал, вы выбираете, какой эффект создать. 

После использования Божественного канала вы должны провести 30 минут в медитации или молитве своему божеству, чтобы использовать его снова. Вы можете делать это частью короткого или продолжительного отдыха, но не чаще чем количество раз равное вашему бонусу мастерства до завершения продолжительного отдыха.

Некоторые эффекты Божественного канала требуют совершить спасбросок. Когда вы используете эффекты такого рода, Сл равна Сл спасброска от ваших заклинаний паладина.

''Нарушение клятвы''

<<<
Паладин старается придерживаться высочайших стандартов поведения, но даже самым добродетельным паладинам свойственно ошибаться. Иногда правильный путь оказывается слишком требовательным, иногда ситуация сводится к выбору меньшего из двух зол, а иногда эмоции вынуждают паладина преступить через свою клятву.

Паладин, который нарушил клятву, обычно стремится к отпущению грехов у жреца, разделяющего его веру, или у другого паладина того же ордена. Паладин может провести всенощное бдение в молитве в знак покаяния, или поститься, или совершить другой аналогичный акт самоотречения. После обряда исповеди и прощения паладин очищается.

Если паладин умышленно нарушил свою клятву и не проявляет никаких признаков раскаяния, последствия могут быть куда более серьёзными. 
<<<

По усмотрению Мастера, не раскаявшийся паладин может вынуждено отказаться от этого класса и взять другой, или, возможно, стать паладином [[Клятвопреступником|Клятвопреступник]].

---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[4.png]] Черта
При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[5.png]] Дополнительная атака
Если вы совершаете действие Атака, вы можете совершить две атаки вместо одной.

---

!!! [img[6.png]] Аура защиты
Если вы или дружественное существо в пределах 2 м от вас должны совершить спасбросок, это существо получает бонус к спасброску, равный модификатору вашей Харизмы (минимальный бонус +1). Вы должны находиться в сознании, чтобы предоставлять этот бонус.

На 18 уровне дистанция этой ауры увеличивается до 6 м.

---

!!! [img[10.png]] Аура отваги
Вы и дружественные существа в пределах 2 м от вас не можете быть испуганы, пока вы находитесь в сознании.

На 18 уровне дистанция этой ауры увеличивается до 6 м.

---

!!! [img[11.png]] Улучшенная божественная кара
<<<
Вы проникаетесь праведной мощью, что даёт всем вашим атакам рукопашным оружием божественную силу. 
<<<

Каждый раз, когда вы попадаете по существу рукопашным оружием, это существо получает дополнительно 1к8 урона излучением.

---

!!! [img[14.png]] Очищающее касание
Вы можете действием окончить действие заклинания на себе или на одном согласном существе, которого вы касаетесь.

Вы можете использовать это умение количество раз, равное вашему модификатору Харизмы (минимум 1). Потраченные использования этого умения восстанавливаются после завершения продолжительного отдыха.
| !Ур. | !БМ | !КУ |!Умения |
| !1 | +2 | 1к6 |Воровской жаргон, Коварный удар, Компетентность |
| !2 | +2 | 1к6 |Хитрое действие |
| !3 | +2 | 2к6 |Архетип плута, Увеличение характеристики |
| !4 | +2 | 2к6 |Черта |
| !5 | +3 | 3к6 |Невероятное уклонение |
| !6 | +3 | 3к6 |Компетентность, Увеличение характеристики |
| !7 | +3 | 4к6 |Увёртливость |
| !8 | +3 | 4к6 |Увеличение характеристики, Черта |
| !9 | +4 | 5к6 |Умение архетипа плута |
| !10 | +4 | 5к6 |Увеличение характеристики, Черта |
| !11 | +4 | 6к6 |Несомненный талант |
| !12 | +4 | 6к6 |Увеличение характеристики, Черта |
| !13 | +5 | 7к6 |Умение архетипа плута |
| !14 | +5 | 7к6 |Слепое чувство |
| !15 | +5 | 8к6 |Скользкий ум, Увеличение характеристики |
| !16 | +5 | 8к6 |Черта |
| !17 | +6 | 9к6 |Умение архетипа плута |
| !18 | +6 | 9к6 |Неуловимость |
| !19 | +6 | 10к6 |Увеличение характеристики |
| !20 | +6 | 10к6 |Удача |

//Ур. - Уровень, БМ - Бонус мастерства, КУ - Коварный удар//

---
---

!!!Быстрое создание
Вы можете быстро создать плута, следуя этим рекомендациям. Во-первых, у вашей Ловкости должно быть наивысшее значение. Следующим по величине должно быть значение Интеллекта, при условии, что вы планируете взять архетип [[Арканный трюкач]]. В противном случае выберите Харизму, если планируете пользоваться обманом и социальным взаимодействием. Во-вторых, выберите предысторию «[[шарлатан|Шарлатан]]».

---
---

!!!Хиты
''Кость Хитов:'' 1к8 за каждый уровень плута

''Хиты на 1 уровне:'' 8 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к8 (или 5) + мод. Телосложения за каждый уровень плута после первого

---

!!!Владение
* ''[[Доспехи|Доспехи и щиты]]:'' Лёгкие доспехи
* ''[[Оружие|Оружие]]:'' Простое лёгкое оружие, простое стрелковое оружие, воинское лёгкое и одноручное клинковое оружие
* ''[[Инструменты|Инструменты]]:'' Воровские инструменты
* ''Спасброски:'' Ловкость, Интеллект
* ''Навыки:'' Выберите четыре навыка из следующих: Акробатика, Анализ, Атлетика, Внимательность, Выступление, Запугивание, Ловкость рук, Обман, Проницательность, Скрытность, Убеждение

!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) шпага или (б) рапира
* (а) короткий лук и колчан с 20 стрелами или (б) стилет
* (а) набор взломщика, (б) набор исследователя или (в) набор путешественника
* (а) комплект дорожной одежды или (б) комплект одежды взломщика
* воровские инструменты, дублет, два кинжала и походный набор

''Произвольная экипировка''

* Вы получаете 4к4 × 10 серебряных монет (или 100 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! [img[1.png]] Воровской жаргон
Во время плутовского обучения вы изучили воровской жаргон - тайную смесь диалекта, арго и шифра, который позволяет скрывать сообщения в казалось бы обычном разговоре. Только другое существо, знающее воровской жаргон, понимает такие сообщения. Это занимает в четыре раза больше времени, нежели передача тех же слов прямым текстом.

Кроме того, вам известны секретные знаки и символы, используемые для передачи коротких и простых сообщений. Например, является ли область опасной или территорией гильдии воров, находится ли поблизости добыча, простодушны ли люди в округе, и предоставляют ли здесь безопасное убежище для воров в бегах.

---

!!! [img[1.png]] Коварный удар

<<<
Вы научились наносить точные удары, используя замешательство противника. 
<<<

Один раз в ход вы можете причинить дополнительный урон 1к6 одному из существ, по которому вы попали атакой, совершённой с преимуществом к броску атаки. Атака должна использовать стрелковое оружие или оружие без свойства «грубое» и не являющееся двуручным.

Вам не нужно иметь преимущество на бросок атаки, если другой противник цели находится в пределах 1 м от неё. Этот противник не должен быть [[недееспособным|Недееспособный]], и у вас не должно быть помехи на бросок атаки. 

Дополнительный урон увеличивается, когда вы получаете уровни в этом классе, как показано в колонке «КУ (коварный удар)».

---

!!! [img[1.png]] Компетентность
Выберите два навыка из тех, которыми вы владеете, либо один такой навык и воровские инструменты. Ваш бонус мастерства для проверок этих навыков или инструментов удваивается.

На 6 уровне вы можете выбрать ещё два таких навыка (или навык и воровские инструменты) и получить для них это преимущество.

---

!!! [img[2.png]] Хитрое действие

<<<
Ваше мышление и ловкость позволяют вам двигаться и действовать быстрее. 
<<<

Вы можете в каждом своём ходу совершать бонусное действие. Это действие может быть использовано только для [[Рывка|Рывок]], [[Отхода|Отход]] или [[Засады|Засада]].


---

!!! [img[3.png]] Архетип плута
<<<
У плутов много общих черт, включая их упор на совершенствование навыков, выверенный смертоносный подход к бою и выдающиеся рефлексы. Но разные плуты применяют эти таланты в различных направлениях, формирующих архетипы. Ваш выбор архетипа является отражением вашей специализации, не обязательно свидетельствующей о выбранной профессии, но описывающий методы, которые вы предпочитаете.
<<<

Вы выбираете архетип, который отражает ваши плутовские способности: [[Арканный трюкач]], [[Бретёр]], [[Вор]], [[Ищейка]], [[Клинок души]], [[Комбинатор]], [[Скаут]], [[Убийца]] или [[Фантом]]. Ваш выбор определит умения, предоставляемые на 3, 9, 13 и 17 уровнях.

---

!!! [img[3.png]] Надёжный удар
Вы можете бонусным действием дать себе преимущество на ваш следующий бросок атаки в этом ходу. Вы можете совершать это бонусное действие, только если вы не перемещались в этом ходу. После совершения этого бонусного действия ваша скорость становится равна 0 до конца этого хода.

---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 8, 10, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.


---

!!! [img[4.png]] Черта
При достижении 4, 8, 10, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[5.png]] Невероятное уклонение
Когда видимое вами существо попадает по вам атакой, вы можете реакцией уменьшить урон, причиняемый вам этой атакой, вдвое.

---

!!! [img[7.png]] Увёртливость

<<<
Вы способны ловко увернуться от некоторых эффектов, действующих по области, например, огненного дыхания красного дракона или заклинания //град//. 
<<<

Если вы попадаете под действие эффекта, который позволяет вам совершить спасбросок Ловкости, чтобы получить только половину урона, вместо этого вы не получаете урона, если спасбросок был успешен, и только половину урона, если он был провален.

---

!!! [img[11.png]] Несомненный талант
На 11 уровне вы улучшаете выбранные навыки, пока они не достигнут совершенства. Каждый раз, когда вы совершаете проверку характеристики, которая позволяет добавить бонус мастерства, вы можете при выпадении на к20 результата «1–9» считать, что выпало «10».

---

!!! [img[14.png]] Слепое чувство
Пока вы можете слышать, вы знаете о местонахождении всех скрытых и невидимых существ в пределах 2 м от себя.

---

!!! [img[15.png]] Скользкий ум
Вы получаете владение спасбросками Мудрости.

---

!!! [img[18.png]] Неуловимость
<<<
Вы способны уклоняться так хорошо, что противник крайне редко может взять над вами верх. 
<<<

Броски атак по вам не получают преимущества, пока вы дееспособны.

---

!!! [img[20.png]] Удача
<<<
Удача не подводит вас в нужный момент.
<<<

Если ваша атака промахивается по цели, находящейся в пределах досягаемости, вы можете изменить промах на попадание. В качестве альтернативы, если вы провалили проверку характеристики, вы можете заменить результат, выпавший на к20, на «20».

Вы не можете использовать это умение повторно, пока не завершите продолжительный отдых.
| !Ур. | !БМ |!Умения | !ИЗакл | !Ячейки заклинаний |<|<|<|<|
|~|~|~|~| !1 | !2 | !3 | !4 | !5 |
| !1 | +2  |Искусный исследователь, Предпочтительный противник (1к4) | — | — | — | — | — | — |
| !2 | +2  |Боевой стиль, Использование заклинаний | 2 | 2 | — | — | — | — |
| !3 | +2  |Архетип следопыта, Первобытная осведомлённость, Увеличение характеристики | 3 | 3 | — | — | — | — |
| !4 | +2  |Черта | 3 | 3 | — | — | — | — |
| !5 | +3  |Дополнительная атака | 4 | 4 | 2 | — | — | — |
| !6 | +3  |Искусный исследователь, Предпочтительный противник (1к6), Увеличение характеристики | 4 | 4 | 2 | — | — | — |
| !7 | +3  |Умение архетипа следопыта | 5 | 4 | 3 | — | — | — |
| !8 | +3  |Тропами земли, Черта | 5 | 4 | 3 | — | — | — |
| !9 | +4  |Увеличение характеристики | 6 | 4 | 3 | 2 | — | — |
| !10 | +4 |Искусный исследователь, Природная завеса | 6 | 4 | 3 | 2 | — | — |
| !11 | +4 |Умение архетипа следопыта 	| 7 | 4 | 3 | 3 | — | — |
| !12 | +4 |Увеличение характеристики, Черта | 7 | 4 | 3 | 3 | — | — |
| !13 | +5 |— | 8 | 4 | 3 | 3 | 1 | — |
| !14 | +5 |Исчезновение, Предпочтительный противник (1к8) | 8 | 4 | 3 | 3 | 1 | — |
| !15 | +5 |Увеличение характеристики, Умение архетипа следопыта | 9 | 4 | 3 | 3 | 2 | — |
| !16 | +5 |Черта | 9 | 4 | 3 | 3 | 2 | — |
| !17 | +6 |— | 10 | 4 | 3 | 3 | 3 | 1 |
| !18 | +6 |Дикие чувства | 10 | 4 | 3 | 3 | 3 | 1 |
| !19 | +6 |Увеличение характеристики | 11 | 4 | 3 | 3 | 3 | 2 |
| !20 | +6 |Убийца противников | 11 | 4 | 3 | 3 | 3 | 2 |

//Ур. - Уровень, БМ - Бонус мастерства, ИЗакл - Известные заклинания//

---
---

!!!Быстрое создание
Вы можете быстро создать воина, следуя этим рекомендациям. Во-первых, у вашей Силы или Ловкости (в зависимости от того, какие [[доспехи|Доспехи и щиты]] и [[оружие|Оружие]] вы хотите использовать) должно быть наивысшее значение. Следующим по величине должно быть значение Мудрости. Во-вторых, выберите предысторию «[[чужеземец|Чужеземец]]».

---
---


!!!Хиты
''Кость Хитов:'' 1к10 за каждый уровень следопыта

''Хиты на 1 уровне:'' 10 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к10 (или 6) + мод. Телосложения за каждый уровень следопыта после первого

---

!!!Владение
* ''[[Доспехи|Доспехи и щиты]]:'' Лёгкие доспехи, средние доспехи
* ''[[Оружие|Оружие]]:'' Простое оружие, воинское оружие, два экзотических оружия на ваш выбор
* ''[[Инструменты|Инструменты]]:'' Нет
* ''Спасброски:'' Сила, Ловкость
* ''Навыки:'' Выберите три навыка из следующих: Анализ, Атлетика, Внимательность, Выживание, Выносливость, Природа, Проницательность, Скрытность, Уход за животными

!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) дублет или (б) кольчужная рубаха
* (а) два коротких меча или (б) два простых оружия, каждое не дороже 15 см
* (а) набор исследователя, (б) набор охотника на чудовищ или (в) набор путешественника
* длинный лук, колчан с 20 стрелами, походный набор и комплект одежды не дороже 10 см

''Произвольная экипировка''

* Вы получаете 5к4 × 10 серебряных монет (или 125 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! [img[1.png]] Искусный исследователь

<<<
Вы являетесь непревзойдённым исследователем и мастером выживания, как в дикой природе, так и в цивилизации, через которую пролегает ваш путь.
<<<

Получите одно из преимуществ ниже: //''неутомимый''//, //''странствующий''// или //''умелый''//. Вы получаете второе такое преимущество на ваш выбор, отличающееся от ранее выбранных, на 6 и на 10 уровнях этого класса.

''Неутомимый''

Вы можете действием дать себе временные хиты в количестве равном 1к8 + ваш мод. Мудрости (минимум 1). Вы можете совершать это действие количество раз, равное вашему бонусу мастерства. Потраченные использования восстанавливаются после завершения продолжительного отдыха.

Кроме того, вы снижаете свою степень истощения на 1 после завершения короткого отдыха или ночлега.

''Странствующий''

Ваша скорость ходьбы увеличивается на 1 м, и вы получаете скорость карабканья и плавания равную вашей скорости ходьбы.

''Умелый''

Выберите один навык из тех, которыми вы владеете. Ваш бонус мастерства для проверок этого навыка удваивается.

Кроме того, вы можете говорить, читать и писать на двух языках на ваш выбор.


---

!!! [img[1.png]] Предпочтительный противник
Когда вы попадаете по существу атакой, вы можете воззвать к своей таинственной связи с природой, чтобы пометить цель, как своим предпочтительным противником. Существо остаётся помеченным в течение 1 минуты, либо пока вы не потеряете концентрацию (как если бы концентрировались на заклинании).

Раз в свой ход, когда вы попадаете атакой по предпочтительному противнику (включая атаку, которой вы помечаете его) вы можете нанести дополнительно 1к4 урона.

Вы можете использовать это умение количество раз, равное вашему бонусу мастерства. Потраченные использования этого умения восстанавливаются после завершения продолжительного отдыха.

Дополнительный урон увеличивается, когда вы достигаете определенных уровней в этом классе: до 1к6 на 6 уровне и 1к8 на 14 уровне.

---

!!! [img[2.png]] Боевой стиль
Вы выбираете боевой стиль, соответствующий вашей специализации. Выберите один из следующих вариантов. Вы не можете выбирать один и тот же вариант боевого стиля, даже если позже у вас будет возможность выбрать ещё один стиль.

<<tabs "[tag[Боевой стиль следопыта]nsort[]]" "" "$:/state/tab1" "tc-vertical">>

---

!!! [img[2.png]] Использование заклинаний

<<<
Вы научились использовать магическую сущность природы для сотворения заклинаний подобно друиду.
<<<

''Ячейки заклинаний''

Таблица выше показывает, сколько ячеек заклинаний у вас есть для сотворения заклинаний 1 и более высоких уровней. Для сотворения заклинания вы должны потратить ячейку соответствующего, либо более высокого уровня. Вы восстанавливаете все потраченные ячейки после завершения продолжительного отдыха.

''Известные заклинания первого и более высоких уровней''

Вам известны два заклинания 1 уровня на ваш выбор из списка заклинаний следопыта.

Колонка «ИЗакл (известные заклинания)» показывает, когда вы сможете выучить новые заклинания. Уровень заклинаний не должен превышать уровень самой высокой имеющейся у вас ячейки заклинаний следопыта.

''Заклинательная гибкость''

Каждый раз, когда вы завершаете продолжительный отдых, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний следопыта того же уровня.

Кроме того, когда вы получаете уровень в этом классе, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний следопыта, с уровнем, не превышающим уровень ячеек заклинаний следопыта.

''Базовая характеристика заклинаний''

Мудрость является базовой характеристикой для сотворения ваших заклинаний следопыта. Ваша магия проистекает из вашего согласия с законами природы. 

Вы используете Мудрость в случаях, когда заклинание следопыта ссылается на базовую характеристику. Кроме того, вы используете Мудрость при определении Сл спасбросков от ваших заклинаний следопыта, и при броске атаки заклинаниями.

```
Сл спасброска = 8 + бонус мастерства + модификатор Мудрости
Модификатор броска атаки = бонус мастерства + модификатор Мудрости
```

''Фокусировка заклинания''

Вы можете использовать фокусировку друидов в качестве заклинательной фокусировки для заклинаний следопыта.

---

!!! [img[3.png]] Архетип следопыта
Вы выбираете архетип, отражающий ваш подход к столкновениям с окружающими опасностями: [[Охотник]], [[Повелитель зверей]], [[Странник горизонта]], [[Сумрачный охотник]], [[Убийца чудовищ]], [[Фейский скиталец]] или [[Хранитель роя]]. Ваш выбор определит умения, предоставляемые на 3, 7, 11, и 15 уровнях.

---

!!! [img[3.png]] Первобытная осведомлённость

<<<
Вы способны осознавать происходящее вокруг через взаимосвязи природы.
<<<

Вы изучаете дополнительные заклинания, как показано в таблице ниже, когда достигаете определённых уровней в этом классе, если они вам ещё не известны. Эти заклинания не учитываются в общее количество известных вам заклинаний.

Вы можете сотворять каждое из этих заклинаний один раз, не тратя ячейки заклинаний. Вы не можете сделать этого снова, пока не завершите продолжительный отдых.

| !Ур. |!Заклинание |
| !3 |//разговор с животными// |
| !5 |//животные чувства// |
| !9 |//разговор с растениями// |
| !13 |//поиск существа// |
| !17 |//общение с природой// |

---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[4.png]] Черта
При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс.

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[5.png]] Дополнительная атака
Если вы совершаете действие Атака, вы можете совершить две атаки вместо одной.

---

!!! [img[8.png]] Тропами земли

Перемещение по немагической труднопроходимой местности не стоит вам дополнительного перемещения. Вы не получаете урона от шипов, колючек и прочих подобных угроз от немагических растений.

Кроме того, вы совершаете с преимуществом спасброски от растений, которые магическим образом препятствуют движению, например, созданных заклинанием //опутывание//.

---

!!! [img[10.png]] Природная завеса
<<<
Вы используете единство с природой, чтобы на короткое время скрыться из виду.
<<<

Вы можете бонусным действием стать невидимым вместе со всей экипировкой, которую вы несёте или носите, до начала вашего следующего хода.

Вы можете использовать это умение количество раз, равное вашему бонусу мастерства. Потраченные использования этого умения восстанавливаются после завершения продолжительного отдыха.

---

!!! [img[14.png]] Исчезновение
Вы можете использовать в свой ход действие [[Засада|Засада]] бонусным действием. Кроме того, вы не можете быть выслежены немагическими способом, если вы не оставите след намеренно.

---

!!! [img[18.png]] Дикие чувства
<<<
Ваши сверхъестественные чувства помогают вам сражаться с невидимыми существами. 
<<<

Вы игнорируете помеху на броски атаки по невидимым существам.

Вам также известно о местонахождении всех невидимых существ в пределах 6 м от вас, при условии, что они не скрыты от вас, а вы не [[ослеплены|Ослеплённый]] и не [[оглушены|Оглохший]].

---

!!! [img[20.png]] Убийца противников
<<<
Вы являетесь непревзойдённым охотником на своих врагов. 
<<<

Один раз в свой ход вы можете добавить модификатор Мудрости к броску атаки или урона по ваше предпочтительному противнику. Вы можете использовать это умение до или после броска, но до того, как эффекты броска вступят в силу.
| !Ур. | !БМ |!Умения | !ИЗаг | !ИЗакл |
| !1 | +2 |Использование заклинаний, Источник чародейства  | 4 | 2 |
| !2 | +2 |Магический источник | 4 | 3 |
| !3 | +2 |Метамагия, Увеличение характеристики | 4 | 4 |
| !4 | +2 |Черта | 5 | 5 |
| !5 | +3 |—  | 5 | 6 |
| !6 | +3 |Увеличение характеристики, Умение источника чародейства | 5 | 7 |
| !7 | +3 |—  | 5 | 8 |
| !8 | +3 |Черта | 5 | 9 |
| !9 | +4 |Увеличение характеристики | 5 | 10 |
| !10 | +4 |Метамагия | 6 | 11 |
| !11 | +4 |—   | 6 | 12 |
| !12 | +4 |Увеличение характеристики, Черта | 6 | 12 |
| !13 | +5 |—  | 6 | 13 |
| !14 | +5 |Умение источника чародейства | 6 | 13 |
| !15 | +5 |Увеличение характеристики | 6 | 14 |
| !16 | +5 |Черта | 6 | 14 |
| !17 | +6 |Метамагия | 6 | 15 |
| !18 | +6 |Умение источника чародейства | 6 | 15 |
| !19 | +6 |Увеличение характеристики | 6 | 15 |
| !20 | +6 |Чародейское восстановление | 6 | 15 |

//Ур. - Уровень, БМ - Бонус мастерства, ИЗаг - Известные заговоры, ИЗакл - Известные заклинания//

''Ячейки заклинаний на уровень заклинаний''

| !Ур. | !1 | !2 | !3 | !4 | !5 | !6 | !7 | !8 | !9 |
| !1 |  2 | — | — | — | — | — | — | — | — |
| !2 | 3 | — | — | — | — | — | — | — | — |
| !3 |  4 | 2 | — | — | — | — | — | — | — |
| !4 |  4 | 3 | — | — | — | — | — | — | — |
| !5 |  4 | 3 | 2 | — | — | — | — | — | — |
| !6 |  4 | 3 | 3 | — | — | — | — | — | — |
| !7 |  4 | 3 | 3 | 1 | — | — | — | — | — |
| !8 |  4 | 3 | 3 | 2 | — | — | — | — | — |
| !9 |  4 | 3 | 3 | 3 | 1 | — | — | — | — |
| !10 |  4 | 3 | 3 | 3 | 2 | — | — | — | — |
| !11 |  4 | 3 | 3 | 3 | 2 | 1 | — | — | — |
| !12 |  4 | 3 | 3 | 3 | 2 | 1 | — | — | — |
| !13 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | — | — |
| !14 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | — | — |
| !15 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | — |
| !16 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | — |
| !17 |  4 | 3 | 3 | 3 | 2 | 1 | 1 | 1 | 1 |
| !18 |  4 | 3 | 3 | 3 | 3 | 1 | 1 | 1 | 1 |
| !19 |  4 | 3 | 3 | 3 | 3 | 2 | 1 | 1 | 1 |
| !20 |  4 | 3 | 3 | 3 | 3 | 2 | 2 | 1 | 1 |

---
---

!!!Быстрое создание
Вы можете быстро создать чародея, следуя этим рекомендациям. Во-первых, у вашей Харизмы должно быть наивысшее значение. Следующей по величине характеристикой должно быть Телосложение. Во-вторых, выберите предысторию «[[отшельник|Отшельник]]». В-третьих, выберите заговоры //луч холода//, //малая иллюзия//, //свет//, и //электрошок//, а также заклинания 1 уровня //волшебная стрела// и //щит//.

---
---

!!!Хиты
''Кость Хитов:'' 1к6 за каждый уровень чародея

''Хиты на 1 уровне:'' 6 + мод. Телосложения

''Хиты на следующих уровнях:'' 1к6 (или 4) + мод. Телосложения за каждый уровень чародея после первого

---

!!!Владение
* ''[[Доспехи|Доспехи и щиты]]:'' Нет
* ''[[Оружие|Оружие]]:'' Простое лёгкое и одноручное дробящее, клинковое и стрелковое оружие
* ''[[Инструменты|Инструменты]]:'' Нет
* ''Спасброски:'' Телосложение, Харизма
* ''Навыки:'' Выберите два навыка из следующих: Запугивание, Магия, Обман, Проницательность, Религия, Убеждение

!!!Экипировка
Вы можете выбрать один из предложенных ниже варинтов экипировки - ''базовый ''или ''произвольный''. Вы получаете эти предметы в дополнение к экипировке, полученной на старте другим образом (например, от вашей предыстории):

''Базовая экипировка''

* (а) лёгкий арбалет и контейнер с 20 болтами или (б) простое оружие не дороже 25 см
* (а) мешочек с компонентами или (б) арканная фокусировка
* (а) набор исследователя или (б) набор путешественника
* два кинжала, походный набор и комплект одежды не дороже 5 см

''Произвольная экипировка''

* Вы получаете 3к4 × 10 серебряных монет (или 75 см). Вы можете потратить все или часть этих денег, чтобы купить себе экипировку самостоятельно.

---

!!! [img[1.png]] Использование заклинаний

<<<
Определённое событие в вашем прошлом, либо в жизни ваших родителей или предков, оставило на вас неизгладимый отпечаток, связав вас с арканной магией. Этот источник магии, каким бы ни было его происхождение, подпитывает ваши заклинания.
<<<

''Заговоры (заклинания 0 уровня)''

Вы известены четыре заговора на ваш выбор из списка заклинаний чародея. Вы узнаёте дополнительные заговоры чародея на более высоких уровнях, как показано в колонке «ИЗаг (известные заговоры)».

''Ячейки заклинаний''

Таблица выше показывает, сколько ячеек заклинаний у вас есть для сотворения заклинаний 1 и более высоких уровней. Для сотворения заклинания вы должны потратить ячейку соответствующего, либо более высокого уровня. Вы восстанавливаете все потраченные ячейки после завершения продолжительного отдыха.

''Известные заклинания первого и более высоких уровней''

Вам известны два заклинания 1 уровня на ваш выбор из списка заклинаний чародея.

Колонка «ИЗакл (известные заклинания)» показывает, когда вы сможете выучить новые заклинания. Уровень заклинаний не должен превышать уровень самой высокой имеющейся у вас ячейки заклинаний чародея.

''Заклинательная гибкость''

Каждый раз, когда вы завершаете продолжительный отдых, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний чародея того же уровня.

Кроме того, когда вы получаете уровень в этом классе, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний чародея, с уровнем, не превышающим уровень ячеек заклинаний чародея.

''Базовая характеристика заклинаний''

Харизма является базовой характеристикой для сотворения ваших заклинаний чародея. Сила вашей магии напрямую зависит от вашей способности проецировать свою волю в реальность.

Вы используете Харизму в случаях, когда заклинание чародея ссылается на базовую характеристику. Кроме того, вы используете Харизму при определении Сл спасбросков от ваших заклинаний чародея, и при броске атаки заклинаниями.

```
Сл спасброска = 8 + бонус мастерства + модификатор Харизмы
Модификатор броска атаки = бонус мастерства + модификатор Харизмы
```

''Внутренний фокус''

Врождённый характер вашей магии позволяет вам сотворять ваши заклинания чародея без необходимости в материальных компонентах, если для них не указана стоимость.

---

!!! [img[1.png]] Источник чародейства
Выберите источник, из которого ваш персонаж черпает свою магическую силу: [[Аберрантный разум]], [[Божественная душа]], [[Дикая магия]], [[Драконья кровь]], [[Магия Тени]], [[Механическая душа]] или [[Могущество шторма]]. Ваш выбор определит умения, предоставляемые на 1, 6, 14 и 18 уровнях.

---

!!! [img[2.png]] Магический источник
Ваш внутренний источник магии выражен в очках чародейства, позволяющих вам создавать разнообразные магические эффекты.

''Очки чародейства''

Вы получаете очки чародейства в количестве равном вашему уровню в этом классе. У вас не может быть единовременно больше очков, чем это количество. Вы восстанавливаете все потраченные очки чародейства после завершения продолжительного отдыха.

''Свободное заклинательство''

Вы можете использовать очки чародейства, чтобы получить дополнительные ячейки заклинаний, и наоборот, пожертвовать ячейками, чтоб получить очки. 

//''Создание ячеек заклинаний''//. В свой ход вы можете бонусным действием превратить непотраченные очки чародейства в одну ячейку заклинаний. Приведённая таблица отображает стоимость создания ячеек разных уровней. Вы можете создавать ячейки не выше пятого уровня. 

Ячейки заклинаний, созданные с помощью этого умения, исчезают после завершения продолжительного отдыха.

| !Ур. ячейки заклинаний | !Очки чародейства |
| 1 | 2 |
| 2 | 3 |
| 3 | 5 |
| 4 | 6 |
| 5 | 7 |

//''Перевод ячейки заклинания в очки чародейства''//. В свой ход вы можете бонусным действием превратить одну ячейку заклинаний в очки чародейства в количестве равном уровню ячейки.

---

!!! [img[3.png]] Метамагия

<<<
Вы научились подстраивать заклинания под свои нужды. 
<<<

Выберите два варианта Метамагии из перечисленных ниже. Вы получаете ещё по одному варианту на 10 и 17 уровнях этого класса.

При сотворении заклинания может быть использован только один вариант Метамагии, если в его описании не указано обратное.

<<tabs "[tag[Метамагия]nsort[]]" "" "$:/state/tab1" "tc-vertical">>


---

!!! [img[3.png]] Увеличение характеристики

При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!! [img[4.png]] Черта
При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс. 

[[Актуальный список черт|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=670222133]]

Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

---

!!! [img[20.png]] Чародейское восстановление
Вы восстанавливаете 4 потраченных очка чародейства после завершения короткого отдыха или ночлега.
Каждый искатель приключений — представитель какого-либо класса. Класс в общих чертах описывает призвание персонажа, таланты, которыми он обладает, и тактики, к которым он чаще всего прибегает, когда исследует подземелье, сражается с монстрами или участвует в напряжённых переговорах.

Класс является основным мерилом способностей вашего персонажа. Это больше чем профессия, это призвание вашего персонажа. Класс формирует ваше представление о мире и взаимодействие с ним, а также ваше отношение к другим существам и силам мультивселенной. Воин, например, может смотреть на мир прагматично, с точки зрения стратегии и манёвров, и видеть себя всего лишь пешкой в большой игре. Жрец напротив, может видеть себя в качестве усердного служителя разворачивающегося грандиозного плана божества, или назревающего конфликта между различными богами. У воина есть связи в организациях наёмников или войсках, а жрец может знать множество священников, паладинов и последователей, разделяющих его веру.

Ваш персонаж получает ряд преимуществ от выбранного вами класса. Множество этих преимуществ являются классовыми умениями — возможностями (включая сотворение заклинаний), которые отличают вашего персонажа от представителей других классов. Вы также получаете перечень владения (умение пользоваться) доспехами, оружием, навыками, спасбросками и иногда инструментами.

Искатели приключений иногда развиваются сразу в нескольких классах. [[Плут|Плут]] может поменять жизненный путь и дать присягу [[паладина|Паладин]]. [[Варвар|Варвар]] может обнаружить скрытые магические способности и практиковаться в классе [[чародей|Чародей]], продолжая совершенствоваться как варвар. [[Эльфы|Эльф]] известны тем, что сочетают военное мастерство с магической подготовкой и развиваются как [[воины|Воин]] и [[волшебники|Волшебник]] одновременно. Опциональные правила такого комбинирования классов называются [[мультиклассированием|Мультиклассирование]].


<<<
!!!Быстрое создание
Описание каждого класса включает в себя раздел, предлагающий варианты быстрого создания персонажа этого класса, включая распределение значений характеристик, предысторию, подходящую для класса и начальные заклинания.
<<<

|!Класс |!Описание | !Кость Хитов |!Основная характеристика|
|![[Бард|Бард]] |Вдохновляющий заклинатель, черпающий мощь в музыке созидания | к8 |Харизма |
|![[Варвар|Варвар]] |Свирепый воин, способный впадать в боевую ярость | к12 |Сила |
|![[Воин|Воин]] |Мастер сражения, опытный во владении различным оружием и доспехами | к10 |Сила или Ловкость |
|![[Волшебник|Волшебник]] |Учёный заклинатель, способный манипулировать структурой реальности | к6 |Интеллект |
|![[Друид|Друид]] |Проповедник Старой Веры, владеющий силами природы — лунным светом и ростом растений, огнём и молнией, и принимающий облик животных | к8 |Мудрость |
|![[Жрец|Жрец]] |Священнослужитель-заступник, владеющий божественной магией и состоящий на службе высших сил | к8 |Мудрость |
|![[Изобретатель|Изобретатель]] |Инноватор совмещающий возможности ремёсел и магии | к8 |Интеллект |
|![[Колдун|Колдун]] |Обладатель магии, полученной посредством сделки с экстрапланарной сущностью | к8 |Харизма |
|![[Кровавый охотник|Кровавый охотник]] |Боец Ордена, использующий запретные эзотерические техники для борьбы со злом | к10 |Сила или Ловкость, и Интеллект |
|![[Монах|Монах]] |Мастер боевых искусств, использующий мощь тела в поисках физического и духовного совершенства | к8 |Ловкость и Мудрость |
|![[Паладин|Паладин]] |Святой воин, связанный духовным обетом | к10 |Сила или Ловкость, и Харизма |
|![[Плут|Плут]] |Мошенник, который использует хитрость и обман, чтобы одолеть препятствия и противников | к8 |Ловкость |
|![[Следопыт|Следопыт]] |Воитель, использующий боевое искусство и магию природы для борьбы с угрозами на окраинах цивилизации   | к10 |Сила или Ловкость, и Мудрость |
|![[Чародей|Чародей]] |Заклинатель, черпающий магию в себе, получив её в дар или как наследие  | к6 |Харизма |

---

!!!Уровень
Обычно персонаж начинает с 1 уровня и достигает новых уровней, завершая приключения и получая опыт. На 1 уровне персонаж неопытен в мире приключений, хотя он мог быть солдатом или пиратом и вести опасную жизнь и раньше.

Если вы уже знакомы с игрой или если вы присоединяетесь к текущей кампании, ваш Мастер может решить, что вы начинаете с более высоким уровнем, предполагая, что ваш персонаж уже пережил несколько опасных приключений. Персонаж более высокого уровня, как правило, начинает с минимальным значением опыта, необходимым для достижения этого уровня.

---

!!!Хиты и Кость Хитов
Хиты вашего персонажа определяют, насколько стойким является ваш персонаж в сражениях и других опасных ситуациях. Ваши хиты определяются вашей Костью Хитов.

На 1 уровне, у вашего персонажа 1 Кость Хитов, и вид этой кости определяется вашим классом. Вы начинаете с числом хитов, равным наибольшему возможному результату броска этой кости, как отмечено в описании вашего класса (вы также добавляете ваш модификатор Телосложения). Это число также является вашим максимальным значением хитов.

Во время [[отдыха|Отдых]] вы можете тратить Кости Хитов на восстановление хитов.

---

!!!Бонус мастерства
В таблице, которая находится в описании вашего класса, приведён бонус мастерства, который равен +2 для персонажа 1 уровня. Ваш бонус мастерства добавляется ко многим числам, которые вы будете записывать на свой лист персонажа:

* Броски атак при использовании оружия, которым вы владеете
* Броски атак сотворяемых вами заклинаний
* Проверки характеристик при использовании навыков, которыми вы владеете
* Проверки характеристик с инструментами, которыми вы владеете
* Спасброски, которыми вы владеете
* Сл. спасбросков сотворяемых вами заклинаний

Ваш бонус мастерства не может быть добавлен к одному броску костей или какому-либо числу более одного раза. Иногда ваш бонус мастерства может быть преобразован (увеличен или уменьшен вдвое), прежде чем будет прибавлен к броску. Если обстоятельства позволяют предположить, что ваш бонус мастерства добавляется больше одного раза к одному и тому же броску или должен быть умножен более одного раза, всё равно добавьте его только один раз, увеличьте или уменьшите вдвое только один раз.
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img width=500 class="centerme" [https://i.imgur.com/M8ADJC9.png]]

<<tabs "[tag[Кобольд - описание]]" "Описание кобольдов" "$:/state/tab1">>
[img width=340 class="centerme" [https://i.imgur.com/D0KCUvh.png]]

<<tabs "[tag[Кованый - описание]]" "" "$:/state/tab1">>
[img width=490 class="centerme" [https://i.imgur.com/b3Ob4o3.png]]

<<tabs "[[Описание колдунов]] [[Классовые умения колдунов]] [[Потусторонние покровители]]" "" "$:/state/tab1">>



<<tabs "[tag[Коллегия бардов]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
Барды Коллегии Доблести - это отважные скальды, чьи сказания не дают забыть великих героев прошлого и вдохновляют на подвиги нынешних героев. Такие барды собираются в медовых залах или вокруг походных костров, чтобы воспеть великие свершения прошлого и настоящего. Они путешествуют с целью стать очевидцами великих событий и не дать памяти о них угаснуть. Своими песнями они вдохновляют на достижения, достойные памяти предков.

---

!!! [img[3.png]] Боевое вдохновение


<<<
Вы научились вдохновлять других в бою. 
<<<


Существо, получившее от вас кость Вдохновения барда, может один раз бросить эту кость и добавить результат к своему броску урона оружием. В качестве альтернативы, если существо атаковано, оно может реакцией совершить бросок кости Вдохновения барда и добавить результат к своему КД от этой атаки. Оно может сделать это после объявления результата броска атаки.

---

!!! [img[3.png]] Дополнительные владения
Вы получаете владение средними доспехами, простым оружием и воинским оружием.

---

!!! [img[6.png]] Дополнительная атака
Если вы совершаете действие Атака, вы можете совершить две атаки вместо одной.

---

!!! [img[14.png]] Боевая магия

<<<
Вы научились сплетать использование заклинаний и оружия в одно гармоничное действие. 
<<<

Если вы действием сотворяете заклинание барда, вы можете бонусным действием совершить одну атаку оружием.
Барды Коллегии Знаний понемногу осведомлены обо всём на свете. Они собирают крупицы знаний отовсюду, будь то научные труды или крестьянские побасенки. Напевают ли они народные баллады в таверне, или исполняют изысканные композиции при дворе, эти барды используют свой талант, чтобы очаровать публику. И когда смолкают аплодисменты, публика может обнаружить себя рассказывающей все свои секреты, начиная со сплетен местного прихода, и заканчивая подробностями своей верности королю.

Лояльность таких бардов покоится на стремлении к красоте и правде, а не на верности монархам или приверженности к религиозным догматам. Дворяне, содержащие таких бардов в качестве советников или герольдов, хорошо знают, что бард скорее скажет неприятную правду, чем благоразумно промолчит.

Члены коллегии собираются в библиотеках, а иногда даже в колледжах, с настоящими классами и общежитиями. Там они делятся друг с другом знаниями. Они также посещают фестивали и общественные собрания, где могут выявлять растратчиков, разоблачать лжецов или выставлять на посмешище самоуверенных политиков.

---

!!! [img[3.png]] Дополнительные навыки
Вы получаете владение тремя навыками на ваш выбор.

---

!!! [img[3.png]] Острое словцо

<<<
Вы научились использовать собственное остроумие, чтобы отвлечь, смутить или по-другому подорвать способности и уверенность противников.
<<<

Если существо, которое вы можете видеть, в пределах 12 м от вас совершает бросок атаки, урона или проверку характеристики, вы можете реакцией потратить одну из ваших костей Вдохновения барда, и вычесть результат броска этой кости из броска этого существа. Вы можете принять решение об использовании этой способности после объявления результата броска существа. 

Существо не подвержено этому умению, если не может слышать вас, или обладает иммунитетом к очарованию.

---

!!! [img[6.png]] Дополнительные тайны магии
Вы изучаете два заклинания любого класса на ваш выбор, включая ваш собственный. Эти заклинания должны быть того уровня, который вы можете использовать, или являться заговорами.

Эти заклинания считаются для вас заклинаниями барда, и они не учитываются в общее количество известных вам заклинаний.

---

!!! [img[14.png]] Непревзойдённый навык
Если вы совершаете проверку характеристики, вы можете потратить кость Вдохновения барда и добавить результат её броска к проверке. Вы можете принять решение об использовании этой способности после объявления результата броска проверки.
Барды Коллегии Красноречия являются мастерами ораторского искусства. Убеждение считается одной из высших форм искусства, а хорошо обоснованный и искусно поданный довод может оказаться сильнее, чем объективная правда. Эти барды используют сплетение логики и риторики, чтобы склонять на свою сторону скептиков и критиканов неоспоримыми аргументами и, играя на душевных нотках, вызывать эмоции у целых аудиторий.

---

!!! [img[3.png]] Подвешенный язык

<<<
Вы мастерски находите подходящие слова в нужное время.
<<<

Когда вы совершаете проверку Харизмы (Убеждение) или Харизмы (Обман), вы можете при выпадении на к20 результата «1–9» считать, что выпало «10».

---

!!! [img[3.png]] Тревожные слова

<<<
Вы можете вплетать в свою речь магию, которая тревожит слушателя и заставляет его сомневаться в себе.
<<<

Бонусным действием вы можете потратить одно использование своего Вдохновения барда и выбрать одно видимое вами существа в пределах 12 м от вас. Совершите бросок кости Вдохновения барда. Цель должна отнять выпавший результат из следующего спасброска, который она совершит до начала вашего следующего хода.

---

!!! [img[6.png]] Неисчерпаемое вдохновение

<<<
Ваши вдохновляющие слова настолько убедительны, что другие не перестают ощущать тягу к успеху.
<<<

Когда другое существо использует вашу кость Вдохновения барда, чтобы добавить результат к проверке характеристики, броску атаки или спасброску, и бросок проваливается, оно может сохранить использованную кость Вдохновения барда.

---

!!! [img[6.png]] Всеобщая речь

<<<
Вы научились делать свою речь понятной для любого существа.
<<<

Действием вы можете выбрать существ в пределах 12 м от вас, в количестве не превышающем ваш модификатор Харизмы (минимум 1). Выбранные существа могут в течении 1 часа магическим образом понимать ваши слова, независимо от известных ими языков.

Вы не можете использовать это умение повторно, пока не завершите продолжительный отдых, только если не потратите ячейку заклинаний любого уровня, чтобы использовать его вновь.

---

!!! [img[14.png]] Заразительное вдохновение

<<<
Когда вы успешно кого-то вдохновляете, сила вашего красноречия может распространиться на кого-то ещё.
<<<

Когда существо в пределах 12 м от вас использует вашу кость Вдохновения барда, чтобы добавить результат к проверке характеристики, броску атаки или спасброску, и бросок успешен, вы можете реакцией дать одну кость Вдохновения барда другому слышущему вас существу (отличному от вас) в пределах 12 м от вас, не тратя использование Вдохновения барда.

Вы можете совершать эту реакцию количество раз не превышающее ваш модификатор Харизмы (минимум 1) и восстанавливаете все потраченные использования после завершения продолжительного отдыха.
Бардов Коллегии Мечей называют клинками, и они выступают на публике, выказывая свое мастерство обращения с оружием. Клинки выполняют такие трюки как шпагоглотание, метание и жонглирование кинжалами, и демонстрационные бои. Хоть они и используют свое оружие для развлечения, они хорошо натренированные и умелые бойцы.

Талант обращения с оружием вдохновляет многих клинков вести двойную жизнь. Клинок может использовать цирковую труппу, чтобы прикрывать такие гнусные дела как убийства, ограбления и шантаж. Другие клинки сражают злодеев, воздают по справедливости жестоким и могущественным. Многие труппы рады принять талант клинка ради зрелищности, которую он добавит представлению, но мало кто полностью доверяет клинку в своих рядах.

Клинки часто забрасывают жизнь артистов просто потому, что сталкиваются с неприятностями, после которых трудно скрыть их тайную деятельность. Клинок, пойманный на воровстве или в качестве мстителя – слишком большая обуза для большинства трупп. Со своими навыками обращения с оружием и магией, эти клинки либо работают силовиками на гильдии воров, либо начинают скитаться сами по себе как искатели приключений.

---

!!! [img[3.png]] Боевой стиль

Вы выбираете боевой стиль, соответствующий вашей специализации. Выберите один из следующих вариантов. Вы не можете выбирать один и тот же вариант боевого стиля, даже если позже у вас будет возможность выбрать ещё один стиль.

<<tabs "[tag[Боевой стиль барда мечей]nsort[]]" "" "$:/state/tab1" "tc-vertical">>


---

!!! [img[3.png]] Дополнительные владения
Вы получаете владение средними доспехами и экзотическим лёгким и одноручным клинковым оружием.

Если вы владеете клинковым оружием, то можете использовать его в качестве фокусировки для ваших заклинаний барда.

---

!!! [img[3.png]] Цветение клинков
<<<
Вы демонстрируете впечатляющее боевое мастерство и проворство. 
<<<

Когда вы совершаете действие Атака в свой ход, ваша скорость передвижения увеличивается на 2 м до конца хода, а если атака оружием, совершённая частью этого действия, попадает по существу, вы можете использовать один из следующих вариантов Цветения клинков на ваш выбор. Вы можете использовать это умение только один раз в ход. 

//''Оборонительное цветение.''// Вы можете потратить одно свое Вдохновение барда, чтобы оружие нанесло дополнительный урон по цели. Урон равен числу, которое выпало при броске кости Вдохновения барда. Вы также добавляете это число к своему КД до начала своего следующего хода. 

//''Режущее цветение.''// Вы можете потратить одно свое Вдохновение барда, чтобы оружие нанесло дополнительный урон по цели и по любому другому существу по вашему выбору, которое вы можете видеть в 1 м от себя. Урон равен числу, которое выпало при броске кости Вдохновения барда. 

//''Мобильное цветение.''// Вы можете потратить одно свое Вдохновение барда, чтобы оружие нанесло дополнительный урон по цели. Урон равен числу, которое выпало при броске кости Вдохновения барда. Вы также можете оттолкнуть цель до 2 м от себя. После этого вы незамедлительно можете использовать свою реакцию, чтобы переместиться на расстояние не превышающее вашу скорости, в незанятое пространство в 1 м от цели. 

---

!!! [img[6.png]] Дополнительная атака
Если вы совершаете действие Атака, вы можете совершить две атаки вместо одной.

---

!!! [img[14.png]] Мастерское цветение
Если вы используете Цветение клинков, вы можете совершить бросок к6 и использовать его результат вместо траты кости Вдохновения барда.
Коллегия Очарования открыта для тех бардов, чьё мастерство было взращено в красочном Царстве Фей или под руководством того, кто проживал там. Обученные сатирами, эладринами, и другими фейскими существами, эти барды учатся использовать свою магию, чтобы восхищать и очаровывать окружающих. 

К бардам этой коллегии относятся со смесью благоговения и страха. Их выступления – легендарны. Барды этой коллегии настолько красноречивы, что одной их песни или речи может хватить, чтобы убедить похитителей отпустить барда нетронутым или успокоить разъяренного дракона. Но та же магия, что помогает им усмирять зверей, может и подчинять разумы людей. Недобрые барды этой коллегии могут неделями паразитировать на выбранном ими сообществе, используя свои чары, чтобы превратить гостеприимных хозяев в рабов своей воли. Героические барды этой коллегии вместо этого используют свою силу, чтобы радовать угнетенных и ослаблять диктаторов. 


---

!!! [img[3.png]] Завораживающее выступление

<<<
Вы можете наполнить свое выступление притягательными чарами фей. 
<<<

Если вы выступаете как минимум в течение 1 минуты, то можете попытаться вызвать изумление у публики своим пением, чтением стихотворения или танцем. В конце выступления выбранные вами гуманоиды в пределах 12 м от вас, которые смотрели или слушали всё выступление, в количестве не превышающем ваш модификатор Харизмы (минимум 1) должны преуспеть в спасброске Мудрости против вашей Сл заклинаний или будут [[очарованы|Очарованный]] вами. 

[[Очарованные|Очарованный]] таким образом существа боготворят вас и говорят о вас крайне восторженно с любым заговорившим с ними. Они мешают вашим недругам, хотя при этом избегают насилия, если только к этому моменту уже и так не были настроены драться за вас. 

Эффект на цели заканчивается через 1 час или если цель получает любой урон, вы атакуете её, или если она замечает, как вы атакуете или наносите урон кому-то из её союзников.

Если цель преуспеет в спасброске, то не ощущает того, что вы пытались ее очаровать. 

Вы не можете использовать это умение повторно, пока не завершите короткий или продолжительный отдых.


---

!!! [img[3.png]] Мантия вдохновения 

<<<
Вступая в Коллегию Очарования, вы получаете возможность слагать песни, переплетённые с чарами фей, которые наполняют ваших союзников отвагой и проворством. 
<<<

Бонусным действием вы можете потратить одно использование своего Вдохновения барда, чтобы придать себе поразительный внеземной облик. Когда вы делаете это, выберите союзников, которых вы можете видеть, и которые могут видеть вас в пределах 12 м от вас, в количестве не превышающем ваш модификатор Харизмы (минимум 1). 

Каждая выбранная цель получает 5 временных хитов и может немедленно использовать свою реакцию, чтобы переместиться на расстояние, не превышающее её скорость, не провоцируя атак. 

Количество временных хитов увеличивается, когда вы достигаете определенных уровней в этом классе, увеличиваясь до 8 на 5 уровне, 11 на 10 уровне и 14 на 15 уровне. 



---

!!! [img[6.png]] Мантия величия 

<<<
Вы получаете возможность укутаться в чары фей, заставляющие других хотеть служить вам. 
<<<

Бонусным действием вы можете сотворить заклинание //приказ// без траты ячейки заклинания и принимаете облик неземной красоты на 1 минуту или пока не завершится ваша концентрация (как если бы вы концентрировались на заклинании). В течение этого времени вы можете сотворять заклинание //приказ// бонусным действием в каждый свой ход, не тратя ячейку заклинания. 

Любое существо, [[очарованное|Очарованный]] вами, автоматически проваливает спасбросок против //приказа//, которое вы сотворяете с помощью этого умения 

Вы не можете использовать это умение повторно, пока не завершите продолжительный отдых.

---

!!! [img[14.png]] Несокрушимое величие 

Ваша внешность приобретает потусторонние черты, заставляя вас постоянно выглядеть диким и прекрасным. 

Кроме того, бонусным действием вы можете принять магически величественный вид на 1 минуту или пока вы не станете [[недееспособны|Недееспособный]]. В течение этого времени, когда существо пытается атаковать вас в первый раз за ход, оно должно совершить спасбросок Харизмы против вашей Сл заклинаний. При провале оно не может атаковать вас в этот ход и должно выбрать новую цель для атаки, иначе атака будет потеряна. При успешном спасброске оно может атаковать вас в этот ход, но получает помеху на любые спасброски, которые будет совершать против ваших заклинаний в ваш следующий ход. 

Вы не можете использовать это умение повторно, пока не завершите короткий или продолжительный отдых.
[img [https://i.imgur.com/lYaBvye.png]]
Многие рады приветствовать бардов в своём обществе, и представители Коллегии Шёпотов используют это в своих интересах. С виду они подобны всем прочим бардам: делятся новостями, поют песни и рассказывают истории своей аудитории. На самом же деле Коллегия Шёпотов учит своих учеников, что они должны быть подобны волкам среди овец. Эти барды используют свои знания и магию, чтобы раскрывать чужие тайны и оборачивать их против других через шантаж и угрозы. 

Большинство прочих бардов ненавидят Коллегию Шёпотов, рассматривая их как паразитов, которые используют репутацию бардов, чтобы обрести богатство и власть. По этой причине барды этой коллегии редко раскрывают свою истинную природу. Как правило, они утверждают, что являются представителем какой-либо другой коллегии, или сохраняют свою истинную природу втайне с целью проникновения и эксплуатации королевских дворов и других властных структур.

---

!!! [img[3.png]] Психические клинки

<<<
При вступлении в Коллегию Шёпотов вы получаете возможность сделать своё оружием магически токсичной для разума существа. 
<<<

Когда вы попадаете по существу атакой оружием, вы можете потратить одно Вдохновение Барда и нанести цели дополнительные 2к6 психического урона. Вы можете использовать эту способность один раз за раунд в свой ход. 

Психический урон увеличивается, когда вы получаете определенный уровень в этом классе, увеличиваясь до 3к6 на 5 уровне, 5к6 на 10 уровне и 8к6 на 15 уровне. 

---

!!! [img[3.png]] Слова ужаса

<<<
Вы научились наполнять кажущиеся безобидными слова коварной магией, которая вызывает ужас. 
<<<

Если вы разговариваете с гуманоидом наедине, в течение по крайней мере 1 минуты, то можете попытаться посеять семя паранойи и страха в его разуме. В конце беседы цель должна преуспеть в спасброске Мудрости против вашей Сл заклинания или будет [[испугана|Испуганный]] вами или другим существом по вашему выбору. 

Эффект на цели заканчивается через 1 час или если цель получает любой урон, или если она замечает, что её союзники атакованы или получают урон.

Если цель преуспеет в спасброске, то не ощущает того, что вы пытались ее испугать.

Вы не можете использовать это умение повторно, пока не завершите короткий или продолжительный отдых.

---

!!! [img[6.png]] Мантия шёпотов 

<<<
Вы получаете возможность перенимать личность гуманоида. 
<<<

Когда гуманоид умирает в пределах 6 м от вас, вы реакцией можете магическим образом поймать его тень. Вы удерживаете эту тень, пока не завершите короткий или продолжительный отдых. 

Действием вы можете использовать тень. Когда вы это делаете, она исчезает, магически превращаясь в маскировку, которая появляется на вас. Теперь вы выглядите как этот мертвый гуманоид, но кажетесь живым и здоровым. Маскировка длится 1 час или пока вы не окончите её бонусным действием. 

Находясь под этой маскировкой вы получаете доступ ко всей информации, которой это существо могло бы свободно поделиться со случайным знакомым. Эта информация включает в себя общие данные о его биографии и личной жизни, но не его секреты. Этой информации достаточно для того, чтобы вы смогли выдать себя за эту личность, используя его воспоминания.

Другие существа могут обнаружить вашу истинную сущность, совершив проверку Мудрости (Проницательность) против вашей проверки Харизмы (Обман), вы получаете бонус +5 к своей проверке. 

Когда вы ловите тень этим умением, вы не можете поймать другую тень, пока не завершите короткий или продолжительный отдых.


---

!!! [img[14.png]] Знание тени

<<<
Вы получаете способность вплетать в свою речь тёмную магию и дергать за ниточки самых глубоких страхов существа.
<<<

Действием, вы магическим образом нашёптываете фразу, которую слышит только одно существо по вашему выбору в пределах 6 м от вас. Цель должна совершить спасбросок Мудрости против вашей Сл заклинания. Цель автоматически преуспевает в броске, если она не разговаривает с вами хотя бы на одном общем языке, или не может слышать вас. В случае успешной проверки, ваш шёпот звучит как неразборчивое бормотание и не имеет никакого эффекта. 

Если цель проваливает спасбросок, то она [[очарована|Очарованный]] вами на следующие 8 часов или пока вы или ваши союзники не атакуют ее или не причинят ей урон.

Цель интерпретирует шёпот как описание самого страшного её секрета. Хотя вы не узнаете этой тайны, цель убеждена в том, что вы знаете её. [[Очарованное|Очарованный]] таким образом существо подчиняется вашим командам из страха, что вы раскроете его тайну. Оно не будет рисковать своей жизнью ради вас или сражаться за вас, если уже не было склонно делать это. Оно оказывает вам услуги и преподности подарки, которые могло бы предложить близкому другу. 

Когда эффект заканчивается, существо не осознаёт, почему настолько вас боялось. 


Вы не можете использовать это умение повторно, пока не завершите продолжительный отдых.
[img [https://i.imgur.com/lYaBvye.png]]
Комфортное существование означает, что вы можете позволить себе хорошую одежду и поддерживаете своё снаряжение в хорошем состоянии. Вы живёте в небольшом домике с соседями среднего класса или в личной комнате на хорошем постоялом дворе. Вы ведёте дела с купцами, опытными торговцами и военными офицерами.
[img width=220 class="centerme" [https://i.imgur.com/JmeNuzU.png]]

Коренастые полурослики выносливее других и обладают некоторой устойчивостью к ядам. Поговаривают, что в их жилах течёт толика дварфской крови. В мире Забытых Королевств таких полуросликов зовут сильными сердцем, и чаще всего они встречаются на юге. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Телосложения увеличивается на 1. |
|^Второй завтрак |^Вы владеете инструментами повара. Вы добавляете удвоенный бонус мастерства вместо обычного к проверкам, связанным с приготовлением пищи. |
|^Выносливость коренастых |^Вы владеете навыком Выносливость. |
|^Устойчивость коренастых |^Вы совершаете с преимуществом спасброски от яда и получаете сопротивление к урону ядом. |

Короткий отдых - это привал продолжительностью не менее 1 часа, в течении которого персонажи останавливаются, чтобы поесть, попить, обработать раны или заняться другой ненапряжённой деятельностью. Более сложные задачи могут потребовать разбивки лагеря или продолжительного отдыха. Вы не можете получить преимущества более чем от одного короткого отдыха в сутки. Во время короткого отдыха вы можете:

* Потратить одну или несколько Костей Хитов.
* Утолить жажду и/или голод.
* Облегчить действие яда или излечить болезнь набором травника.
* Облегчить боль комплектом целителя или набором травника.
* Восстановить расовые или классовые умения. Сверьтесь со своим листом персонажа, чтобы определить, какие особенности или умения вы восстанавливаете по окончанию короткого отдыха.
* Читать, изучать или исследовать что-то в пределах досягаемости, например, зашифрованную книгу, необычную резьбу на монолите или неопознанный магический предмет.
* Опознать один магический предмет.
* Настроиться на один магический предмет.
Вы родились в кочевом племени. Вы путешествовали с места на место, живя за счет земли вместе со своими соплеменниками.

* ''Владение навыками:'' Природа, Уход за животными
* ''Владение инструментами:'' [[Набор травника|Набор травника]]
* ''Языки:'' Один на ваш выбор
* ''Экипировка:'' Набор травника, небольшое украшение, характерное для вашего племени, охотничий капкан, комплект одежды селянина и кошель с 5 см

!!!Умение: В дикой природе как дома
Дикая природа - это ваш дом, и вам удобно в нем обитать. Вы можете найти место, где можно спрятаться, отдохнуть или восстановить силы, находясь в дикой природе. Это место отдыха достаточно надежно, чтобы скрыть вас от большинства естественных угроз. Угрозы сверхъестественные, магические или активно ищущие вас, всё ещё могут сделать это, но с трудом, в зависимости от характера угрозы (на усмотрение Мастера). Однако эта способность не защищает и не скрывает вас от заклинаний, ментального поиска или угроз, которым не обязательно использовать пять органов чувств для того, чтобы выследить вас.

!!!Персонализация
Кочевники посещают цивилизацию только в случае необходимости. Вы общительны внутри своего племени и с племенами других кочевников. Однако другие сообщества обычно либо заставляют вас насторожиться, либо вызывают недоумение. Может быть, именно это замешательство побудило вас отправиться на поиски приключений? С другой стороны, вы яростно защищаете свое племя и преданы ему. Возможно, именно эта преданность заставила вас отправиться в путешествие - по собственной воле или по приказу вождей вашего племени.

| !к8 |!Черта характера |
| 1 |Я охотно окунаюсь в неизвестность. |
| 2 |Деревни, поселки и города мне не подходят. Я предпочитаю в любой день оказаться в дикой местности. |
| 3 |Я выполняю свои задачи эффективно, используя как можно меньше ресурсов. |
| 4 |Мне трудно долго оставаться на одном месте. |
| 5 |Я громко хвастаюсь своим племенем при каждом удобном случае. |
| 6 |Я бесстрашен перед лицом диких существ.|
| 7 |Я тихий и сдержанный, но наблюдательный. Ничто не ускользает от моего внимания. |
| 8 |Мое слово - моя опора. Я доведу обещание до конца, даже если оно противоречит моим убеждениям. |

| !к6 |!Идеал |
| 1 |''Родство. ''Семья - самое важное в жизни. Пусть я нахожусь далеко от своих родных, но семейные узы должны быть защищены и в жизни других людей |
| 2 |''Сохранение. ''Природа не должна подвергаться разрушению со стороны наступающей цивилизации.  |
| 3 |''Жажда странствий. ''Человек должен расширять свои горизонты, познавая мир и исследуя его. |
| 4 |''Изоляция.'' Мое племя и его пути должны быть защищены и ограждены от внешнего влияния. |
| 5 |''Защита. ''Угрозы земле и людям должны быть устранены любой ценой. |
| 6 |''Принадлежность. ''У всех существ есть свое место в мире, поэтому я стремлюсь помочь другим найти свое. |

| !к6 |!Привязанность |
| 1 |Я очень хочу вернуться к своему племени и семье, которую покинул, но не могу, пока мои обязательства не будут выполнены. |
| 2 |Захватчики, вторгшиеся на мою родину, украли одного из людей моего племени. Я не буду знать покоя, пока не найду его. |
| 3 |Присутствие опасной твари на моей родине уничтожило ценную территорию и привело к смертям в моем племени. Это существо должно заплатить за то, что оно сделало. |
| 4 |Я ношу с собой безделушку, которая духовно и эмоционально связывает меня с моим народом и моим домом. |
| 5 |Во время скитаний моего племени я обнаружил в холмах странную реликвию. Я должен узнать, что это такое. |
| 6 |Один из кланов другой расы одарил меня знаком родства. |

| !к6 |!Слабость |
| 1 |Я втягиваю себя и своих друзей в различный ситуации, редко задумываясь о последствиях. |
| 2 |Незнакомые люди и окружение действуют мне на нервы. |
| 3 |Я совершенно не терплю тугодумов и тех, кто проявляет нерешительность. |
| 4 |Желание испытать что-то новое заставляет меня делать небезопасный выбор. |
| 5 |Я слишком бережно отношусь к природе, иногда в ущерб своим спутникам и себе. |
| 6 |Отсутствие житейской жилки часто становится моей слабостью в социальных, коммерческих и недружественных ситуациях. |
[img width=330 class="centerme" [https://i.imgur.com/CbqruCU.png]]

<<tabs "[[Описание кровавых охотников]] [[Классовые умения кровавых охотников]] [[Ордены кровавых охотников]]" "" "$:/state/tab1">>
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
<<tabs "[tag[Круг друидов]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
Вы можете попытаться проскочить сквозь пространство враждебного существа,  уклоняясь от него.

Вы совершаете действием или бонусным действием проверку Ловкости (Акробатика), противопоставленную результату Ловкости (Акробатика) цели. 

При успехе, вы можете в этом ходу один раз переместиться сквозь пространство цели и не провоцируете от неё атаку, покидая её досягаемость. При провале, вы также можете один раз переместиться сквозь пространство цели, считая его труднопроходимой местностью, но это перемещение провоцирует атаку от цели.
Кутёж – это привычная деятельность во время простоя для многих персонажей. Кто не хочет отдохнуть с друзьями в таверне и чего-нибудь выпить между приключениями? 

//''Ресурсы''//. Кутёж включает в себя неделю вкусной еды, крепких напитков и общения. Персонаж может кутить с простонародьем, зажиточными людьми или знатью. Кутёж с простонародьем обойдётся в 10 см, а с зажиточными людьми – в 50. Для кутежа со знатью необходим доступ в местный высший свет, а затраты составят 250 см в неделю. 

У персонажа благородного происхождения такой доступ есть по умолчанию, но, чтобы он был и у других персонажей, им необходимы определённые контакты. Другой способ – использовать набор для грима и пройти проверку навыка Обман, чтобы выдать себя за аристократа из отдалённого города. 

//''Определение результата''//. После недели кутежа персонаж может попытаться обзавестись контактами в выбранном социальном классе. Персонаж совершает проверку Харизмы (Убеждение). 

| !Результат |!Последствия |
| 1-5 |Персонаж получил один враждебный контакт. |
| 6-10 |Персонаж никого не встретил. |
| 11-15 |Персонаж получил один дружественный контакт. |
| 16-20  |Персонаж получил два дружественных контакта. |
| 21+ |Персонаж получил три дружественных контакта. |

Контакты – это персонажи Мастера, у которых теперь есть связь с персонажем игрока. Каждый из них либо доброжелательно настроен по отношению к персонажу, либо по какой-то причине обижен на него. Враждебный контакт действует против персонажа, по возможности ему мешая, но не опускается до преступлений или насилия. Дружественные контакты – это друзья, которые готовы помочь персонажу, но не будут для этого рисковать жизнью. 

К контактам среди простонародья относятся преступники, рабочие, наёмники, городские стражники и другие люди, посещающие самые неприглядные таверны города. 

Контакты среди зажиточных людей — это члены гильдий, волшебники, городские чиновники и прочие люди, посещающие заведения с хорошей репутацией. 

Контакты среди знати — это аристократы и их слуги. Кутёж с такой компанией включает в себя банке- ты, званые ужины и тому подобное. 

После того как контакт помог или помешал персонажу, персонаж снова должен покутить, чтобы вернуть доброе расположение контакта. Контакт помогает вам один раз, а не пожизненно. Контакт остаётся дружественным, что может повлиять на игру и его взаимодействие с персонажами, но не гарантирует помощи. 

//''Осложнения''//. Персонажи, которые кутят, рискуют ввязаться в драку, стать объектом неприятных слухов и испортить свою репутацию в городе. Согласно правилам, персонаж может получить осложнение с вероятностью 10% после недели кутежа. 

''Осложнения при кутеже с простонародьем''

| !к8 |!Осложнение |
| 1 |Карманник украл у вас 1к10 × 5 см. |
| 2 |После драки в таверне у вас остался шрам. |
| 3 |Вы не помните точно, что делали вечером, но явно что-то очень и очень незаконное. |
| 4 |Вам запрещено появляться в таверне из-за разгульного поведения. |
| 5 |После пары-тройки кружек, вы поклялись на главной площади, что отправитесь на выполнение опасного задания. |
| 6 |Сюрприз! Вы теперь женаты/замужем. |
| 7 |Бегать голым по улице казалось лучшей идеей на свете! |
| 8 |Все зовут вас каким-то странным смущающим прозвищем, например, Пьяной кудряшкой или Убийцей скамеек, и никто не говорит, почему. |

''Осложнения при кутеже с зажиточными людьми''

| !к8 |!Осложнение |
| 1 |Вы случайно оскорбили главу гильдии, и гильдия не будет вести с вами дел, пока вы публично не извинитесь. |
| 2 |Вы поклялись выполнить некое задание для храма или гильдии. |
| 3 |После неуместного поступка о вас говорит весь город. |
| 4 |Особо неприятная личность по уши влюбилась в вас. |
| 5 |Вы нажили себе врага в лице местного мага. |
| 6 |Вы согласились помочь в проведении местного фестиваля, представления или аналогичного мероприятия. |
| 7 |Напившись, вы произнесли тост, который спровоцировал скандал с местными. |
| 8 |Вы потратили дополнительные 100 см, пытаясь произвести впечатление на людей. |

''Осложнения при кутеже со знатью''

| !к8 |!Осложнение |
| 1 |Одна из благородных семей настойчиво хочет сочетать вас браком с одним из своих наследников. |
| 2 |Вы споткнулись и упали во время танца, и теперь ваш конфуз у всех на устах. |
| 3 |Вы согласились взять на себя долги одного аристократа. |
| 4 |Один из рыцарей бросил вам вызов. |
| 5 |Вы нажили себе врага в лице местного аристократа. |
| 6 |Один занудный аристократ настаивает, чтобы вы посещали его каждый день и слушали его долгие и утомительные рассуждения о магии. |
| 7 |Вы оказались центром различных постыдных слухов. |
| 8 |Вы потратили дополнительные 500 см, пытаясь произвести впечатление на людей. |
Доспехи, изготовленные из лёгких и тонких материалов, предпочитают ловкие искатели приключений, поскольку те предоставляют защиту, и при этом не ограничивают подвижность. Если вы носите лёгкий доспех, вы при определении Класса Доспеха добавляете модификатор Ловкости к базовому числу, предоставленному доспехом.

//''Дублет''//. Толстая кожаная куртка со стёганой подкладкой и стоячим воротником, защищающим шею. Используется как поддоспешник или самостоятельный доспех.

//''Кожаный''//. Нагрудник и плечи этого доспеха изготовлены из кожи, вываренной в масле. Остальные части доспеха сделаны из более мягких и гибких материалов.

//''Баклер''//. Маленький (20−40 см в диаметре, чаще всего металлический круглый щит с округлым выступом (умбоном) в центре. ''Атаки, совершаемые баклером, не лишают вас его бонуса к КД.''
[img width=340 class="centerme" [https://i.imgur.com/xOYifys.png]]

Легконогие полурослики умеют отлично скрываться, в том числе используя других существ как укрытие. Они приветливы и хорошо ладят с другими. В мире Забытых Королевств легконогие являются самой распространённой ветвью полуросликов. 

Легконогие более других склонны к перемене мест, и часто селятся по соседству с другими народами, или ведут кочевую жизнь. В мире Серого Ястреба таких полуросликов называют мохноногими или великанчиками. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Харизмы увеличивается на 1. |
|^Естественная скрытность |^Вы можете предпринять попытку скрыться даже если заслонены только существом, превосходящими вас в размере как минимум на одну категорию. |
|^Лёгкая поступь  |^Если вы не носите обуви, ваши шаги не издают звука. Кроме того, вы можете перемещаться осторожно. Каждый метр такого перемещения стоит один дополнительный метр, а перемещение таким образом не активирует ловушки и прочие механизмы, которые срабатывают под давлением или весом. |

[img width=420 class="centerme" [https://i.imgur.com/v6seN9i.png]]

Лесные гномы обладают природными способностями к иллюзии, и унаследовали проворство и скрытность. В мирах D&D лесные гномы встречаются редко, и являются скрытным народом. Они собираются в спрятанные в глубинах лесов общины, и используют иллюзию и обман, чтобы укрыться от опасности или скрыть свой побег в случае обнаружения. Лесные гномы обычно дружелюбны с другими добрыми лесными народами, и считают эльфов и добрых фей своими главными союзниками. Эти гномы также дружат с мелкими лесными зверушками, которые предупреждают их об опасности.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 1. |
|^Общение с маленькими зверьми |^С помощью звуков и жестов вы можете передавать простые понятия Маленьким или ещё меньшим зверям. Лесные гномы любят животных и часто держат белок, барсуков, кроликов, кротов, дятлов и других животных в качестве питомцев. |
|^Природная иллюзия |^Вам известен заговор //малая иллюзия//. Базовой характеристикой для его использования является Интеллект. |
|^Инстинкт разведчика |^Лесные гномы яро оберегают места своего обитания и могут сказать, какая веточка не на своём месте. Вы владеете навыками Выживание и Природа. Вы совершаете проверки Мудрости (Выживания), с целью выслеживания существа в лесах, лугах, холмах и джунглях, с преимуществом. |

[img width=518 class="centerme" [https://i.imgur.com/mG5qGKJ.jpg]]

Поскольку вы — лесной эльф, у вас обострённые чувства и интуиция, и ваши стремительные ноги несут вас быстро и незаметно через ваши родные леса. Эта категория включает диких эльфов Серого Ястреба и кагонести из Саги о Копье, а также расы, называемые лесными эльфами Серого Ястреба и Забытых Королевств. В Фаэруне лесные эльфы (также называемые дикими или зелёными) являются затворниками, не доверяющими не-эльфам. 

Кожа лесных эльфов, как правило, имеет медный оттенок, иногда со следами зелёного. У них часто коричневые и чёрные волосы, но иногда они бывают светлого или бронзового оттенков. У них зелёные, карие или орехового цвета глаза. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 1. |
|^Быстрые ноги |^Ваша базовая скорость перемещения увеличивается до 7 метров. |
|^Маскировка в дикой местности |^Вы можете предпринять попытку спрятаться, даже если вы слабо заслонены листвой, сильным дождём, снегопадом, туманом или другими природными явлениями. |
|^Эльфийская боевая подготовка |^Вы владеете воинским лёгким и одноручным клинковым оружием, а также простыми и воинскими луками. |
Вы можете попытаться обмануть противника ложным выпадом.

Вы совершаете действием или бонусным действием бросок рукопашной атаки, противопоставленную пассивной проницательности цели. Бросок такой атаки должен использовать модификатор Ловкости.

При успехе, вы совершаете следующий бросок атаки по цели с преимуществом. При провале, вы совершаете следующий бросок атаки по цели с помехой и не можете преуспеть в ложном выпаде против неё до конца сражения.
<<<
Дух лося делает вас необычайно быстрым.
<<<

Пока вы пребываете в ярости и не носите тяжёлых доспехов, ваша скорость ходьбы увеличивается на 3 м.
[img width=400 class="centerme" [https://i.imgur.com/sgo3z9E.png]]

<<tabs "[tag[Людоящер - описание]]" "Описание людоящеров" "$:/state/tab1">>
[img  class="centerme" [https://i.imgur.com/hdpD9dc.png]]

Людоящеры-аспиды - самые маленькие представители людоящеров, известные своей способной изменять окрас кожей. Они предпочитают скрытность и быстрые нападения из засады открытым сражениям, и являются мастерами камуфляжа и применения ядов. Используя и то и другое со смертоносным эффектом, людоящеры-аспиды получают удовольствие от терпеливого выслеживания своей добычи. Их решимость непоколебима - поставив перед собой задачу, они сосредотачивают всё своё внимание на том, чтобы добиться цели. Аспиды обитают в укромных местах и охраняют секрет расположения своих жилищ ценой своей жизни. Они не делают различий между нарушителями их границ, каждый вторженец погибает одинаково.

|!Особенность |!Описание |
|^Размер |^Рост людоящеров-аспидов варьируется между 90 и 120 см, а вес от 30 до 45 кг. Ваш размер — Маленький. |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 1. |
|^Аспид |^Вы владеете инструментами отравителя. Кроме того, частью продолжительного отдыха вы можете нацедить 1к4 + ваш мод. Телосложения доз (100 г) яда из собственных желез. Вы можете действием покрыть одной такой дозой одно колющее или рубящее рукопашное оружие, либо три боеприпаса. Существо, по которому попадает атака отравленным оружием или боеприпасом, должно преуспеть в спасбросоке Телосложения (Сл = 8 + ваш мод. Телосложения + ваш бонус мастерства), иначе оно получает 1к4 урона ядом. Нанесённый яд эффективен 1 минуту, после чего высыхает. Созданные этой особенностью дозы яда теряют свои свойства и становятся бесполезными спустя 1 неделю после создания. |
|^Пронырливость |^Вы можете проходить сквозь пространство, занятое существами, чей размер больше вашего. |
|^Смена окраса |^Вы способны изменять окрас своей чешуи и выделять маслообразную субстанцию, которая реагирует на пигментацию вашей чешуи. Нанесение этой субстанции на одежду или доспехи, позволяет им изменять цвет, аналогично вашей чешуе. Вы можете предпринять попытку спрятаться, прижавшись к твёрдой поверхности, которая своими размерами не меньше вас, даже если вы при этом находитесь на виду. Если вы пытаетесь спрятаться вне сражения и при этом не перемещаетесь, и не совершаете действий, вы совершаете проверку Ловкости (Скрытность) с преимуществом.  |
|^Хищник |^Вы владеете навыком Выживание. Вы совершаете проверки Мудрости (Выживание) с целью обнаружения следов и охоты на дичь с преимуществом. |
|^Ядовитая пасть |^Ваши когти и зубы не так сильны, как у ваших более крупных сородичей, но специальные железы в вашей пасти способны вырабатывать сильный яд. Вы можете использовать свою пасть в качестве природного оружия и совершать ей безоружные удары. Если вы совершаете атаку укусом, вы наносите колющий урон, вместо дробящего урона, обычного для безоружного удара, а существо, по которому попала эта атака, должно совершить спасбросок Телосложения (Сл = 8 + ваш мод. Телосложения + ваш бонус мастерства), получая 2к4 урона ядом при провале, или половину этого урона при успехе. Урон от яда увеличивается на 1к4, когда вы достигаете 6 уровня (3к4), 11 уровня (4к4) и 16 уровня (5к4). |
[img width=280 class="centerme" [https://i.imgur.com/uk7RN6B.png]]

Людоящеры-острозубы - самые многочисленные, изобретательные и сфокусированные на выживании представители людоящеров. Некоторые называют их трусливыми оппортунистами, но они лишь оценивают ситуацию с расчётом на самый высокий шанс выживания. 

Являясь более цивилизованными представителями своей расы, людоящеры-острозубы
обитают в крупных водоёмах или болотах, либо кочуют по равнинам верхом на динозаврах. Сельскому хозяйству они предпочитают охоту и рыбалку, а глиняным хижинам - вигвамы.

Многие племена острозубов сформировали крепкие дружественные отношения со своими соседями-нелюдоящерами. Другие гуманоидные расы называют этот вид "высшими людоящерами" за их способность понимать чужие эмоции и наличие своего кодекса чести. 

|!Особенность |!Описание |
|^Размер |^Рост людоящеров-острозубов варьируется между 180 и 210 см, а вес от 80 до 120 кг. Ваш размер — Средний. |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 1. |
|^Голодная пасть |^В сражении вы можете впасть в неистовство голодного хищника. Бонусным действием, вы можете совершить специальную атаку укусом. Если атака нанесла урон, то урон наносится как обычно для укуса, а, если цель - живое существо из плоти и крови, вы получаете временные хиты равные нанесённому урону. Вы не можете использовать эту особенность снова, пока не завершите короткий или продолжительный отдых.  |
|^Земноводный охотник |^Ваша скорость плавания равна вашей скорости ходьбы, и вы можете задерживать дыхание на 15 минут. Кроме того, вы совершаете проверки Ловкости (Скрытность), находясь под водой, с преимуществом. |
|^Зубы и когти |^Ваши зубы и когти являются природным оружием, которым вы можете совершать безоружные удары. Если вы совершаете атаку когтями, вы наносите рубящий урон, равный 1к4 + ваш мод. Силы, вместо дробящего урона, обычного для безоружного удара. Атаки вашей зубастой пастью следуют тем же правилам, что и когти, но наносят колющий урон, равный 1к4 + ваш мод. Силы. Кость урона укусом увеличивается на 1к4, когда вы достигаете 6 уровня (2к4), 11 уровня (3к4) и 16 уровня (4к4). |
|^Познания охотника |^Вы владеете одним из следующих навыков: Внимательность, Выживание, Природа, Скрытность или Уход за животными |

[img width=400 class="centerme" [https://i.imgur.com/h6tBqpo.png]]

Людоящеры-чернобрюхи - самые крупные, сильные и агрессивные представители людоящеров. Племена чернобрюхов активно пытаются расширять свою территорию, убивая всех, кто пытается этому препятствовать. Они совершают вылазки под покровом ночи, полагаясь на своё врождённое сумеречное зрение. Челюсти людоящеров-чернобрюхов сжимают попавшихся в них несчастных словно тиски и обладают достаточной силой, чтобы разорвать жертву на части. Чернобрюхи не терпят использование хитрых уловок и ловушек, считая, что эти приёмы годятся только для мелких слабаков. Вместо этого они предпочитают бить сильно и сильно.

|!Особенность |!Описание |
|^Размер |^Рост людоящеров-чернобрюхов варьируется между 210 и 250 см, а вес от 140 до 200 кг. Ваш размер — Средний. |
|^Увеличение характеристик |^Значение вашей Силы увеличивается на 1. |
|^Зубы и когти |^Ваши зубы и когти являются природным оружием, которым вы можете совершать безоружные удары. Если вы совершаете атаку когтями, вы наносите рубящий урон, равный 1к4 + ваш мод. Силы, вместо дробящего урона, обычного для безоружного удара. Атаки вашей зубастой пастью следуют тем же правилам, что и когти, но наносят колющий урон, равный 1к6 + ваш мод. Силы. Кость урона укусом увеличивается на 1к6, когда вы достигаете 6 уровня (2к6), 11 уровня (3к6) и 16 уровня (4к6). |
|^Мёртвая хватка |^Вы можете совершать особую атаку [[Захват|Захват]], используя свою пасть вместо свободной руки. Пока вы удерживаете цель в захвате таким образом, вы совершаете броски атаки укусом по ней с преимуществом, но не можете использовать укус против других целей. |
|^Мощное телосложение |^Вы считаетесь на один размер больше, когда определяется ваша грузоподъемность и вес, который вы можете толкать, тянуть или отрывать от земли, а также при совершении вами [[особых атак|Атака]] и [[Пробегания|Пробегание *]]. Кроме того, вы совершаете проверки и спасброски Силы против немагических эффектов, делающих вас [[схваченным|Схваченный]], [[опутанным|Опутанный]] или [[сбитым с ног|Сбитый с ног / Лежащий ничком]], с преимуществом. |
|^Сумеречное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
<div class="tc-table-of-contents">
<<toc-selective-expandable "Магические предметы">>
</div>
<<tabs "[tag[Магическая традиция]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
---

!!! [img[1.png]] Заклинания источника
Вы узнаёте заклинания источника на указанных уровнях чародея. Заклинания источника считаются для вас заклинаниями чародея и не учитываются при подсчёте количества известных вам заклинаний чародея.

Когда вы получаете уровень в этом классе, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний волшебника, колдуна или чародея того же уровня. Новое заклинание должно принадлежать школе Иллюзии или Некромантии.

| !Ур. |!Заклинания |
| !1 |//вызов страха//, //иссушающий укол//, //маскировка// |
| !3 |//бесследное передвижение//, //луч слабости// |
| !5 |//покров духов//, //призыв порождения теней// |
| !7 |//мираж//, //облачение тени// |
| !9 |//поток негативной энергии//, //сотворение// |

---

[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img width=320 class="centerme" [https://i.imgur.com/QFIlvVv.png]]

Мглистые драконорождённые - единственная разновидность драконорождённых, обладающая хвостами. 

|!Особенность |!Описание |
|^Ночное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение, и в темноте так, как будто это тусклое освещение. В темноте вы не можете различать цвета, только оттенки серого. |
|^Хвост |^Удары вашего хвоста нарушают равновесие противника. Бонусным действием вы можете с помощью вашего хвоста совершить особую атаку Толкание по существу в пределах 1 м от вас. Вы можете использовать эту особенность количество раз равное вашему модификатору Силы (минимум 1). Вы восстаналиваете использования этой особенности, когда завершаете продолжительный отдых. |
<<<
Дух медведя делает вас достаточно крепким, чтобы выдержать любое испытание.
<<<

Пребывая в ярости, вы получаете сопротивление всем видам урона кроме урона психической энергией.
[img width=500 class="centerme" [https://i.imgur.com/klcLfUQ.png]]

<<tabs "[tag[Медвежатник - описание]]" "Описание медвежатников" "$:/state/tab1">>
Вы получаете бонус +2 к броскам урона метательных атак оружием.
Вы можете действием сконцентрировать внимание на одной цели, чтобы лучше совершать провоцированные атаки по ней.

Вы получаете дополнительную реакцию, которую вы можете использовать только для совершения провоцированной атаки по отмеченной цели. Эта атака совершается с преимуществом.

Вы не можете использовать реакции против враждебных существ, кроме отмеченной цели, до конца своего следующего хода.
---

!!! [img[1.png]] Заклинания источника
Вы узнаёте заклинания источника на указанных уровнях чародея. Заклинания источника считаются для вас заклинаниями чародея и не учитываются при подсчёте количества известных вам заклинаний чародея.

Когда вы получаете уровень в этом классе, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний волшебника, колдуна или чародея того же уровня. Новое заклинание должно принадлежать школе Ограждения или Преобразования.

| !Ур. |!Заклинания |
| !1 |//защита от добра и зла//, //починка//, //сигнал тревоги// |
| !3 |//малое восстановление//, //подмога// |
| !5 |//защита от энергии//, //рассеивание магии// |
| !7 |//призыв конструкта//, //свобода перемещения// |
| !9 |//высшее восстановление//, //силовая стена// |

---

[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
---

!!! [img[1.png]] Заклинания источника
Вы узнаёте заклинания источника на указанных уровнях чародея. Заклинания источника считаются для вас заклинаниями чародея и не учитываются при подсчёте количества известных вам заклинаний чародея.

Когда вы получаете уровень в этом классе, вы можете выбрать одно из известных вам заклинаний, изученных с помощью этого умения, и заменить его другим заклинанием из списка заклинаний волшебника, колдуна или чародея того же уровня. Новое заклинание должно принадлежать школе Воплощения или Преобразования.

| !Ур. |!Заклинания |
| !1 |//волна грома//, //падение пёрышком//, //шквал// |
| !3 |//небесные письмена//, //порыв ветра// |
| !5 |//газообразная форма//, //громовой шаг// |
| !7 |//власть над водами//, //сфера бури// |
| !9 |//власть над ветрами//, //призыв элементаля// |

---

[img [https://i.imgur.com/lYaBvye.png]]
<<tabs "[tag[Монастырская практика]nsort[]]" "" "$:/state/tab1" "tc-vertical">>


[img width=325 class="centerme" [https://i.imgur.com/0iEs8eB.png]]

<<tabs "[[Описание монахов]] [[Классовые умения монахов]] [[Монастырские практики]]" "" "$:/state/tab1">>
Пока вы не носите средних или тяжелых доспехов и щитов, ваша скорость плавания и карабканья равна вашей скорости ходьбы, и вы получаете бонус +1 к КД.
[img width=280 class="centerme" [https://i.imgur.com/ZVUBKHm.png]]

С самого начала мультивселенной морские эльфы были очарованы первозданной красотой океанов. Пока другие эльфы путешествовали от одного царства к другому, морские эльфы странствовали по глубочайшем течениям и исследовали водные пространства через сотни миров. В нынешнее время, они проживают в небольших и скрытых поселениях близ морских мелководий и на Элементальном Плане Воды. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Телосложения увеличивается на 1. |
|^Боевая подготовка морских эльфов |^Вы владеете одноручным древковым оружием и простыми арбалетами. Кроме того, вы считаетесь владеющим импровизированным оружием, если метаете сеть. |
|^Дитя морей |^Вы можете дышать и на суше, и под водой, а ваша скорость плавания равна вашей скорости ходьбы. |
|^Морские побратимы |^Используя простые жесты и звуки, вы можете наладить контакт с любым существом, которое имеет врождённую скорость плавания. |
|^Язык моря |^Вы можете говорить, читать и писать на Акване. |
Вы много лет плавали на морском судне. Вы видели могучие шторма, глубоководных чудовищ и тех, кто хотел отправить вас на дно. Первая любовь осталась далеко за горизонтом, и настало время попробовать что-то новое.

Решите вместе с Мастером, на каком корабле вы до этого плавали и кем вы были на борту.

* ''Владение навыками:'' Атлетика, Внимательность
* ''Владение инструментами:'' [[Инструменты навигатора|Инструменты навигатора]], [[водный транспорт|Наземный и водный транспорт]]
* ''Экипировка:'' Кофель-нагель (дубинка), 15 м шёлковой верёвки, талисман, такой как кроличья лапка или камень с дыркой, комплект дорожной одежды, кошель с 10 см

!!!Умение: Поездка на корабле
Если понадобится, вы можете получить бесплатную поездку на паруснике для себя и своих спутников. Это может быть ваш старый корабль, или другой корабль, с которым вы находитесь в хороших отношениях (возможно, им командует ваш бывший напарник). Вам оказывают услугу, поэтому вы не можете устанавливать распорядок и прокладывать маршрут. Мастер сообщит, сколько времени уйдёт на плавание. В обмен на бесплатную поездку от вас и ваших спутников ожидают посильную помощь экипажу во время плавания.

---

!!!Разновидность моряка: Пират
Вы провели молодость среди жутких пиратов, безжалостных головорезов, научивших вас выживать среди акул и дикарей. Вы занимались грабежом в морях, и не одну душу отправили в солёную пучину. Вы хорошо знакомы со страхом и кровью, и заслужили сомнительную репутацию во многих портовых городах.

Если вы решите, что во время плаваний по морю вы занимались пиратством, можете выбрать умение Дурная репутация вместо умения Поездка на корабле.


<<<
!!!Альтернативное умение: Дурная репутация
Где бы вы ни оказались, вас боятся из-за вашей репутации. Находясь в цивилизованном поселении, вы можете безнаказанно совершать небольшие преступления, такие как отказ платить за еду в таверне или выламывание двери в магазине, так как жители боятся сообщать о вас властям.
<<<

---

!!!Персонализация
Моряки бывают грубыми, но на их плечах лежит груз ответственности за сохранение жизни экипажа, поэтому на них можно положиться. Жизнь, проведённая на корабле, формирует их взгляды и самые важные привычки.

| !к8 |!Черта характера |
| 1 |Друзья знают, что всегда могут на меня положиться. |
| 2 |Я усердно тружусь, чтобы потом можно было хорошо отдохнуть. |
| 3 |Мне нравится заходить в новые порты и находить друзей за кружечкой эля. |
| 4 |Я готов приврать, чтобы получился хороший рассказ. |
| 5 |Для меня драка в таверне — отличный способ познакомиться с новым городом. |
| 6 |Я никогда не откажусь от пари. |
| 7 |Я ругаюсь как банда орков. |
| 8 |Мне нравится, когда работа выполнена, особенно если её можно поручить другому. |

| !к6 |!Идеал |
| 1 |''Уважение.'' Корабль держится целым благодаря взаимному уважению капитана и экипажа. |
| 2 |''Справедливость.'' Все мы делаем одно дело, и награду должны делить поровну. |
| 3 |''Свобода.'' Море это свобода — свобода идти куда угодно и делать что угодно. |
| 4 |''Власть.'' Я хищник, а другие корабли в море —  моя   добыча. |
| 5 |''Команда.'' Я предан экипажу, а не идеалам. |
| 6 |''Стремление.'' Когда-нибудь у меня будет свой корабль, и я проложу курс куда захочу. |

| !к6 |!Привязанность |
| 1 |В первую очередь я верен своему капитану, всё остальное вторично. |
| 2 |Самое важное — это корабль, а экипаж и капитаны постоянно меняются. |
| 3 |Я всегда буду помнить свой первый корабль. |
| 4 |В гавани у меня есть возлюбленная, глаза которой стоят того, чтобы оставить ради неё море. |
| 5 |Как-то раз мне выплатили не полную долю с дохода, и я хочу вернуть себе причитающееся. |
| 6 |Безжалостные пираты убили моего капитана и почти всю команду, разграбили корабль, и оставили меня умирать. Месть будет страшной. |

| !к6 |!Слабость |
| 1 |Я выполняю приказы, даже если считаю, что они   не справедливые. |
| 2 |Я наплету с три короба, лишь бы не делать лишнюю работу. |
| 3 |Когда кто-то бросает мне вызов, я никогда не отступлюсь, какой бы опасной не была ситуация. |
| 4 |Начав пить, я не могу остановиться. |
| 5 |Не могу ничего поделать, но деньги у меня не задерживаются. |
| 6 |Моя гордость меня когда-нибудь погубит. |
Вы провели много лет, постигая тайны мультивселенной. Вы читали рукописи, изучали свитки, и общались с величайшими экспертами в интересующих вас темах. Всё это сделало вас знатоком в своей области.

* ''Владение навыками:'' История, Магия
* ''Языки:'' Два на ваш выбор
* ''Экипировка:'' Чёрные чернила, писчее перо, нож для бумаги, письмо от мёртвого коллеги с вопросом, на который вы пока не можете ответить, комплект одежды мудреца, кошель с 10 см

!!!Специализация
Чтобы определить область изучаемого вами знания совершите бросок по таблице или выберите один из вариантов самостоятельно.

| !к8 |!Направленность | !к8 |!Направленность |
|  1  |Академик с испорченной репутацией       | 5  |Исследователь  |
|  2  |Алхимик        | 6  |Писец     |
|  3  |Астроном        | 7  |Подмастерье волшебника      |
|  4  |Библиотекарь        | 8  |Профессор      |

!!!Умение: Исследователь
Если вы пытаетесь изучить или вспомнить информацию, которой вы не обладаете, вы часто знаете, где и от кого её можно получить. Обычно это библиотека, скрипторий, университет, мудрец или другое образованное существо. Мастер может решить, что искомое знание является тайной и хранится в практически недоступном месте, или что оно вообще недоступно. Поиски глубочайших тайн вселенной могут потребовать отдельного приключения или даже целой кампании.

!!!Персонализация
Мудрецами становятся после продолжительных занятий, и личность таких существ отражает жизнь в постоянном обучении. Будучи в постоянном поиске мудрости, они высоко ценят знания — как для себя, так и в стремлении к идеалам.

| !к8 |!Черта характера |
| 1 |Я использую многосложные слова, создающие впечатление образованности. |
| 2 |Я прочитал все книги в величайших библиотеках мира — или, по крайней мере, говорю так. |
| 3 |Я привык помогать тем, кто не так умён, как я, и терпеливо всем всё объясняю. |
| 4 |Больше всего на свете я люблю тайны. |
| 5 |Прежде чем принять решение, я выслушаю аргументы обеих спорящих сторон. |
| 6 |Я ... говорю ... медленно ... когда разговариваю ... с идиотами, ... то есть ... практически ... всегда. |
| 7 |В социальном взаимодействии я ужасно неуклюж. |
| 8 |Я убеждён, что остальные постоянно хотят украсть мои тайны. |

| !к6 |!Идеал |
| 1 |''Знание.'' Путь к силе и самосовершенствованию лежит в знаниях. |
| 2 |''Красота.'' Красота ведёт нас к тому, что истинно. |
| 3 |''Логика.'' Эмоции не должны подавлять логическое мышление. |
| 4 |''Свобода.'' Ничто не должно сдерживать бесконечные варианты всех возможных исходов. |
| 5 |''Власть.'' Знания — путь к власти и контролю. |
| 6 |''Самосовершенствование.'' Цель жизни в познании — самосовершенствование. |

| !к6 |!Привязанность |
| 1 |Я должен защищать своих учеников. |
| 2 |У меня есть древний текст, содержащий ужасную тайну, и который не должен попасть в чужие руки. |
| 3 |Я работаю над сохранением библиотеки, университета, скриптория или монастыря. |
| 4 |Труд всей моей жизни — это серия томов, посвящённая определённой области знаний. |
| 5 |Всю свою жизнь я ищу ответ на один вопрос. |
| 6 |Ради знаний я продал душу. Когда-нибудь я надеюсь совершить великое деяние и вернуть её себе. |

| !к6 |!Слабость |
| 1 |Меня легко отвлечь, пообещав информацию. |
| 2 |Увидев демона, большинство закричит и убежит.   Я же остановлюсь и буду изучать его анатомию. |
| 3 |Для раскрытия древних тайн можно пожертвовать современной цивилизацией. |
| 4 |Я избегаю очевидных решений, пользуясь замысловатыми. |
| 5 |Я говорю, не обдумывая слова, чем часто оскорбляю других. |
| 6 |Ради спасения своей или чьей-либо ещё жизни я выболтаю любую тайну. |
Владение музыкальным инструментом означает, что вы знакомы с приёмами игры на нём. Вы также знаете несколько песен, как правило, исполняющихся наэтом инструменте. Для каждого музыкального инструмента нужно отдельное владение.

Бард может использовать музыкальный инструмент в качестве фокусировки для заклинаний.

''//История//''. Ваш опыт помогает вам вспомнить исторические факты, связанные с вашим инструментом.

//''Выступление''//. Ваши постановки заметно улучшаются, когда вы включаете в них игру на инструменте.

//''Сочинение мелодии''//. Как часть продолжительного отдыха вы можете сочинить новую мелодию и слова для песни, исполняемой на вашем инструменте. Вы можете использовать эту способность, чтобы произвести впечатление на дворянина или распространять скандальные слухи с легко запоминающейся мелодией.

|!Инструмент |!Цена | !Вес|
|Барабан |6 см | 1 кг|
|Виола |30 см | 0.5 кг|
|Волынка |30 см  | 3 кг|
|Лира |30 см  | 1 кг|
|Лютня |35 см  | 1 кг|
|Рожок |3 см | 1 кг|
|Свирель |12 см | 1 кг|
|Флейта |2 см | 0.5 кг|
|Цимбалы |25 см | 5 кг|
|Шалмей |2 см | 0.5 кг|
Мультиклассирование позволяет получать уровни в разных классах. Это позволяет смешивать умения этих классов, создавая концепцию персонажа, которую не создать ни одним из стандартных классов.

Это правило позволяет при получении уровня увеличивать уровень не текущего класса, а другого. Сумма уровней всех ваших классов определяет уровень персонажа. Например, если вы волшебник 3 уровня и воин 2 уровня, то вы персонаж 5 уровня.

Вы можете получать уровни не более чем в трёх классах.

Вы получаете стартовое снаряжение только первого класса.


---

!!!Требования
Для того чтобы получить новый класс, нужно удовлетворять требованиям к характеристикам и для текущего и для нового класса, показанным в придённой таблице. Например, у варвара, решившего мультиклассироваться в друида, Сила и Мудость должны быть не меньше 13. Обучение происходит не плавно как обычно, а ускоренно, поэтому значения характеристик должны быть выше среднего.

|!Класс|!Минимальные значения характеристик |
|Бард|Харизма 13 |
|Варвар|Сила 13 |
|Воин|Сила 13 или Ловкость 13 |
|Волшебник|Интеллект 13 |
|Друид|Мудрость 13 |
|Жрец|Мудрость 13 |
|Изобретатель|Интеллект 13 |
|Колдун|Харизма 13 |
|Кровавый охотник|Сила 13 или Ловкость 13, и Интеллект 13 |
|Монах|Ловкость 13 и Мудрость 13 |
|Паладин|Сила 13 или Ловкость 13, и Харизма 13 |
|Плут|Ловкость 13 |
|Следопыт|Сила или Ловкость 13, и Мудрость 13 |
|Чародей|Харизма 13 |

---

!!!Опыт
Количество опыта, необходимого для получения нового уровня, зависит от уровня персонажа, а не от уровня в каком-то одном классе. Таким образом, если вы жрец 6/воин 1, вам нужно набрать опыта, необходимого для получения 8 уровня, прежде чем сможете получить 2 уровень воина или 7 уровень жреца.

---

!!!Хиты и Кости Хитов
Вы получаете хиты от нового класса как для любого уровня после первого. Хиты класса 1 уровня получают только когда уровень персонажа тоже первый.

Вы складываете Кости Хитов, полученные от всех классов, формируя общий фонд Костей Хитов. Если все Кости Хитов одного вида, вы можете их просто просуммировать.

---

!!!Бонус мастерства и очки навыков
Бонус мастерства и количество очков навыков всегда зависят от уровня персонажа.

---

!!!Владение
Когда вы получаете первый уровень нового класса, вы получаете не все его владения, а только часть, как показано в приведённой таблице:

|!Класс|!Получаемые владения |
|Бард|Лёгкие доспехи, один навык на ваш выбор, один музыкальный инструмент |
|Варвар|Простое оружие, воинское оружие |
|Воин|Лёгкие доспехи, средние доспехи, простое оружие, воинское оружие, одно экзотическое оружие |
|Волшебник|— |
|Друид|Лёгкие доспехи, средние доспехи |
|Жрец|Лёгкие доспехи, средние доспехи |
|Изобретатель|Лёгкие доспехи, средние доспехи, воровские инструменты, инструменты ремонтника |
|Колдун|Лёгкие доспехи, простое оружие |
|Кровавый охотник|Лёгкие доспехи, средние доспехи, простое оружие, воинское оружие, один навык из списка классовых навыков, инструменты алхимика |
|Монах|Монашеское оружие |
|Паладин|Лёгкие доспехи, средние доспехи, простое оружие, воинское оружие |
|Плут|Лёгкие доспехи, один навык из списка классовых навыков, воровские инструменты |
|Следопыт|Лёгкие доспехи, средние доспехи, простое оружие, воинское оружие, один навык из списка классовых навыков |
|Чародей|— |

---

!!!Классовые умения
Когда вы получаете новый уровень одного из классов, вы получаете соответствующие этому уровню умения. Однако некоторые умения подчиняются особым правилам: Божественный канал, Дополнительная атака, Защита без доспехов и Использование заклинаний.

<<tabs "[tag[Классовые умения]]" "Божественный канал" "$:/state/tab1" "tc-vertical">>
''Цена'': 20 см. ''Вес'': 1 кг.

Отличный выбор для любого, кто хочет заниматься обманом, набор для грима позволяет своему владельцу принимать фальшивую личину.

//''Компоненты.''//  Набор для грима включает в себя различную косметику, краску для волос, немного реквизита и несколько нарядов.

//''Обман.''// В некоторых случаях грим может помочь вам плести более убедительную ложь.

//''Запугивание.''// Правильный образ может сделать вас более устрашающим, когда вы хотите кого-то отпугнуть, притворившись заражённым чумой, либо, когда запугиваете шайку бандитов под видом громилы-головореза.

//''Выступление.''// Искусство перевоплощения может увеличить удовлетворённость публики выступлением, при условии, что обличье должным образом разработано, чтобы вызывать нужную реакцию.

//''Убеждение.''// Народ склонен доверять людям в униформе. Если вы замаскировались под авторитетную фигуру, ваши попытки убедить других обычно более эффективны.

//''Создание обличья.''//  Как часть ночлега или продолжительного отдыха вы можете создать обличье для маскировки. На надевание обличья после его создания требуется 1 минута. Вы можете одновременно иметь при себе только одно такое обличье, не привлекая ненужного внимания, если только у вас нет //сумки хранения //или другого подобного способа оставить их незамеченными. Каждое такое обличье весит 0.5 кг.

В других случаях требуется 10 минут на создание обличья, которое немного изменяет вашу внешность и 30 минут, если требуются более обширные изменения.

|!Действие| !Сл |
|Скрыть травмы или особые приметы   | 10 |
|Распознать использование маскировки кем-либо другим | 15 |
|Скопировать внешность гуманоида   | 20 |
''Цена'': 15 см. ''Вес'': 2 кг.

Набор для фальсификации предназначен для копирования документов и упрощения копирования личной печати или подписи.

//''Компоненты.''// Набор для фальсификации включает в себя чернила различных видов, пергамент и бумагу различных видов, несколько писчих перьев, печати и сургуч, золотая и серебряная фольга и небольшие инструменты для лепки из расплавленного воска имитации печати.

//''Магия.''//  Набор для фальсификации может быть использован вместе с навыком Магия, чтобы определить, является магический предмет настоящим или поддельным.

//''Обман.''// Качественно выполненная подделка, такая как документ, подтверждающий вашу знатность или предписание, гарантирующее вам безопасный проезд, может придать достоверности вашей лжи.

//''История.''// Набор для фальсификации вместе с вашими познаниями в истории улучшает вашу способность подделывать исторические документы или определять их подлинность.

//''Анализ.''// Когда вы осматриваете предмет, владение набором для фальсификации помогает определить, как предмет был сделан и подлинный ли он.

//''Другие инструменты.''//  Умение использовать другие инструменты делает ваши подделки более правдоподобными. Например, вы можете объединить владение набором для фальсификации и владение инструментами картографа, чтобы сделать поддельную карту.

//''Быстрая подделка.''//  Как часть короткого отдыха вы можете создать поддельный документ длиной не более одной страницы. Как часть продолжительного отдыха вы можете создать документ длинной до четырёх страниц. Ваша проверка Интеллекта в использовании набора для фальсификации определяет Сл проверки Интеллекта (Расследование) на определение того, что это подделка.

|!Действие| !Сл |
|Подделать подчерк | 15 |
|Скопировать восковую печать  | 20 |
''Цена'': 5 см. ''Вес'': 1 кг.

Владение набором травника позволяет вам распознавать растения и надёжно сохранять их полезные части. С помощью этого набора вы можете совершать действия [[излечение болезни, облегчение боли и облегчение действия яда|Немагическое лечение]]. Набора хватает на десять использований для совершения этих действий. Вы можете восстановить одно использование, совершив проверку Мудрости (Природа) для сбора трав.

//''Компоненты.''// Набор травника включает в себя мешочки для хранения трав, секатор и кожаные перчатки для сбора растений, несколько стеклянных банок, ступку и пестик.

//''Магия.''//  Ваши осведомлённость в природе и использовании растений может дать дополнительные знания к магическим исследованиям, когда дело касается растений и попыток опознать зелье.

//''Анализ.''// Когда вы обследуете заросшую растениями зону, владение этим набором помогает вам находить детали и зацепки, которые другие бы проглядели.

//''Медицина.''//  Ваше мастерство травника улучшает ваши способности лечить болезни и раны, расширяя доступные методы благодаря использованию лекарственных растений.

//''Природа, Выживание.''// Когда вы путешествуете в дикой местности, ваши навыки травничества облегчают опознание растений и поиск источников еды, которые другие могут не заметить.

//''Опознание растений.''//  Вы можете быстро распознать большинство растений по запаху и внешнему виду.

|!Действие| !Сл |
|Найти растения  | 15 |
|Опознать яд | 20 |
Если щит не у вас в руках, то его экипировка может потребовать действия.

|!Вид|!Надевание|!Снятие|
|Лёгкий щит| свободное действие |<|
|Средний щит| бонусное действие |<|
|Тяжёлый щит| действие |<|


Экипировка брони занимает несколько минут и невозможна во время сражения.
''Цена'': 5 см. ''Вес'': 1 кг.

Владение наземным транспортом покрывает широкий спектр вариантов, от колесниц и хаудахов до повозок и телег. Владение водным транспортом охватывает всё, что перемещается по водным путям. Владение транспортом предоставляет знания, необходимые для управления транспортом данного типа, вместе со знаниями о том, как его чинить и обслуживать.

Кроме того, персонаж, владеющий водным транспортом, осведомлён обо всём, что должен знать профессиональный моряк, как то знание информации о море и островах, умение завязывать узлы и оценивать погоду и волнение моря.

//''Магия.''//  Когда вы изучаете магический транспорт, это владение помогает вам в раскрытии знаний о нём или в определении, как им управлять.

//''Анализ, Внимательность.''// Когда вы осматриваете транспорт на наличие улик или скрытой информации, ваши знания помогают вам замечать вещи, которые другие пропустили бы.

//''Управление транспортом.''//  Управляя транспортом, вы можете добавить свой бонус мастерства к КД транспорта и его спасброскам.

|!Действие| !Сл |
|Двигаться по пересечённой местности или по воде  | 10 |
|Оценить состояние транспорта  | 15 |
|Вписаться в поворот на высокой скорости | 20 |
| !_к12_ |!Наказание |
| 1-3 |Вы не совершали преступление и были освобождены после обвинения.  |
| 4-6 |Вы совершили преступление или помогли совершить, но, тем не менее, власти признали вас невиновным.  |
| 7-8 |Вас едва не поймали с поличным. Вы должны были спасаться бегством и на данный момент вас разыскивают в поселении, где произошло преступление.  |
| 9-12 |Вы были схвачены, преданы суду и провели много времени в тюрьме, гребцом на судне или на каторге. Вы отбыли наказание в течение 1к4 лет или успешно бежали после истечения этого срока.  |
У вас было низкое социальное положение, но судьбой было уготовано большее. Жители вашей родной деревни уже считают вас своим героем, но вам предначертано сражаться с тиранами и чудовищами, угрожающими другим.

* ''Владение навыками:'' Выносливость, Уход за животными
* ''Владение инструментами:'' Один вид [[инструментов ремесленников|Инструменты ремесленников]], [[наземный транспорт|Наземный и водный транспорт]]
* ''Экипировка:'' Инструменты ремесленника, которыми вы владеете, лопата, железный котёл, комплект одежды селянина, кошель с 10 см

!!!Определяющее событие
Вы занимались обычным делом для деревенщины. Возможно, вы возделывали землю, трудились в шахте, прислуживали дворянину, пасли скот, рубили деревья или копали могилы. Но потом произошло нечто, втянувшее вас в великие события. Выберите или определите случайно определяющее событие, сделавшее вас героем среди своего народа.

| !к10 |!Определяющее событие |
| 1 |Я дал отпор прислужникам тирана. |
| 2 |Я спас народ от природного катаклизма. |
| 3 |Я сразился один на один с ужасным чудищем. |
| 4 |Я обокрал продажного торговца, чтобы помочь бедным. |
| 5 |Я возглавил ополчение, отбросившее врага. |
| 6 |Я вломился в замок тирана и украл оружие для своего народа. |
| 7 |Я учил крестьян, как использовать обычные инструменты в качестве оружия против солдат тирана. |
| 8 |Лорд отменил непопулярный закон после того как я выступил с акцией протеста. |
| 9 |Небожитель, фея или другое подобное существо благословило меня или открыло тайну моего рождения. |
| 10 |Вступив в армию лорда, я получил хорошее звание и заслужил благодарности. |

!!!Умение: Деревенское гостеприимство
Вы сами из простого народа, и потому легко находите с ними общий язык. Вы можете найти место, чтобы спрятаться, отдохнуть или подлечиться среди обывателей, если только вы не угрожаете им. Они укроют вас от представителей закона и тех, кто ищет вас, но своими жизнями за вас они рисковать не будут.

!!!Персонализация
Народный герой — один из обывателей, как в хорошем смысле, так и в плохом. Многие из них считают своё происхождение положительной стороной, а не изъяном, и их родное поселение остаётся навсегда очень важным для них.

| !к8 |!Черта характера |
| 1 |Я сужу других по поступкам, а не словам. |
| 2 |Если кто-то в беде, я всегда готов прийти на помощь. |
| 3 |Задумав что-то, я прямолинейно иду к цели, невзирая на помехи. |
| 4 |У меня обострённое чувство справедливости, и в споре я всегда ищу самого честного решения. |
| 5 |Я уверен в своих способностях, и стараюсь внушить такую же уверенность в других. |
| 6 |Пусть думают другие. Я предпочитаю действовать. |
| 7 |Я неправильно произношу длинные слова, когда пытаюсь выглядеть умнее. |
| 8 |Я быстро устаю. Когда уже я найду свою судьбу? |

| !к6 |!Идеал |
| 1 |''Уважение.'' Нужно относиться друг к другу с достоинством и уважением. |
| 2 |''Справедливость.'' Закон не должен делать ни для кого исключений, и никто не может стать выше закона. |
| 3 |''Свобода.'' Тираны не должны угнетать народ. |
| 4 |''Мощь.'' Если я стану сильным, я смогу брать то, что захочу — и я это заслуживаю. |
| 5 |''Искренность.'' Нет ничего хорошего в том, что ты притворяешься тем, кем не являешься. |
| 6 |''Судьба.'' Никто и ничто не собьёт меня с пути к высшему призванию. |

| !к6 |!Привязанность |
| 1 |У меня есть семья, но я не знаю, где она. Надеюсь, когда-нибудь я увижу их вновь. |
| 2 |Я работал на земле, я люблю землю, и я буду защищать землю. |
| 3 |Один благородный меня дико поколотил, и я вымещаю свой гнев на всех встреченных задирах. |
| 4 |Мои инструменты — символ моей былой жизни, и я ношу их, чтобы не забывать корни. |
| 5 |Я защищаю тех, кто не может защитить себя сам. |
| 6 |Хотел бы я, чтобы та, кого я любил в детстве, разделила со мной судьбу. |

| !к6 |!Слабость |
| 1 |Тиран, правящий моими землями, ни перед чем не остановится, лишь бы убить меня. |
| 2 |Я слепо верю в своё предназначение, и не замечаю ни своих недостатков, ни смертельных опасностей. |
| 3 |Те, кто знают меня молодым, знают и мою самую постыдную тайну, так что я никогда не вернусь домой. |
| 4 |Я беззащитен перед пороками большого города, особенно перед пьянством. |
| 5 |Я тайно считаю, что было бы хорошо стать тираном, правящим землями. |
| 6 |Я не доверяю союзникам. |
Если вы переместитесь как минимум на 4 м по прямой к цели, вы можете действием наскочить на неё, выбрав одну из опций ниже.

//''Налёт.''// Вы совершаете рукопашную атаку по цели с преимуществом, которая наносит дополнительный урон равный дистанции вашего наскока до максимума, равному вашему модификатору Силы. Если вы находитесь верхом, вы можете использовать модификатор вашего ездового животного.

//''Таран.''// Вы [[толкаете|Толкание существа]] цель с преимуществом. При успехе вы либо толкаете цель на 1 м от себя и сбиваете с ног, либо толкаете её на 2 м от себя. При провале вы провоцируете атаку от цели.

//''Перехват.''// Вы [[хватаете|Захват]] цель с преимуществом. При успехе вы и цель падаете ничком, а цель [[схвачена|Схваченный]] вами. При провале вы провоцируете атаку от цели и падаете ничком.
[img [https://i.imgur.com/lYaBvye.png]]
* Вас невозможно увидеть без помощи магии или особого чувства. 
* Ваше местонахождение можно определить по шуму, который вы издаёте, или по оставленным вами следам.
* Броски атаки по вам совершаются с помехой. 
* Вы совершаете броски атаки с преимуществом.
* Вы не можете совершать действия и реакции.
В заклинании указано, что заклинатель можерт сделать его целью: существо любого типа, существо определённого типа (например, гуманоид или зверь), объект, область, самого себя или что-то ещё. 

Если вы направляете заклинание на кого-то или что-то, что не может быть целью заклинания, с целью ничего не происходит, но, если вы использовали ячейку заклинания, ячейка тратится. Если заклинание обычно не влияет на цель, которая преуспевает в спасброске, то недопустимая цель автоматически преуспевает в спасброске, даже если она не пыталась. Иными словами, вы понимаете, что заклинание не оказало влияния на цель. 
При сотворении заклинания вы можете потратить 1 очко чародейства, чтоб сотворить его без вербальных и соматических компонентов.
!!!Излечение болезни
Во время отдыха вы можете оказать помощь существу в борьбе с болезнью и предотвращению её распространения, потратив одно использование //набора травника//. Цель может тут же повторить спасбросок против эффекта болезни, который на неё уже действует. Вы можете потратить ещё одно использование //набора травника// и совершить проверку Мудрости (Медицина) против Сл болезни. При успехе цель совершает свой спасбросок с преимуществом. Кроме того, все спасброски против заражения болезнью от больного существа совершаются с преимуществом.

Существо не может повторно получить преимущества от излечения болезни, пока не окончит ночлег.

---

!!!Облегчение боли
Во время короткого отдыха или ночлега вы можете облегчить боль одного существа, потратив одно использование //комплекта целителя// или //набора травника//. Если цель тратит Кости Хитов в течение этого отдыха, она может использовать максимальное значение __одной__ из костей, вместо результата броска. Кроме того, цель совершает свой следующий спасбросок Телосложения с преимуществом.

Существо может получить преимущества от облегчения боли только один раз за отдых.

---

!!!Облегчение действия яда
Во время отдыха вы можете оказать помощь существу против воздействия яда, потратив одно использование //набора травника//. Цель получает сопротивление против следующего урона ядом, который она получит, и может тут же повторить спасбросок против эффекта яда, который на неё уже действует. Вы можете потратить ещё одно использование //набора травника// и совершить проверку Мудрости (Медицина) против Сл яда. При успехе цель совершает свой спасбросок с преимуществом.

Существо не может повторно получить преимущества от облегчения действия яда, пока не окончит ночлег.

---

!!!Первая помощь
Вы можете действием оказать первую помощь ''умирающему'' существу, потратив одно использование //комплекта целителя// или //саквояжа хирурга//. Совершите проверку Мудрости (Медицина) со Сл 10, при успехе цель ''стабилизирована''. Если вы используете подручные средства вместо надлежащих инструментов, совершите проверку с помехой.

''Стабилизированное'' существо перестает быть ''умирающим'', но становится ''бессознательным'', пока не восстановит хотя бы 1 хит. Получив урон, существо снова становится ''умирающим''. ''Стабилизированное'' существо, не получившее лечения, восстанавливает 1 хит после 1к4 часов.

---

!!!Реанимация
Вы можете действием попытаться оживить существо в состоянии клинической смерти, потратив одно использование //комплекта целителя//. Существо может быть оживлено, если оно мертво не более чем 1 + мод. Телосложения существа (минимум 1) раунд. 

Совершите проверку Мудрости (Медицина) со Сл 20. При провале Сл следующей проверки реанимации возрастает на 5. При успехе цель становится ''умирающей'' и может продолжать совершать //спасброски от смерти// в начале каждого своего раунда, пока не провалит один из них, после чего погибает и больше не может быть реанимирована.

Существо не может быть реанимировано повторно, пока не окончит ночлег.

---

!!!Хирургическая операция
Вы можете провести операцию на раненом существе и попытаться упростить излечение одного из его ранений, потратив по одному использованию //саквояжа хирурга// за каждый час работы. Совершите проверку Мудрости (Медицина) в соответствии с таблицей сложности исцеления ранения, приведенной ниже. Персонаж, владеющий навыком Медицина, может оказать вам помощь, потратив ещё одно использование //саквояжа хирурга//.

При успехе условия излечения ранения изменяются на указанные в таблице, а если ранение требует от цели совершения спасбросков Телосложения, она совершает их с преимуществом до конца своего следующего продолжительного отдыха.

Вы повторно не можете проводить операцию на том же самом ранении, пока цель не окончит продолжительный отдых. 

| !Ур | !Сл | !Время |!Результат |
| I | 10 | 1 ч |Любое магическое лечение, //малое// или //высшее восстановление//, или 1 неделя без лечения. |
| II | 15 | 2 ч |Магическое лечение 2 уровня или выше, //малое// или //высшее восстановление//, или 2 недели без лечения. |
| III | 20 | 3 ч |Магическое лечение 3 уровня или выше, //малое// или //высшее восстановление//, или 3 недели без лечения. |
| IV | 25 | 4 ч |Магическое лечение 4 уровня или выше, //высшее восстановление// или 4 недели без лечения. |
| V | 30 | 5 ч |Магическое лечение 5 уровня или выше, или //высшее восстановление//. |

Существо, которое пытается, но не может сотворить заклинание со свитка, должно совершить спасбросок Интеллекта со Сл 10. При провале Мастер совершает бросок к6 для определения последствий в соответствии с приведённой ниже таблицей. 

!!!Неудачи при прочтении свитков

|!к6|!Результат|
| 1 |Волна магической энергии причиняет заклинателю 1к6 урона силовым полем за каждый уровень заклинания. |
| 2 |Вместо намеченной цели заклинание перенаправляется на заклинателя или на его союзника (определяется случайным образом). Если изначальной целью заклинания был сам заклинатель, то оно перенаправляется на случайное существо, находящееся поблизости. |
| 3 |Заклинание воздействует на случайную область в пределах действия заклинания. |
| 4 |Эффект заклинания оказывается прямо противоположен тому, каким он должен был быть. При этом заклинание не приносит ни вреда, ни пользы. Например, огненный шар оборачивается безобидной волной холода. |
| 5 |Заклинатель страдает от незначительного, но причудливого эффекта, связанного с природой заклинания. Продолжительность этого эффекта такая же, как и длительность неудавшегося заклинания или же 1к10 минут для заклинаний с длительностью «мгновенная». Например, огненный шар может обернуться тем, что из ушей заклинателя в течение 1к10 минут будет идти дым. |
| 6 |Заклинание активируется через 1к12 часов. Если целью заклинания был сам заклинатель, то оно срабатывает как обычно. Если целью было другое существо, которого уже нет рядом, то эффект от заклинания распространяется в направлении этого существа, на расстояние максимальной дистанции самого заклинания. |
Вы живёте в нечеловеческих условиях. У вас нет дома, вы спите где придётся, шныряя по сараям, прячась под ящиками и надеясь на подачки от тех, у кого дела обстоят лучше вашего. Никудышный стиль жизни опасен. Вас всегда преследуют насилие, болезни и голод. Те, кто вместе с вами ведёт никудышное существование, хотят заполучить ваши доспехи, оружие и снаряжение, так как для них это целое состояние. За вами все пристально следят. 
Вы живёте в протекающем стойле, землянке за городом или кишащей клопами ночлежке в трущобах. Вы укрыты от стихий, но окружение всё равно опасно, так как грозит болезнями, голодом и неудачами. Многие за вами следят, и закон вас почти не защищает. Многие из тех, что ведут такое существование, испытывают трудности. Им не дают покоя, их клеймят изгоями и они страдают от болезней. 
Стандартные сутки разбиваются на шесть частей:

* 05:00-06:00 - рассвет;
* 06:00-11:00 - утро;
* 11:00-13:00 - полдень;
* 13:00-18:00 - день;
* 18:00-19:00 - закат;
* 19:00-05:00 - ночь.

Если вы решили отдохнуть в течение более длительного периода времени, или вам необходимо выполнить несколько сложных задач, пришло время разбить лагерь и устроиться на ночлег.

Для сна персонажу требуется нормально 8 часов в сутки; для перехода ко сну и от сна к бодрствованию (раздевание, приведение в порядок снаряжения, одевание после сна, умывание и т.п.) нужно около 2 часов; на приготовление и принятие пищи утром и вечером — 2 часа. Итого на полноценный ночлег уходит 12 часов, обычно, от начала заката в 18:00 до окончания рассвета в 6:00.

Найдите безопасное место, разожгите костёр, поставьте палатки, обезопасьте животных, транспорт и груз. Для того, чтобы устроиться на ночлег, необходимо выполнить несколько основных шагов:

# ''Разбейте лагерь:'' При необходимости пройдите проверку на поиск убежища.
# ''Выставьте караул:'' Караульные отвечают за оборону лагеря и пристально наблюдают за окрестностями в поисках возможных угроз.
# ''Поспите.''
# ''Сверните лагерь.''


''Успешное завершение ночлега предоставляет вам те же преимущества, что и'' [[короткий отдых|Короткий отдых]].



<<tabs "[[Разбивка лагеря]] [[Караул]] [[Сон]]" "" "$:/state/tab1">>
Вы можете использовать атаку оружием, чтобы выбить оружие или другой предмет из хватки цели. 

Вы совершаете бросок атаки, которому противостоит проверка Силы (Атлетика) или Ловкости (Акробатика) цели (цель сама выбирает, какую характеристику использовать).

Вы совершаете бросок атаки с помехой, если цель держит предмет как минимум двумя руками. Цель совершает проверку характеристики с преимуществом, если она больше вас, или с помехой, если она меньше вас.

Если вы выигрываете состязание, атака не причиняет ни урон, ни другие негативные эффекты, а цель просто роняет предмет. Вы можете свободным действием подобрать или откинуть предмет в выбранном вами направлении на расстояние, не превышающее 4 м.
Пока вы носите доспехи, вы получаете бонус +1 к КД.
Персонаж может выучить новый язык или обучиться работе с инструментом, если у него есть достаточно свободного времени и есть учитель, согласный его обучать. 

//''Ресурсы''//. Чтобы изучить язык или обучиться работе с инструментом обычно требуется не менее 10 недель, но это время может быть уменьшено на равное модификатору Интеллекта персонажа число недель (отрицательный модификатор не увеличивает время). Стоимость обучения составляет 25 см за неделю. 

//''Осложнения''//. Осложнения, возникающие во время обучения, обычно связаны с учителем. На каждые 10 недель, потраченных на обучение, с вероятностью 10% может возникнуть осложнение, примеры которых приведены в таблице ниже. 

| !к6 |!Осложнение |
| 1 |Ваш учитель исчез, и вам пришлось потратить одну рабочую неделю на поиски нового.|
| 2 |Ваш учитель использует редкие, устаревшие методики обучения, что вызывает комментарии со стороны окружающих. |
| 3 |Ваш учитель – шпион, посланный, чтобы узнать ваши планы.|
| 4 |Ваш учитель – разыскиваемый преступник. |
| 5 |Ваш учитель держит вас в ежовых рукавицах. |
| 6 |Учитель просит помочь ему справиться с угрозой. |
* Вы ничего не слышите и автоматически проваливаете все проверки характеристик, связанные со слухом.
Большинство эффектов в игре случается последовательно, согласно порядку, установленному правилами или Мастером. В редких случаях эффекты могут случится в одно время, особенно в начале или в конце хода существа. Если два или более события происходит одновременно в ход персонажа или монстра, тот, кто контролирует это существо – либо Мастер, либо игрок – определяет порядок, в котором происходят эти события. Например, если два эффекта происходят в конце хода персонажа игрока, игрок решает который из двух эффектов происходит первым. 
* Вы, а также все немагические предметы, которые вы несёте или носите, трансформируютесь в твёрдое инертное вещество (как правило, в камень). 
* Ваш вес увеличивается в 10 раз
* Вы перестаёте стареть.
* Вы [[недееспособны|Недееспособный]].
* Вы не способны двигаться и говорить, а также не осознаёте своё окружение.
* Броски атаки по вам совершаются с преимуществом.
* Вы автоматически проваливаете спасброски Силы и Ловкости.
* Вы получаете сопротивление ко всем видам урона.
* Вы получаете иммунитет к ядам и болезням. Если яд или болезнь уже действовали на вас, их действие приостанавливается, пока это состояние не окончится.
* Когда вы теряете половину от своего максимума хитов, вы считаетесь окровавленным.
* Вы получили открытые раны или крупные гематомы, и вы подвергаетесь сильной боли во время физической активности. Даже если ваши раны скрыты, видящее вас существо может определить признаки боли, совершив проверку Мудрости (Проницательность) против вашей пассивной Выносливости или проверки Телосложения (Обман), если вы пытаетесь скрыть боль.
* Вы не можете восстанавливать хиты костями хитов.
* Вы можете снять это состояние, либо подняв своё текущее значение хитов выше 50% от максимума, либо потратив действием одно использование комплекта целителя на обработку ран.
Если существо и как минимум один его союзник находятся на противоположных сторонах или углах пространства врага в пределах досягаемости своих рукопашных атак, они окружают этого врага, и каждый из них получает бонус +2 к броскам рукопашных атак по этому врагу. 

Существо также не участвует в окружении, если оно не видит врага или недееспособно. Существо Большого или ещё большего размера окружает, если как минимум одна клетка его пространства участвуют в окружении. 

Если сомневаетесь в том, окружают ли два существа врага на поле, проведите воображаемую линию между центрами пространств существ. Если эта линия пересекает противоположные стороны или углы пространства врага, этот враг окружён.

[img class="centerme" [https://i.imgur.com/eymb2Ji.png]]

<<<
На третий день недели таверну посетил представитель птичьего народа. Его оперение было настолько красным, что пламя очага выглядело блеклым на его фоне, в то время как его стоический вид пробирал не меньше, чем метель, бушующая снаружи. Всё что он хотел знать, так это кратчайший путь в «Тиар-Бесил». Он ушёл. Не знаю, кто там живёт в этом Тиар-Бесиле, но подозреваю, что никогда и не узнаю.

— Дуглас Редвуд, //Хищные Птицы//
<<<

Живущие в изоляции высоко в горах на вершинах самых высоких деревьев, ааракокры, называемые иногда «птичьим народом», вызывают страх и удивление. Многие ааракокры даже не являются уроженцами Материального Плана. Они родом из мира, находящегося очень далеко — с бескрайних просторов Стихийного Плана Воздуха. Это иммигранты, беженцы, разведчики и исследователи, а их форпосты служат им плацдармом в неизвестном и чужом мире. 

---

!!!Клюв и перо
С земли ааракокры выглядят как большие птицы. Только когда они спускаются на свои насесты на ветвях или ходят по земле, раскрывается их гуманоидный облик. Стоя прямо, ааракокра может достигать 1.5 м ростом. У них длинные, тонкие ноги, заканчивающиеся острыми когтями. 

Их тела покрыты перьями. Цвет их оперения обычно означает положение в племени. У мужчин перья ярко выкрашены в красный, оранжевый или жёлтый цвета. У женщин же цвета более приглушённые, как правило, это коричневый или серый. Их птичьи головы внешне напоминают гибрид попугая и орла с вариациями, характерными для разных племён. 

---

!!!Хранители неба 
Наиболее комфортно ааракокры чувствуют себя в небе. Они могут проводить часы в воздухе, а некоторые даже и дни, расправляя крылья и позволяя восходящим потокам тёплого воздуха держать их в небесах. В сражении они показывают все свои способности динамики и акробатики, двигаясь с невероятной скоростью и изяществом, набрасываясь с оружием или выставленными вперёд когтями на противника, а затем отлетая обратно. 

Однажды летавший ааракокра оставляет небо с неохотой. На своём родном плане они могут летать в течение нескольких дней или даже месяцев, приземляясь только чтобы отложить яйца и накормить своих птенцов, после чего отправляются обратно в небеса. Попавшие на Материальный План считают это место странным. 

Они иногда забывают или просто игнорируют вертикальные расстояния, а к народам, вынужденным жить и трудиться на земле, они не испытывают ничего кроме жалости. 

---

!!!Птичьи особенности 
Сходство ааракокр и птиц не ограничивается лишь физическим. Многие ааракокры имеют манеру поведения как у самых обычных птиц. Они скрупулёзно ухаживают за своими перьями, чистят их и вычёсывают «пассажиров», которых могли подхватить. Когда они всё-таки спускаются с небес, то предпочитают делать это рядом с водоёмами, где они могут ловить рыбу и купаться сами. 

Многие ааракокры добавляют в свою речь щебет, чтобы акцентировать внимание на том, что у сказанного может быть и другой смысл, так же как человек сделал бы это при помощи мимики и жестов. Ааракокра может расстроиться, если собеседник не в состоянии понять эти нюансы; например, угроза может быть воспринята как насмешка, и наоборот. 

Идея владения чем-либо озадачивает большинство ааракокр. Разве может кто-то владеть небом? Даже когда им объясняют, они первоначально полагают, что собственность — это нечто мистическое. В результате у ааракокр, которые мало взаимодействуют с другими народами, могут быть неприятности, когда они спускаются с неба, чтобы забрать домашний скот, фрукты или зерно. Блестящие сверкающие объекты привлекают их взгляд. Им очень трудно не воровать подобные сокровища, так как считают, что они отлично подходят для украшения жилища. Ааракокры, которые проводят годы среди других рас, могут научиться подавлять эти порывы. 

Заключение пугает ааракокр. Не иметь возможности летать, быть в ловушке под землёй или в ледяной тюрьме — это пытка, которую не каждый ааракокра может выдержать. Даже сидя на высоких ветвях или отдыхая в своих домах на вершине горы, они всегда настороже с бегающими глазами и телами, готовыми взлететь. 

---

!!!Места обитания
Большинство ааракокр живёт на Стихийном Плане Воздуха. Ааракокры могут оказаться на Материальном Плане, преследуя врагов или пытаясь помешать их планам на той стороне. Несчастный случай может перенести гнездо ааракокр на другой план. Некоторые проникают в этот мир через порталы на своём собственном плане, после чего гнездятся в высоких горах или под пологом старых лесов. 

После того, как племя ааракокр поселится в районе, они разделяют охотничьи угодья, площадь которых может достигать до 100 километров в поперечнике, и начинают охотиться в землях возле своей колонии, продвигаясь дальше, когда ресурсов становится недостаточно. 

Типичная колония состоит из одного большого гнезда без крыши, сплетённого из ветвей. Старейшина, при поддержке шамана, выступает в качестве лидера. 

---

!!!Великая цель
Ааракокры наслаждаются тишиной и уединением. Большинство из них мало заинтересовано в общении с другими народами, и ещё меньше заинтересовано про- водить время на земле. Поэтому для ааракокр нужны веские причины, чтобы оставить своё племя и стать искателем приключений. Ни сокровищ, ни славы недостаточно, чтобы соблазнить их оставить своё племя. Обычно в основе выбора пути искателя приключений лежит ужасная угроза их народу, месть или катастрофа. 

Есть ещё два обстоятельства, которые могут стать причиной для становления искателем приключений. Во-первых, у ааракокр есть историческая связь с Герцогами Ветра Аакуа. Некоторые особи чтят эту связь и могут отправиться на поиски потерянных кусков //Жезла Семи Частей//, остатков артефакта, давно сотворённого Герцогами Ветра для победы над чудовищным героем Королевы Хаоса, Мишкой Волчьим Пауком. Когда жезл оказался внутри Мишки, хаос в его крови расколол жезл и разбросал его части по мультивселенной. Восстановление кусочков жезла — это великая честь и дань уважения ваати, сотворившим его, а также возможность восстановить могущественное оружие для борьбы с агентами стихийного зла. 

Во-вторых, ааракокры — заклятые враги элементалей земли, в частности, горгулий, которые служат Огремоху, Князю Земли. Слово, которым ааракокры называют горгулий, дословно переводится как «летающий камень», а бои между ааракокрами и горгульями проходят и на плане земли и на плане воздуха, иногда вырываясь даже на Материальный План. Ааракокры на этом плане могут оставлять свои колонии, чтобы помочь другим гуманоидам в борьбе с культами земли. 

---

!!!Имена ааракокр 
Как и большая часть их речи имена ааракокр содержат щелчки, трели и посвистывания до такой степени, что другим народам сложно их выговорить. Как правило в имени присутствует от двух до четырёх слогов, со звуками, действующими как соединители. При взаимодействии с другими расами ааракокры могут использовать прозвища, полученные от людей, которых они встречали, а также могут представляться сокращёнными формами своего полного имени. Ааракокры любого пола могут иметь одно из этих коротких имён: Айял, Аур, Аэра, Дикек, Зид, Икки, Ирк, Кваф, Квирк, Клик, Оор, Оус, Салик, Уррик или Хик. 

---

!!!Личность ааракокр
Ааракокр редко можно встретить за пределами их деревень, и это проявляется в их особенностях общения с окружающими. Вы можете выбрать или случайно сгенерировать присущую ааракокра причуду из таблицы ниже.

| !к6 |!Причуда |
| 1 |Вы предполагаете, что все, что вам предлагают, бесплатно. Если они хотели, чтобы вы заплатили за это, зачем они вам это дали? |
| 2 |Вы ненавидите спать в помещении, и предпочитаете кровати импровизированный насест в виде ветки покрепче. |
| 3 |Вы не можете не пытаться содержать своих друзей в чистоте, и всегда стряхиваете с них пыль. |
| 4 |Вы часто берете мелкие предметы и безделушки, которые, как вы думаете, другим не особо нужны. |
| 5 |Вы иногда думаете, что дварфы слепы, потому что они живут под землей. |
| 6 |Вы считаете, что никакая другая раса не ценит открытый воздух так сильно, как вы. |
<<<
Я видел её, окутанную крыльями из чистого света, её глаза сияли яростью богов. Костяные дьяволы замерли, прикрывая лица. Ее клинок, а теперь уже меч света, взметнулся раз, другой, третий. Головы дьяволов летели на землю, одна за другой. Так мы и узнали, что в составе нашего разношерстного отряда есть аасимар. 

– Гелдон Пэрл, //о Тирании Драконов //
<<<

Аасимары несут в себе дух небесного света. Они происходят от людей, осененных силой с Горы Селестии, божественных чертогов многих законно–добрых божеств. Аасимары рождаются, чтобы служить поборниками богов, их рождение провозглашается как благодать. Внешне они люди другого мира, ярко выраженные особенности которых выдают их небесное происхождение. 

---

!!!Поборники небес
Аасимары пришли в мир, чтобы служить защитниками добра и закона. Их покровители ожидают, что они будут бороться со злом, служить примером окружающим, и вершить правосудие. 

С раннего возраста, аасимар получает видения и указания от небожителей через сны. Эти сны помогают аасимару сформироваться, давая ему ощущение предназначения и жажду праведности. 

Каждый аасимар может считать определенного небожителя – посланника богов своим наставником. Эти небожители как правило – дэвы, ангелы, которые выступают в роли божественных посланников в смертный мир. 

---

!!!Скрытные странники
Несмотря на то, что аасимары – резкие противники зла, они как правило предпочитают вести себя сдержанно. Иначе аасимары неизбежно привлекают внимание злых культистов, злодеев, и других противников добра, каждый из которых жаждет убить поборника небес, если выпадет шанс. 

Путешествуя, аасимары предпочитают капюшоны, закрытые шлемы, и другие приспособления, которые позволяют им скрывать свою сущность. Они тем не менее не сожалеют, если им приходится нанести открытый удар злу. Аасимары никогда не подвергнут опасности невинных ради сохранения своей тайны. 

---

!!!Наставники аасимаров
У аасимаров, за исключением тех, кто перешел на сторону зла, есть связь с ангельской сущностью. Эта сущность, обычно дэв, наставляет аасимара, хотя эта связь функционирует только во снах. Это не прямой приказ или простая беседа – аасимар получает видения, пророчества, и предчувствия. 

Ангельская сущность не всеведуща. Её наставления основаны на собственном понимании принципов закона и добра, и она может понимать, как противостоять особенно сильному злу, о котором она знает. 

Для дополнения описания характера аасимара, рассмотрите характер ангельского наставника этого персонажа. Таблицы ниже предлагают имя и характер, которые Вы можете использовать, чтобы описать ангельского наставника вашего персонажа. 

| !к6 |!Имя |
| 1 |Тадриэль (Tadriel) |
| 2 |Миландра (Myllandra) |
| 3 |Серафина (Seraphina) |
| 4 |Галадия (Galladia) |
| 5 |Микель (Mykiel) |
| 6 |Валандрас (Valandras) |

| !к6 |!Характер |
| 1 |Поучающий идеалист |
| 2 |Сострадательный и полный надежд |
| 3 |Практичный и беззаботный |
| 4 |Жестокий и мстительный |
| 5 |Строгий и критичный |
| 6 |По–отечески добрый |



''Примечание для мастера : Отыгрыш ангельского наставника''

```
Как Мастер, вы берете на себя роль ангельского наставника аасимара и решаете какой совет или предзнаменования послать во сне.

Дэв, или другой небожитель – это возможность для вас добавить в игру особый элемент отыгрыша. Помните, что Дэвы живут в мире добра и порядка, возведенных в абсолют. Дэвы не понимают компромиссов и трудностей выбора, с которыми сталкиваются смертные. Для дэва аасимар это ученик, который должен соответствовать высоким, а порой даже жестким стандартам. 
```


---

!!!Противоречивые души 
Несмотря на свое небесное происхождение, аасимар смертен и обладает свободой воли. Большинство аасимаров принимают свое предназначение, но некоторые воспринимают свои способности как проклятье. Эти недовольные аасимары обычно просто отстраняются от всего мирского, но некоторые из них становятся служителями зла. По их мнению, приверженность небесным силам является не более, чем промыванием мозгов. 

Злые аасимары – смертельные противники. Сила света, которой они когда–то обладали, преобразуется в отвратительную, иссушающую магию, а их ангельские наставники покидают их. 

Даже аасимары, полностью преданные добру, иногда чувствуют разрыв между двумя мирами. Ангелы, которые направляют их, видят мир издали. Аасимар, который хочет остаться и помочь городу оправиться от засухи, вынужден по указанию ангельского наставника двигаться дальше на более важное задание. Отдаленному ангелу спасение нескольких простых человек кажется незначительным по сравнению с нанесением поражения культу Оркуса. Наставник аасимара мудрый, но он тоже склонен заблуждаться. 

---

!!!Имена аасимаров
Большинство аасимаров рождается среди людей и использует имена, традиционные для своей родной культуры. 
<<<
Музыка – это плод божественного древа, которое вибрирует Словами Созидания. Но вопрос, который я хочу вам задать, может ли бард спуститься к корням этого древа? Может ли кто-то прикоснуться к источнику этой силы? Ах, какую бы музыку это принесло в мир!

— Флетчер Данайриа, мастер бард
<<<


Напевая, и перебирая пальцами по старинному монументу, найденному в заброшенных руинах, полуэльфийка в обветшалом кожаном доспехе перебирает знания, мелькающие в её голове, вызывая силой магии, заключённой в песне, людей, которые построили этот монумент и загадочное предание, которое он изображает. 

Суровый человеческий воин ритмично ударяет своим мечом плашмя о доспех, задавая темп своего военного распева, вдохновляя спутников на отвагу и героизм. Магия его песни укрепляет и подбадривает их. 

Смеясь, и настраивая свою цитру, девушка-гном накладывает тонкую магию на собравшихся дворян, гарантируя, что слова её спутников будут хорошо восприняты. 

Неважно, кем является бард: учёным, скальдом или проходимцем; он плетёт магию из слов и музыки, вдохновляя союзников, деморализуя противников, манипулируя сознанием, создавая иллюзии, и даже исцеляя раны.

Барды приносят облегчение во время смертельной опасности; они делятся мудростью, чтобы устранить невежество; и заставляют забавное казаться великим. Барды являются хранителями древней истории, их песни и истории увековечивают память о великих событиях во времени – знание столь важное, что его запоминают и передают из уст в уста, чтобы оно сохранилось даже когда не останется письменных источников.

Также бард ведет хроники меньших и более современных событий – истории о сегодняшних героях, включая их доблестные подвиги и совсем не впечатляющие провалы. 

---

!!Музыка и магия
В мирах D&D слова и музыка это не просто колебания воздуха, тут они содержат в себе силу. И бард является мастером речей, песен, и волшебства, заложенного в них. Барды говорят, что вся мультивселенная была вызвана к существованию и сформирована словами, которые произнесли боги. И отражения этих первородных Слов Творения до сих пор звучат в космосе. Музыка бардов это попытка уловить эти отзвуки и тонко вплести их в свои заклинания.

Наиболее сильной чертой бардов является их исключительная разносторонность. Многие барды предпочитают держаться не на передовой в бою, используя свою магию для вдохновения союзников и препятствования противникам на расстоянии. Но барды способны защищать себя и в ближнем бою, при необходимости используя магию для укрепления своих клинков и доспехов. Их заклинания чаще предназначены для очарования и создания иллюзий, а не для создания явных разрушений. Они обладают обширными знаниями во множестве тематик и естественные способности, которые позволяют им делать хорошо практически всё. Барды становятся мастерами в тех талантах, к которым стремятся их умы, оттачивая их до совершенства, от музыкальных выступлений до эзотерических знаний.

---

!!Обучение на опыте
Истинные барды не являются обыденной вещью в мире. Не каждый менестрель, поющий в таверне, или шут, скачущий при королевском дворе, является бардом. Чтобы обнаружить скрытую в музыке магию, требуется тяжёлое обучение и некоторая степень природного таланта, чего большинству трубадуров и жонглёров недостаёт. Однако, определить разницу между этими исполнителями может быть трудно. Жизнь барда проходит в странствиях по землям и посвящена сбору знаний, повествованию историй, и существованию за счёт благодарности публики, как и у любого другого артиста. Но глубина знаний, уровень музыкального мастерства и связь с магией ставит бардов на другую ступень от их собратьев.

Барды редко селятся надолго в одном месте, и их естественная тяга к странствиям связана с поиском новых сказаний, обучением новым навыкам и открытию новых горизонтов, что делает карьеру искателя приключений для них естественным призванием. Каждое приключение — это возможность чему-то научиться, попрактиковать разные навыки, проникнуть в давно заброшенные гробницы, обнаружить утраченные произведения магии, расшифровать старые фолианты, пройтись по незнакомым местам, или столкнуться с экзотическими существами. Барды любят сопровождать героев, чтобы засвидетельствовать их свершения из первых рук. Бард, который может рассказать впечатляющую историю из личного опыта, зарабатывает известность среди других бардов. Более того, после повествования такого большого количества историй о великих свершениях героев, многие барды принимают их близко к сердцу и хотят принять роль героя сами.

---

!!Создание барда

Барды процветают за счет историй, не важно, правдивы они или нет. Ваша предыстория и мотивы не так важны, как истории, что ваш персонаж рассказывает о себе. Возможно, у вас было безопасное и ничем не примечательное детство. В нём нет хороших историй, чтобы поведать о них, но вы можете изобразить себя сиротой, воспитанным ведьмой на зловещем болоте. Или ваше детство действительно может быть достойным истории. Некоторые барды приобретают свою волшебную музыку необычайными способами, в том числе под влиянием фей или других сверхъестественных существ.

Были ли вы учеником у мастера, следуя за более опытным бардом, пока не начали следовать своему собственному пути? Или посещали коллегию, где вы обучались знаниям бардов и практиковали свою музыкальную магию? Может быть, вы в молодости сбежали из дома, или став сиротой подружились с бродячим бардом, который стал вашим наставником. Или вы могли быть избалованным знатным ребенком, обученным мастером. Может быть, вы попали в лапы ведьмы, совершив сделку, посулившую вам музыкальный дар вдобавок к вашей жизни и свободе, но какой ценой?

Конечно в мире многие могут исполнить песенку или рассказать хорошую историю, но любой ищущий приключений бард имеет нечто большее чем болтливый язык и мелодичный голос. И все же по-настоящему отличает бардов от всех остальных и друг от друга – их стиль и суть их выступлений. 

Чтобы захватить и удержать внимание аудитории, барды обычно колоритны и превосходны во время выступлений. Самые знаменитые из них по сути являются эквивалентом мировых поп звезд в D&D. Если вы играете бардом, подумайте над тем, чтобы использовать одного из ваших любимых музыкантов как модель для вашего персонажа. Вы можете добавить несколько уникальных аспектов своему персонажу барду, рассмотрев приведенные ниже предложения. 

---

!!!Главное произведение
Каждый успешный бард известен по крайней мере одним произведением искусства, обычно песней или стихом, популярным среди всех кто его слышал. О таких представлениях очевидцы говорят годы спустя, а некоторые зрители навсегда изменили свою жизнь из-за этих переживаний. 

Если ваш персонаж только начинающий, то ваше лучшее произведение скорее всего еще впереди. Но чтобы зарабатывать своей профессией у вас скорее всего уже должно быть одно или два произведения в репертуаре, которые показали себя приятными публике. 

| !к6 |!Главное произведение |
| 1 |«Три Фламбини», непристойная песня о раскованных желаниях и ошибочных опознаниях. |
| 2 |«Вальс Миконидов», жизнерадостная мелодия, которая особенно нравится детям. |
| 3 |«Золотая Задница Асмодея», драматическая поэма, которая по вашим заверениям вдохновлена вашим личным визитом в Авернус. |
| 4 |«Пираты Лускана», ваш рассказ из первых рук о похищении морскими разбойниками в детстве. |
| 5 |«Обод, Два Голубя и Адская Гончая», тонкая пародия над неграмотным дворянином. |
| 6 |«Шут в Бездне», комедийный стих о похождениях шута среди демонов.  |

---

!!!Инструмент
На пути барда к идеальному выступлению и высшему признанию, его инструмент важен не меньше, чем вокальные данные. Качество изготовления инструмента – это критический фактор, конечно; лучшие инструменты создают лучшую музыку, а некоторые барды постоянно ищут улучшения. Возможно также важна развлекательная ценность инструмента; те, что сделаны эксцентрично или из экзотических материалов, скорее всего произведут неизгладимое впечатление на аудиторию. 

Вы можете иметь «непредусмотренный» инструмент, возможно потому что это все, что вы сейчас можете себе позволить. Или, если ваш первый инструмент был подарен вам, он может быть более тщательно проработанным. Вы удовлетворены вашим инструментом или вы стремитесь заменить его чем-то действительно выдающимся?

| !к6 |!Инструмент |
| 1 |Мастерски изготовленная полуросликом скрипка |
| 2 |Горн из мифрила, сделанный эльфами |
| 3 |Цитра, сделанная из паучьего шелка дроу |
| 4 |Оркский барабан |
| 5 |Деревянная квакающая коробочка жаболюдов |
| 6 |Арфа мастера в гномьем дизайне |

---

!!!Неловкое положение
Почти каждый бард хотя бы раз испытывал неприятные ощущения перед аудиторией, и скорее всего вы не исключение. Никто ведь не становится известным сразу, в конце концов; возможно у вас было несколько небольших затруднений на заре карьеры, или может вы некоторое время восстанавливали свою репутацию после одной ужасной ночи, когда судьба задумала для вас театральный провал.

Способы как представление может стать плохим различаются, как рыба в море. Неважно какая беда, может случиться, ведь у барда есть смелость и уверенность в себе, чтобы восстановиться – или продолжая шоу (если возможно) или обещая вернуться завтра с новым выступлением, которое точно всем понравится.

| !к6 |!Неловкое положение |
| 1 |Тот момент, когда ваша комедийная песня – «Выходки Большого Тома», которая, кстати, была превосходна – не очень понравилась Большому Тому. |
| 2 |Дневное представление, когда цирковой медвесыч в епанче сбежал и начал бесчинствовать в толпе алкоголиков-смертников. |
| 3 |Когда ваша открывающая песня была замечательным, но повсеместно ненавистным переложением «Песни о Лягемоте». |
| 4 |Первое и последнее публичное представление «Прожигатель жизни, Мирт». |
| 5 |Тот раз когда ваш парик загорелся и вы его сбросили, что подожгло всю сцену. |
| 6 |Когда вы по ошибке сели на свою лютню во время последнего куплета «Серенады Лунного Света».  |

---

!!!Муза барда 
Естественно, что у каждого барда есть репертуар песен и историй. Некоторые барды – специалисты широкого профиля, могут выбирать из широкого спектра тем для каждого выступления и гордятся своей многогранностью. Другие же подходят более лично к своему искусству, ведомые приверженностью музе – особенной идее, которая вдохновляет большинство этих бардов на то, что они делают перед аудиторией. 

Бард, следующий за музой, обычно делает это чтобы получить более глубокое понимание того, что представляет из себя муза и как лучше подать это понимание другим через выступление. 

Если у вашего барда есть муза, она может быть одной из трех, описанных здесь, или вашего собственного изобретения. 

//''Природа.''// Вы чувствуете родство с миром природы, и его красота и загадочность вдохновляют вас. Для вас, дерево глубоко символично, его корни уходят во тьму неизвестности, чтобы получать силу земли, а его ветви дотягиваются до солнца, чтобы питать цветы и плоды. Природа – древний созерцатель, который видел взлет и падение каждого королевства, даже тех, чьи имена были забыты и только ждут своего открытия. Боги природы делятся своими секретами с друидами и мудрецами, открывая их сердца и разумы новым видам зрения, и подобно им вы понимаете, что ваши творческие способности расцветают на открытом поле колышущейся травы или во время прогулки в тихом благоговении по роще древних дубов. 

//''Любовь.''// Вы хотите определить истинную сущность любви. Хоть вы и не пренебрегаете поверхностной любовью к плоти и формам, более глубокая форма любви, которая может вдохновить тысячи людей или принести каждому счастье – вот в чем вы действительно заинтересованы. Такая любовь принимает множество форм, и вы видите ее присутствие везде – от мерцания красивого драгоценного камня до песни о простом рыбаке, благодарящем море за добычу. Вы следуете по пути любви, самой драгоценной и загадочной эмоции, и ваш поиск наполняет ваши истории и песни жизненной силой и страстью. 

//''Конфликт.''// Драма олицетворяет собой конфликт, и лучшие истории содержат в себе конфликт в качестве ключевого элемента. От утренней истории о вчерашней потасовке в таверне до саги об эпической битве, от ссоры любовников до раздора между могущественными династиями, конфликт вдохновляет таких рассказчиков, как вы, на создание своих лучших работ. Конфликт может вызвать лучшее в некоторых людях, показать их героическую натуру и преобразить мир, но других же он может завлечь во тьму и привести в лапы к силам зла. Вы стремитесь испытать или увидеть все формы конфликтов, большие и малые, изучить этот вечный аспект жизни и увековечить его в ваших словах и музыке.

[img class="centerme" [https://i.imgur.com/Avt4dWs.jpg]]
<<<
Я видел неукротимость варваров на поле боя, и это заставляет меня задуматься о том, какая же сила является источником их ярости.

— Серет, архимаг
<<<


Высокий, закутанный в шкуры дикарь пробирается сквозь метель, сжимая в руке свой топор. Он со смехом бросается на морозного великана, который посмел убить лося в стаде его народа. 

Полуорк рычит на храбреца, осмелившегося посягнуть на его первенство в племени, готовый свернуть ему шею голыми руками, как он поступил с предыдущими шестью соперниками. 

С пеной у рта дварф швыряет свой шлем в лицо напавшему дроу, и резко разворачивается, впечатав бронированный локоть в живот второму.

Несмотря на разнообразие, всех варваров объединяет одно — их ярость. Необузданный, неугасимый и бездумный гнев. Их ярость как свирепость загнанного в угол хищника, как безжалостный удар урагана, как штормовые валы океана.

Ярость некоторых из них проистекает из общения со свирепыми духами животных. Другие черпают её из злости на полную боли и страдания действительность. Но для каждого варвара ярость — это источник не только боевого безумия, но и невероятных рефлексов, стойкости, а также непревзойдённой силы.

Злость, которую чувствует обычный человек, напоминает гнев варвара также, как легкий бриз напоминает яростную грозу. Сила, которая ведёт варвара, выходит из места, превосходящего обычные эмоции, что делает их проявление еще ужасней. Исходит ли импульс ярости изнутри или из формирования связи с духовным животным, варвар в ярости может демонстрировать сверхъестественные проявления силы и выносливости. Вспышка временная, но пока она длится, она захватывает тело и разум, ведёт варвара вперёд несмотря на опасность и раны до тех пор, пока последний враг не падёт. 

---

!!Первобытные инстинкты
Жители посёлков и городов настолько гордятся своей цивилизованностью, отличающей их от животных, словно отрицание собственной природы подчёркивает их превосходство. Варвары же, напротив, считают цивилизованность проявлением слабости. Связь между их животными инстинктами, первобытной энергетикой и свирепой яростью очень сильна. Варвары чувствуют себя неуютно в окружении стен или в толпе, но раскрываются в родных диких просторах, в тундре, джунглях или степях, где их племена живут и охотятся.

Лучше всего варвары проявляют себя посреди хаоса битвы. Они могут впасть в состояние берсерка, утратив контроль над собственной яростью, и получая взамен нечеловеческую силу и стойкость. Варвар может лишь несколько раз воспользоваться резервами собственного гнева, прежде чем ему потребуется отдых, но обычно этих нескольких раз хватает, чтобы справиться с любой угрозой, встреченной на пути.

---

!!Жизнь полная опасностей
Не все члены племён, которых в цивилизованном обществе называют варварами, имеют класс «варвар». Настоящий варвар среди этих людей так же редок, как опытный воин в городе, и он исполняет схожую роль защитника людей и военного лидера. Жизнь в диких местах таит в себе опасность: соперничающие племена, смертельно опасная погода и ужасные чудовища. И варвар бросается в борьбу с этими опасностями, защищая своих людей.

Смелость перед лицом опасности делает варвара превосходным кандидатом в искатели приключений. Кочевой образ жизни часто привычен для примитивных племён, и непоседливая жизнь авантюристов не составляет трудности для варвара. Некоторые варвары скучают по сплочённому семейному укладу своих племён, но в конце концов находят замену в узах, связывающих членов отряда.

---

!!Создание варвара
Когда вы создаёте персонажа варвара, подумайте о том, откуда ваш персонаж прибыл, и о том, какое место в мире он занимает. Поговорите с вашим Мастером о подходящем происхождении вашего варвара. Пришли ли вы из далёких земель, став чужаком на новой территории? Или кампания происходит в жестоких землях, где варвары являются обычным делом?

Что заставило вас вести жизнь искателя приключений? Вы соблазнились переселением на новые земли обещаниями богатства? Вы присоединились к солдатам этих земель перед лицом общей угрозы? Может, чудовища или вторжение орды изгнали вас из вашей родины, сделав безродным беженцем? Может быть, вы были пленником на войне, приведённым в цепях в «цивилизованные» земли и только там завоевавшим свою свободу? Или, возможно, вы были изгнаны своим народом из-за совершённого вами преступления, нарушения табу, или в результате переворота, после которого вы были свергнуты со своего места у власти. 

Играть за персонажа варвара может быть соблазнительно – ведь это простое переложение классического архетипа – дикаря, и обычно глуповатого, который стремглав мчится туда, куда остальные боятся ступать. Но не все варвары в мире скроены именно так, так что вы точно можете придать персонажу своих оттенков. В любом случае, подумайте как добавить несколько особенностей, чтобы ваш варвар отличался от остальных; посмотрите следующие разделы, чтобы почерпнуть идей.

---

!!!Личные тотемы 
Варвары предпочитают путешествовать налегке, редко нося с собой личные безделушки или другое лишнее снаряжение. Их немногочисленные переносимые пожитки часто включают в себя небольшие вещи особого значения. Личный тотем важен, потому что он имеет мистическое происхождение или связан с определенным моментом в жизни персонажа, возможно, с воспоминанием о прошлом варвара или предзнаменованием о том, что лежит впереди.

Личный тотем такого типа может быть связан с духовным животным варвара или может быть тотемом для животного, но такая связь не обязательна. Например, у того, у кого тотемный дух – медведь, может быть перо орла в качестве личного тотема.

Подумайте о том, чтобы создать один или несколько личных тотемов для своего персонажа – объектов, которые имеют особую связь с прошлым или будущим вашего персонажа. Подумайте о том как тотем может влиять на действия вашего персонажа. 

| !к6 |!Тотем |
| 1 |Клок шерсти одинокого волка, с которым ты подружился во время охоты. |
| 2 |Три пера орла были даны тебе мудрым шаманом, который сказал, что они сыграют роль в определении твоей судьбы. |
| 3 |Ожерелье, сделанное из когтей молодого пещерного медведя, которого ты убил своими руками будучи ребенком. |
| 4 |Небольшой кожаный кошель с тремя камнями, олицетворяющими твоих предков. |
| 5 |Несколько маленьких костей первого зверя, которого ты убил, связанных вместе цветной шерстью. |
| 6 |Камень размером с яйцо в форме твоего духовного животного, который однажды появился в твоем поясном кошеле. |

---

!!!Татуировки
Члены многих кланов варваров украшают свои тела татуировками, каждая из которых представляет важный момент в жизни носителя или предков носителя, или символизирует чувство или мироощущение. Как и личные тотемы, татуировки варваров могут быть, а могут и не быть связаны с духовным животным.

Каждая татуировка, которую выставляет напоказ варвар, идентифицирует его личность. Если ваш персонаж носит татуировки, как они выглядят и что они олицетворяют? 

| !к6 |!Татуировка |
| 1 |Крылья орла, широко раскинутые по верхней части спины. |
| 2 |Вытатуированные на тыльных сторонах ладоней лапы пещерного медведя. |
| 3 |Символы твоего клана вытатуированы в узорах из лоз вдоль рук. |
| 4 |Рога лося, вытатуированные на спине. |
| 5 |Образы вашего тотемного животного вытатуированы вдоль вашей ведущей руки. |
| 6 |Глаза волка на спине, чтобы помогать видеть и отгонять злых духов. |

---

!!!Суеверия
Варвары очень по разному воспринимают жизнь. Некоторые верят в богов и ищут напутствия от этих богов в циклах природы и животных, которых встречают. Они верят, что духи обитают в растениях и животных во всем мире, и варвары ищут у них знамений и силы.

Другие же варвары верят только в кровь в своих венах и в сталь в своих руках. Им не нужен невидимый мир, вместо этого они опираются на свои чувства во время охоты и выживают как дикие животные, повадки которых они повторяют.

Оба этих подхода служат основой для суеверий. Эти верования часто передаются в семье из поколения в поколение или их разделяют члены клана или группы охотников.

Если у персонажа варвара есть какие-то суеверия, были ли они воспитаны в тебе семьей, или это результат личного опыта?

| !к6 |!Суеверие |
| 1 |Если потревожить кости умершего, то унаследуешь все проблемы, которые преследовали его при жизни. |
| 2 |Никогда не доверяй волшебникам. Все они – волки в овечьей шкуре, особенно дружелюбные. |
| 3 |Дварфы утратили своих духов, и они почти как нежить. Поэтому они и живут под землей. |
| 4 |Магические вещи приносят неприятности. Никогда не спи с магическим предметом ближе чем в десяти футах от тебя. |
| 5 |Когда гуляешь по кладбищу всегда будь одет в серебро, а не то в твое тело запрыгнет призрак. |
| 6 |Если эльфийка взглянет тебе в глаза, значит она пытается прочесть твои мысли.  |

[img class="centerme" [https://i.imgur.com/VfDnUSP.jpg]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
История гитов уходит корнями в жесточайший поворот судьбы космоса. Вдохновлённые великим вождём, который и дал имя расе, гиты восстали, чтобы свергнуть поработивших их свежевателей разума. Однако, завоевав свободу, две фракции гитов не смогли прийти к согласию о том, какую цивилизацию они будут строить. Это разногласие быстро перешло в открытую враждебность, и две группы отдалились друг от друга, чтобы преследовать собственные цели. Сейчас они остаются жесточайшими врагами, и каждая сторона готова сражаться до смерти, если их пути пересекутся. 

Гитъянки были движимы местью и убеждением, что имеют право забирать всё, что хотят, с миров, по которым пройдутся. Из титанического города Ту’нарат, который находится на Астральном Плане, их рейдеры отправляются на разграбление Материального Плана и иных миров, принося сокровища и рабов в своё неподвластное времени государство. В то же время они охотятся на свежевателей разума, по возможности убивая их в качестве мести за то, что иллитиды сделали с ними в прошлом. 

Гитцераи верят, что путь просвещённой цивилизации лежит в уединении, а не в конфликте. Их преданность принципам порядка настолько сильна, что они могут манипулировать хаосом используя его в своих интересах; так они вырезали себе полностью изолированные крепости на плане Лимбо. Несмотря на то, что гитцераи по своей натуре пацифисты, они разделяют расовую ненависть гитъянки к свежевателям разума и иногда отправляют отряды для уничтожения форпостов иллитидов. 

Если эти две расы объединятся против иллитидов, объединённая сила гитов могла бы склонить чашу весов в их пользу. Но до тех пор, пока гитъянки и гитцераи не отпустят глотки друг друга, достижение окончательной победы над изначальным общим врагом не представляется возможным. 


---
---

!!Гитцераи 


<<<
Не могу с уверенностью утверждать, что лидер гитцераев жив, мёртв или стал нежитью. Но псионическое давление, которое я ощущал во время аудиенции с ним, было столь велико, что я едва мог думать. Интересно, это давление создаёт сам Меняр-Аг-Гит или дюжины последователей, окружающих его тело? Увы, я остался с этой мыслью и неотвеченным вопросом. 

— Морденкайнен, //Том Морденкайнена о врагах//
<<<


Гитцераи появились как раса в конце кровавого восстания гитов против свежевателей разума. Гит по имени Зертимон, нашедший множество последователей во время конфликта, бросил вызов планам Гит и её лидерству. «Гит зла, – провозгласил он, – и она приведёт наш народ во тьму и тиранию, не отличаю- щиеся от навязанных нам иллитидами». 

И теперь, едва разгромив своих заклятых врагов, гиты были ввергнуты в пучину гражданской войны. Как итог конфликта, Зертимон был убит, а его последователи, назвавшие себя гитцераями, ушли на план Лимбо. 

Сегодня, ведомые Великим Гитцераем, Заэритом Меняр-Агом-Гитом, они продолжают вести борьбу с гитъянки и нести возмездие свежевателям разума. Посещая Материальный План и другие миры, они оказывают жёсткое противодействие планам своих врагов по мировому господству. 

---

!!!Порядок в море хаоса 

<<<
Мы, гитцераи, жаждем вызова, чтобы быть готовыми к тому дню, когда Зертимон вернётся к нам. Посему мы отправились в воющий Лимбо, чтобы сделать его нашим новым домом. 

— Учение Меняр-Ага 
<<<


Сильные разумом философы и суровые аскеты, гитцераи проводят свою жизнь в строгой дисциплине. Их общество основано на усилении потенциала разума через медитации, образование и физические испытания. Наиболее совершенные из них являются образцами монашеских принципов гитцераев, но даже те, кто исполняет мирские обязанности в общине, обладают значительной долей той же психической стойкости. 

Жизнь в вечно меняющемся вихре Лимбо требует от гитцераев постоянного использования силы мысли, необходимого для противодействия и сдерживанию хаосу плана. Если бы они не были непреклонны в этом деле, потоки Лимбо сокрушили бы и уничтожили их. 

Цели жизни гитцераев во многом едины и исходят из почитания своих великих героев и желания подражать добродетели этих личностей в своей повседневной жизни. 

---

!!!Города-крепости 

Монастыри гитцераев – это огромные острова стабильности, дрейфующие в хаосе Лимбо. Анархи гитцераев поддерживают стабильность крепостей и управляют их внутренним строением, лишь по мере нужды открывая порталы во внешний мир. Большинство крепостей дрейфуют по Лимбо наугад, но нельзя сказать ни об одной из них, что она изолирована. Когда Меняр-Аг взывает к ним, анархи мгновенно отвечают зову. 

Не считая самих её обитателей, самые защищённые элементы крепости гитцераев – склады с едой. Поскольку постоянная жизнь в Лимбо невозможна, гитцераи сильно зависят от животных и растений, выращенных где-то ещё. Растения выращиваются на гидропонных фермах, а скот – в загонах, в которых хватает света, тепла и всего прочего для их роста. 

Жизнь общины контролируется монахами, которые распределяют обязанности между жителями. Каждый из них принимает участие в тренировках монахов и непрерывном теоретическом обучении, и каждая крепость выделяет для этого необходимое ресурсы и учителей по мере необходимости. И хотя крепости не выходят из радиуса досягаемости психического контакта, каждая из них спроектирована так, чтобы быть самодостаточной. 

---

!!!Гитцераи в мире 

<<<
Зертимон не ждёт, что мы будем терпеливо ждать его возвращения. Вместо этого мы должны дать путь его усилиям, тем самым приблизив наш золотой век. 

— Учение Меняр-Ага 
<<<


Нет ничего необычного в том, что гитцераи предпочитают оставаться в Лимбо. Они создали высокоорганизованную цивилизацию в мире, который они могут изменять по своему желанию. Когда они посещают другие миры, в том числе Материальный План, то чувствуют себя некомфортно в условиях неизменности окружения. Но несмотря на своё нежелание путешествовать, гитцераи регулярно посылают группы из Лимбо в другие миры, где те противодействуют силам гитъянок и свежевателей разума. 

---

!!!Распространяя Слово 

Гитцераи видят в своём деле не что-то обыкновенное, а то, что они хотят нести другим. Руководствуясь этим, они взяли на себя инициативу проповедовать философию Зертимона и делиться с окружающими знания о том, как бороться с иллитидами и гитъянки. С этой целью зерты иногда отправляются на другие планы с намерением основать новый монастырь или присоединиться к существующему. Эти «миссионеры» всегда ищут тех, у кого есть псионический потенциал, и кто может использовать эти силы против врагов гитцераев. Чаще всего они действуют тайно, преследуя свои цели и пытаясь пополнить ряды своих союзников. Кто может точно сказать, сколько монастырей на самом деле являются секретными вербовочными базами гитцераев? 

---
---

!!Гитъянки 

<<<

Представьте, что у вас нет никаких понятий о семье. Вам всё время твердят, что другие расы хуже вашей и что только вера в Почитаемую Королеву хранит вас от вероломных гитцераев и поедающих мозг иллитидов. Вы проходите годы тяжёлого труда и обучения, затем отправляетесь на опасную охоту за иллитидами. Провал – это смерть, но, если у вас получится, вы попадаете в Астрал, где будете приняты в общество, состоящее из подобных вам. 

Нечего сказать, Влаакит умеет воспитывать фанатиков. Но, увы, они бесполезны в начинаниях с долгосрочными последствиями. 

— Морденкайнен, //Том Морденкайнена о врагах//
<<<


Отвоевав свою свободу у свежевателей разума, гитъянки стали развращёнными налётчиками и опустошителями, ведомыми ужасающей королевой-личом Влаакит. Она живёт на Астральном Плане в городе Ту’нарат, построенном на и в трупе божества. 

---

!!!Почитаемая королева 

<<<
Убивать во имя её – наше высшее служение. Умереть во имя её – наш последний акт почтения. 

— Мелда, рыцарь гитъянки  
<<<


Влаакит находится в центре всего, что связано с гитъянками. Она управляет ими во всех сферах деятельности, требуя и получая абсолютное повиновение. 

После того как гиты свергли свежевателей разума, Влаакит сыграла решающую роль в защите гитъянки, находящихся под её властью, от прямых атак своих собратьев. Воспользовавшись своими познаниями в тайной магии, она помогла гитъянки заложить нерушимую крепость на Астральном Плане, откуда она начала планировать удары по ненавистным свежевателям разума и вероломным гитцераям. 

Влаакит укрепила своё положение верховного правителя гитъянки с помощи Великой Декларации, которая определила всеобъемлющую миссию гитъянки. Рождённые и обученные для противостояний, они не знали иной жизни, кроме как на войне. Им нужны были чёткая цель и сильный лидер, который поведёт к ней, Влаакит дала и то, и другое. 

Она постановила, что, победив свежевателей разума, гитъянки займут их место правителей Материального Плана. Множество миров Материального Плана будут садами гитъянки, где они будут собирать урожай, когда сочтут нужным. Астральный План будет их домом, потому что в этой вневременной области они смогут игнорировать потребности в еде и воде, а также другие повседневные проблемы, которые беспокоят низшие расы. 

---

!!!Рождённые служить 

<<<
Под властью иллитидов мы и гитъянки сражались и умирали в тысяче миров за безжалостных господ. Под властью Влаакит наши собратья сражаются и умирают в тысяче миров за безжалостную госпожу. И они называют это освобождением? 

— Адака Беспощадная Ладонь, гитцерай монах 
<<<


Гитъянки растят свой молодняк в скрытых яслях, которые они строят в отдалённых местах на Материальном Плане. Такие меры необходимы, поскольку рождение и взросление невозможно на Астральном плане, обитатели которого не стареют. Взрослые надзиратели тут тренируют молодых гитъянок пользоваться своими психическими и физическими способностями. 

Гитъянки вылупляются из яиц. Каждый новорождённый приходит в мир вместе с другими яйцами, преднамеренно отложенными так, чтобы вылупиться в одно и то же время. Поскольку взрослые гитъянки должны вернуться на Астральный План, чтоб сильно не постареть, состав инструкторов постоянно меняется, причём ни один взрослый не остаётся тут дольше, чем на несколько месяцев, и ни один не возвращается на второй срок. 

Обучение, которое проходят молодые гитъянки жестоко и сурово. По мере взросления требования с каждого ученика становятся всё больше, а наказания за отставание – всё строже. Для гитъянок лучше, чтобы слабаки умирали на тренировках, чем проваливали задания и подвергали опасности отряд. 

К тому времени, как группа гитъянок достигает совершеннолетия, они годами слушали рассказы про Влаакит и её бессмертных воинов, обитающих в серебристой пустоте. В последнем испытании группа гитъянок, вступающих во взрослую жизнь, должна убить свежевателя разума в качестве священного ритуала прохода, прежде чем им разрешат присоединиться к народу, живущему на Астральном Плане. Когда победители впервые входят в Ту’нарат, они несут охотничьи трофеи непосредственно Влаакит. Она принимает подарок и начинает ритуальное песнопение, которое знаменует приём молодняка в общество гитъянок. 

---

!!!Безжалостные мародёры 
Когда Влаакит отдаёт приказ о подготовке очередного рейда, Ту’нарат оживает в предвкушении. Рыцари и другие солдаты, выбранные для участия в миссии, считают это высочайшей привилегией. Во славу Влаакит все рейдеры стараются максимально жестоко обойтись с целью – они убивают без разбора, берут понравившиеся сокровища и оставляют за собой только разрушение. 

Когда судно гитъянок возвращается с рейда, оно под завязку загружено трофеями. Влаакит не ставит специфических требований, оставляя каждому отдельному рейдеру свободу в выборе того, с чем они вернутся. Одни ищут экзотические специи и травы, другие мародёрствуют в поисках свитков и книг. В результате Ту’нарат заполнен (скорее завален) почти бесконечным количеством вещей размером от громадных зданий до мельчайших образцов изысканных ювелирных украшений, которые гитъянки награбили на других планах. 

---

!!!Праздные дилетанты
Как раса, выведенная свежевателями разума для боя, гитъянки, пока были порабощены, не знали ничего другого. Теперь они не воюют постоянно, и держать народ чем-то занятым, возможно, самая большая проблема, с которой сталкивается Влаакит. 

Когда гитъянки не участвуют в рейдах или других миссиях во имя Влаакит, они наслаждаются апатичной жизнью в Ту’нарате. В астрале время не идёт, поэтому гитъянкам не нужно трудиться, чтобы получить воду и пищу. Чтоб они не отупели, Влаакит приказывает им заниматься различными искусствами и науками. Она регулярно организует соревнования, игры, связанные с поиском предметов, и другие испытания, чтоб занять слуг целенаправленной деятельностью, однако привлекательность таких развлечений быстро спадает через некоторое время. Большинство жителей Ту’нарата, когда они не призваны в рейде или на другую миссию, потакают себе во всём, в чём хотят. 

Гитъянки, располагающие бесконечным количеством времени, жаждут новизны. Они ожидают, что каждый вернувшийся рейд даст им новые виды развлечений. Эта озабоченность новизной – краеугольный камень культуры гитъянок. Они поверхностно занимаются искусствами, но никогда не достигают в них мастерства. Они стоят среди сокровищ бесчисленных миров, но никогда истинно не восхищаются ими. Гитъянки переходят от темы к теме, от ремесла к ремеслу, никогда подолгу не останавливаясь на чём-то одном. Ту’нарат усеян полувысеченными скульптурами, недописанными фресками и прочими видами незаконченных произведений. Гитъянки просто бросают свои задумки, когда те им наскучат, и все их начинания заканчивались именно так. 

---
---

!!!Алфавит гитов 
Гиты используют письменность, состоящую из буквенных символов, объединённых в круглые кластеры, называемые тир’су. Каждая «спица» такого колеса соответствует букве алфавита. Каждый кластер символов – это слово. Множество тир’су формируют фразы и предложения. И гитъянки, и гитцераи говорят на Гитском, но у каждой расы свои чётко отличимые диалект и акцент. Также у них различаются способы написания тир’су. Гитъянки пишут тир’су по часовой стрелке, начиная с вершины. Гитцераи используют те же символы, но пишут свои тир’су против часовой стрелки, начиная снизу. 

---

!!!Имена гитцераев
''Мужские имена:'' Грес, Дак, Дуурт, Калла, Ксорм, Муург, Нурм, Ферзт, Хурм, Шракк

''Женские имена:'' Адака, Адея, Витхка, Изера, Иммилзин, Лорая, Увея, Эзхелия, Элла, Янара

!!!Имена гитъянок
''Мужские имена:'' Виран, Гаат, Кар’и’нас, Кюит, Ликус, Рис’а’ан, Тропос, Элирдайн, Яа’адок

''Женские имена:'' Аарил, Б’нур, Вайра, Джен’лиг, Зар’рит, Йиссуне, Куорстил, Пах’зел, Сиррут, Фенелзи’ир

<<<
Худощавый, с пшеничного цвета волосами, орехово-коричневой кожей и удивительно бирюзовыми глазами, Бюргел был вдвое ниже Аэрона, и должен был взобраться на табурет, чтобы посмотреть в глазок. Как большинство домов в Оубле, этот был построен для людей, и более мелкие жители справлялись с неудобствами, как могли. 

Зато размеры апартаментов как раз позволяли Бюргелу разместить все его принадлежности гномьего размера. Передняя комната была его мастерской и вмещала невообразимое разнообразие инструментов: молотки, зубила, пилы, отмычки, разноцветные линзы, ювелирные лупы, банки с порошками и измельчёнными ингредиентами для сотворения заклинаний. Жирный серый кот, фамильяр мага, лежал, свернувшись на гримуаре. Он открыл жёлтые глаза, смерил Аэрона презрительным взглядом, затем снова заснул. 

— Ричард Ли Байерс, //Чёрный букет //
<<<

Нескончаемый гул трудолюбия слышен там, где селятся сплочённые общества гномов. Гул пронзают и звуки погромче: то тут, то там раздаётся скрежет шестерней, отголоски взрыва, возгласы удивления или триумфа, и, особенно часто — звонкий смех. Гномы восторгаются жизнью, каждый миг наслаждаясь новым изобретением, открытием, исследованием, созиданием или шалостью.

---

!!!Задорный вид
Гномы очень энергичны, и кажется, что каждый сантиметр их крошечного тела излучает энтузиазм и жизнелюбие. В среднем гномы чуть выше 90 см, и весят около 20 кг. Их смуглые или коричневые лица обычно украшены широкими улыбками (над которыми нависают их выдающиеся носы), и их светлые глаза светятся возбуждением. Их русые волосы обычно торчат в разные стороны, словно выражая неослабевающий интерес ко всему на свете.

Индивидуальность гномов ярко выражается в их внешности. Гномы мужчины содержат свои бороды, в отличие от растрёпанных волос, аккуратно подстриженными, но часто расчёсывают их на несколько прядей, или придают забавную заострённую форму. Их одежда, обычно спокойных коричневых тонов, изящно украшена вышивкой, тиснением, или расшита драгоценными камнями.

---

!!!Приверженность восторженности
По мнению гномов, жизнь — замечательная штука, и они готовы до капли осушать такой источник наслаждения в течение трёх-пяти отмеренных им веков. Люди могут задаваться вопросом — как не умереть со скуки за столь длинную жизнь, эльфы долгие годы могут смаковать красоту окружающего их мира, и, похоже, лишь гномов беспокоит, что даже за столь щедро отпущенный срок им не удаётся переделать и пересмотреть всё, что хочется.

Разговаривают гномы так, будто их мысли не успевают выбираться из их голов. При этом даже когда они делятся идеями и мнениями на всевозможные темы, им удаётся внимательно выслушивать других, вставляя уместные возгласы удивления, и проявляя уважительные знаки внимания.

---

!!!Светлые норы
Гномы делают свои дома в холмистых, лесистых землях. Они живут под землёй, но больше любят свежий воздух, чем дварфы, наслаждаясь живой природой поверхности всякий раз, когда могут. Их дома хорошо скрыты с помощью хитроумных устройств и простых иллюзий. Желанные гости быстро оказываются в светлых тёплых норах. Те, кого не ждут, вряд ли смогут эти норы даже отыскать.

Гномы, поселившиеся в землях людей, как правило являются огранщиками драгоценных камней, инженерами, мудрецами или жестянщиками. Некоторые человеческие семьи держат гномов преподавателей, чтобы их воспитанники наслаждались сочетанием серьёзного обучения и радостного удовольствия. Гном может обучать несколько поколений одной и той же семьи в течение своей долгой жизни.

Хотя гномы любят шутки любого рода, особенно каламбуры и шалости, они также посвящают себя решению более серьёзных задач, которые они ставят перед собой. Многие гномы являются умелыми инженерами, алхимиками, жестянщиками и изобретателями. Они готовы к совершению ошибок и смеются над собой в процессе совершенствования своего дела, принимая смелые (иногда отчаянные) решения, и мечтая о большем.

---

!!!Всегда благодарные
Гномы не выглядят опасными, и могут хорошей шуткой быстро разрушить подозрения. Обычные люди относятся к ним с любопытством, если никогда их прежде не видели, и вряд ли будут враждебны к ним. Редко можно встретить гнома, который был бы враждебным или злым, если он не перенёс тяжёлую травму. Гномы знают, что большинство рас не разделяют их чувство юмора, но они наслаждаются любой компанией, как и всем, что они делают.

---

!!!Исследование мира
Любопытные и импульсивные гномы могут пуститься в приключения, чтобы увидеть мир или из любви к исследованиям. Будучи любителями драгоценных камней и других мелких предметов, некоторые гномы рассматривают приключения как быстрый, хоть и опасный, путь к богатству. Вне зависимости от того, что побудило их к приключениям, гномы, которые приняли этот образ жизни, получают от него столько удовольствия, сколько и от любой другой деятельности, которой они занимаются, иногда к великому неудовольствию своих товарищей по приключению.

---

!!!Имена гномов
Гномы любят имена, и большинство из них имеют по полдюжины имён или около того. Мать гнома, отец, старейшина клана, тёти и дяди: каждый даёт гному имя, а также различные прозвища, которые могут на долгое время прилипнуть, а могут и не прилипнуть. Имена гномов, как правило, являются вариациями имен предков или дальних родственников, хотя некоторые из них придумывают абсолютно новые. Когда гномы имеют дело с людьми и другими, кто «зажат» в именах, они используют не более трёх имен: личное имя, название клана и прозвище, выбирая среди них те, которые наиболее забавно звучат.

''Мужские имена:'' Алвин, Алстон, Боддинок, Брок, Бюргел, Варрин, Вренн, Гербо, Гимбл, Глим, Джебеддо, Димбл, Зук, Келлен, Намфудл, Оррин, Рундар, Сибо, Синдри, Фонкин, Фрюг, Элдон, Эрки

''Женские имена:'' Бимпноттин, Брина, Вейуокет, До- нелла, Дувамил, Занна, Карамип, Карлин, Лилли, Лорилла, Лупмоттин, Маднаб, Никс, Нисса, Ода, Орла, Ройвин, Тана, Шамил, Эливик, Элиджобелл, Элла

''Названия кланов:'' Берен, Гаррик, Даергел, Мёрниг, Накл, Нингел, Раулнор, Тимберс, Турен, Фолькор, Шеппен

''Прозвища:'' Барсук, Босоног, Двазамок, Колотушка, Ку, Ним, Пеплосерд, Пивохлёб, Плащ, Пок, Самоцвет, Стамблдак, Фниппер

---

!!!Больше о гномах

Том Морденкайнена о врагах, Глава 5: Полурослики и Гномы, с. 106

<<<
Гоблины глупы, но совсем не идиоты.

— Оркболг, //Убийца гоблинов//
<<<


Гоблины занимают непростую нишу в полном опасностей мире, поэтому они набрасываются на любых существ, которых, по их мнению, они смогут запугать. Хитрые в сражении и жестокие в победе, гоблины жалкие и услужливые в поражении, как и в их собственном сообществе, где низшие касты должны преклоняться перед высшими, и где племена гоблинов пресмыкаются пред другими гоблиноидами. 

---

!!!Хозяева зверей и рабовладельцы 
Гоблины знают, что они – слабая, не очень умная раса, которую легко подчинят себе более крупные, более умные, более организованные, более свирепые или лучше владеющие магией существа. Их бог в конце концов был побежден маглубиетом, и теперь, когда могущественный призовет их, даже их души принадлежат ему. Именно осознание этого вынуждает их подчинять себе других существ, как только это возможно – жизнь гоблинов коротка. 

Гоблины стремятся заманить в ловушку и поработить любое существо, с которым они сталкиваются, но они бегут от противника, который кажется им слишком опасным. В километрах вокруг своего логова они понаставили ямы, ловушки и сети, чтобы ловить неосторожных, и когда их охотничьи патрули сталкиваются с другими существами, они всегда ищут способ захватить противников вместо того, чтобы убить их. Гоблины, которые натыкаются на границу общества, сначала проверяют его обороноспособность, крадя предметы, и, если эти преступления остаются безнаказанными, они начинают красть людей. 

Порабощенные существа получают наихудшее обращение, которое гоблины могут дать, не лишая рабов работоспособности. Но гуманоиды и монстры, которые особенно умелы или которые могут оказать необычные услуги, рассматриваются как любимые питомцы (с которыми иногда тоже плохо обращаются). 

Фактически любое существо, которое можно силой заставить служить, можно найти в племени гоблинов, но крысы и волки присутствуют там почти всегда. И те, и другие живут бок о бок с гоблинами так же давно, как собаки и лошади с людьми, и в обществе гоблинов их содержат для тех же целей. 

---

!!!Дела семейные 
Племя гоблинов имеет четырехуровневую кастовую систему, состоящую из надсмотрщиков, охотников, собирателей, и париев. Статус каждой семьи в племени основан на её важности для выживания племени. Семьи, которые принадлежат к более высоким кастам, удерживают свой статус, не делясь своими знаниями и навыками с другими семьями, а у низших каст есть мало шансов улучшить свое тяжкое положение. 

Чужаки, которые не понимают социальную систему гоблинов, иногда удивляются тому, как разные касты взаимодействуют с ними. Один человеческий воин может спугнуть дюжину собирателей, только чтобы затем испытать шок, когда на него злобно нападут два охотника. Пойманная группа захватчиков может висеть в сети, когда десятки гоблинов проходят мимо и не обращают на них внимания, пока не появится группа собирателей. 

//''Кнутобои.''// В гоблинском племени наибольшую близость к понятию благородства имеет каста кнутобоев – семейства гоблинов, обученные сражаться, и также обладающие ключевыми навыками, такими как стратегия, обустройство ловушек, приручение животных, горное дело, плавка, ковка и религия. Если у племени есть какой–либо заклинатель, он тоже относится к этой касте. Надсмотрщики следуют за вождем племени, и кнутами доносят его волю до других гоблинов. 

//''Охотники. ''//Семьи гоблинов, которые умеют пользоваться оружием, но не посвящены в какие–либо другие специальные знания, относятся ко второй по статусу касте в племени. Охотники часто – лучшие ездоки на волках и знают территории, наиболее отдаленные от логова племени. В мирное время они охотятся на дичь, а в бою они служат разведчиками, пехотинцами и кавалерией. 

//''Собиратели.''// Семьи из третьей касты ответственны за добывание еды из окружающего пространства, беря то, что растет само, или воруя то, что смогут. Собиратели также занимаются сельским хозяйством, которое гоблины способны вести и обязаны проверять ловушки с захваченными людьми и животными. Собиратели обычно не вооружены оружием серьезнее чем лассо или нож, но они часто носят с собой сети, калтропы, лассо и узду для того, чтобы управлять захваченными существами. Эти гоблины готовят для племени, а во времена войны они также ответственны за создание ядов. 

Собиратели, и стоящие ниже их парии, в бою очень боятся за свои жизни, полагая, что у кнутобоев и охотников есть специальные знания для того, чтобы выжить. Эти члены низших каст и дают гоблинам их репутацию трусов. 

//''Парии. ''//Некоторые семейства гоблинов, стоящие ниже всех, состоят из самых тупоголовых, наименее образованных и самых слабых гоблинов. Они получают худшие рабочие места: чистить загоны животных, убирать за другими гоблинами и выполнять любые каторжные работы, такие как рытье шахт. Если у племени гоблинов есть рабы, чтобы делать часть этой работы, семьи париев наслаждаются возможностью контролировать и управлять этими существами, у которых вообще нет никакого статуса. 

---

!!!Символы статуса 
Гоблины любят символы власти, поэтому вождь племени часто берет такие атрибуты всюду, куда он или она идет. Такой символ может иметь обычную форму, как корона или трон, но также может быть и особенным предметом, как волчье седло с высокой спинкой или цветные ботинки. Касты в племени также имеют символы, указывающие на членство или родство, но эти символы редко значат одно и то же в разных племенах и редко о чем–либо говорят другим существам. Некоторые возможные символы положения в обществе даны в таблице символы статуса. Каста или босс могут демонстрировать больше чем один из предметов. 

---

!!!Больше о гоблинах

Справочник Воло по монстрам, Глава 1: Происхождение монстров, Гоблиноиды: Войско завоевателей, с. 40
<<<
Голиафы могут быть полезными союзниками, но никогда не обращайтесь к ним за помощью, если вы слабы. Они столь же тверды и неумолимы как горный камень, столь же холодны и безжалостны как жестокие, холодные ветры. Если вы обращаются к ним, будучи в силе, они могут посчитать Вас достойным союза. 

— Тордек, //Путеводитель по горным пикам //
<<<


На высоких горных пиках – выше склонов, на которых растут деревья, там, где разреженный воздух и прони- зывающие ветра – обособленно живут голиафы. Мало людей, которые заявляют, что видели голиафа, и еще меньше тех, кто утверждает, что подружился с одним из них. Голиафы кочуют по суровому царству скал, ветра и холода. Их тела, выглядящие будто вырезаны из горного камня, обладают огромной физической силой. Их дух, влекомый блуждающим ветром, заставляет их кочевать от вершины к вершине. Их сердца, наполненные суровым почтением к их холодному миру, обязывают каждого голиафа заслужить свое место в племени или умереть пытаясь. 

---

!!!Ведомые соперничеством 
Каждый день бросает голиафу новый вызов. Еда, вода и убежище редко встречаются в высокогорье. Одна ошибка может принести гибель всему племени, в то время как героическое усилие одного может гарантировать выживание всей группе. 

Голиафы таким образом полагаются на самодостаточность и собственные умения каждого. У них есть привычка вести счет, подсчитывая свой вклад во что-то и сравнивая его со вкладом других. Голиафы любят побеждать, но они рассматривают поражение как причину усовершенствовать свои навыки. 

У этой приверженности соперничеству есть и темная сторона. Голиафы – свирепые конкуренты, но больше прочего их ведет желание превзойти свои прошлые деяния. Если голиаф убил дракона, он или она будет искать более крупного и более сильного дракона, чтобы сразить и его. Редкий голиаф – искатель приключений доживает до старости, поскольку большинство умирает, пытаясь превзойти собственные подвиги. 

---

!!!Честная игра 
Для голиафов соревнование существует только когда оно проходит в равных условиях. Соревнование определяет талантливость, преданность и целеустремленность. Это факторы позволяют выживать на их родине, не полагаясь на магические предметы, деньги или прочее, что может склонить чашу весов в одну или другую сторону. Голиафы с радостью используют такие преимущества, но они делают это с опаской, помня, что такое преимущество может в любой момент пропасть. Голиаф, который слишком сильно на них полагается, может стать самонадеянным, а в горах это верный путь к беде. 

Эта черта проявляется наиболее сильно, когда голиафы взаимодействуют с другими народами. Отношения между крестьянами и знатью озадачивают голиафов. Если королю не хватает ума или лидерства, чтобы вести за собой, то очевидно, что его место должен занять самый талантливый человек в королевстве. Голиафы редко оставляют такие мнение при себе, и высмеивают людей, которые полагаются на общественные структуры или правила, чтобы сохранить власть. 

---

!!!Естественный отбор 
Среди голиафов любой взрослый, который не приносит пользу племени, изгоняется. У одного голиафа мало шансов выжить, особенно у старого или слабого. У голиафов мало жалости ко взрослому, который не может позаботиться о себе, хотя больного или раненого лечат в следствии представлений голиафов о честной игре. 

Травмированный надолго голиаф не хочет быть бременем для племени. Как правило, такой голиаф умирает, пытаясь работать как здоровый, или убегает ночью, чтобы встретить свою судьбу на холоде.

В некоторых случаях, стремление голиафа превзойти самого себя приводит его к неизбежному поражению и смерти. Для голиафа намного лучше умереть в бою, на пике силы и умения, чем долго и медленно умирать от старости. Крайне мало людей когда-либо встречало пожилого голиафа, и даже эти голиафы, которые покинули свое племя, борются с желанием расстаться с жизнью, поскольку их физические навыки приходят в упадок. 

Из–за опасности их образа жизни, племена голиафа страдают от хронической нехватки опыта, из-за отсутствия старейшин. Они надеются на врожденную мудрость своих лидеров, поскольку редко могут рассчитывать на мудрость, обретенную с возрастом. 

---

!!!Имена голиафов 
У каждого голиафа есть три имени: имя от рождения, данное матерью и отцом новорожденного, прозвище, данное вождем племени, и название семьи или клана. Имя от рождения длиной до трех слогов. Название клана – пять и более слогов с гласной на конце. 

Имена от рождения редко связано с полом. Голиафы видят женщин и мужчин как равных во всем, и общества с разделением ролей между полами либо озадачивают их, либо вызывают насмешку. Для голиафа именно тот, кто лучше делает какую то работу, должен её выполнять. 

Прозвище голиафа — это характеристика, которая может измениться по прихоти вождя или старейшины племени. Оно описывает любой поступок, успех или провал, совершенный голиафом. Голиафы дают прозвища своим друзьям из других рас, и изменяют их, чтобы показать совершенные ими дела. 

Голиафы представляются всеми тремя именами, перечисляя их в таком порядке: имя от рождения, прозвище, название клана. В обычной беседе они используют свое прозвище. 

''Имя от рождения:'' Аукан, Вауния, Вимак, Гаи-Ал, Гаусак, Иликан, Кеоти, Куори, Ло-Ка, Мавеис, Маннео, Нала, Орило, Пааву, Петани, Сасем, Талай, Эглат, Юфал.

''Прозвище:'' Бесстрашный, Взывающий к заре, Вывихнутая конечность, Вырезающий уступы, Глядящий в небо, Далеко прыгающий, Дважды осиротевший, Нашедший кремень, Одинокий охотник, Остроглазый, Рисующий слова, Скручивающий нить, Сшибающий корни, Твердая рука, Убивший медведя.

''Название клана:'' Анакалатай, Ваймей-Лага, Гатаканаси, Каладжано, Колаи-Джилиана, Кото-Олави, Оголакану, Тулиаджа, Тунукаласи, Эленитино.
<<<
«Ты опоздал, эльф!» — послышался знакомый грубый голос. Бренор Боевой Молот встал на труп убитого им йети, не обращая внимания на то, что под ним корчился его эльфийский друг. Несмотря на испытываемые неудобства, Дриззт всё же был рад видеть этот большой нос и рыжую бороду. «Я так и знал, что ты вляпаешься в какую-нибудь историю и мне снова придётся тебя вытаскивать!». 

— Р. А. Сальваторе, //Магический кристалл //
<<<

Полные древнего величия королевства и вырезанные в толще гор чертоги, удары кирок и молотков, раздающиеся в глубоких шахтах и пылающий кузнечный горн, верность клану и традициям и пылающая ненависть к гоблинам и оркам — вот вещи, объединяющие всех дварфов.

---

!!!Невысокие и крепкие
Смелые и выносливые дварфы известны как опытные воины, шахтёры, камнетёсы и металлурги. Хотя они и не превышают 150 см в высоту, дварфы настолько широкоплечие и плотные, что весят столько же, сколько превосходящий их в росте на 60 см человек. Их отвага и выносливость также не уступает представителям более высоких народов.

Кожа у дварфов бывает от тёмно-коричневой до светлой, с красным оттенком. Наиболее распространённые оттенки — светло-коричневый или смуглый, как разные виды земли. Их волосы, которые они носят длинными, но собранными в простые причёски, обычно чёрного, серого или коричневого цвета, но у дварфов с бледной кожей часто встречаются рыжие волосы. Дварфы мужчины очень ценят свои бороды и тщательно за ними ухаживают.

---

!!!Долгая память, долгие обиды
Дварфы могут жить более 400 лет, и старейшие из них часто помнят этот мир сильно отличным от нынешнего. Такая долговечность даёт им особый взгляд на мир, которого лишены короткоживущие расы вроде людей и полуросликов.

Дварфы стойкие и выносливые, как горы, в которые они влюблены. Они стоически противостоят проходящим столетиям и почти не меняются. Они уважают традиции своих кланов, прослеживая их родословную до самого основания древнейших твердынь на рассвете молодого мира, и не отказываются от этих традиций с лёгкостью. Частью этих традиций является преданность богам дварфов, которые поощряют присущие дварфам идеалы: прилежный труд, сноровку в бою и любовь к кузнечному горну.

Дварфам присущи непреклонность и лояльность, верность своему слову, решительность в действиях, временами переходящие в упрямство. У многих дварфов сильно развито чувство справедливости, и они медленно прощают причинённое им зло. Зло причинённое одному дварфу, это зло, причинённое всему его клану. Таким образом, попытка отомстить одному дварфу может превратиться во вражду, захлестнувшую целый клан.

---

!!!Кланы и королевства
Королевства дварфов простираются глубоко под горами, где дварфы добывают драгоценные металлы и камни и куют чудесные вещи. Они любят красоту драгоценных металлов и ювелирных изделий, и у некоторых дварфов эта любовь может превратиться в алчность. Ценности, которые они не могут найти в своих горах, они получают благодаря торговле. Они не любят кораблей, и предприимчивые люди и полурослики часто ведут торговлю дварфскими товарами через водные пути. Благонадёжным представителям этих рас всегда рады в дварфских поселениях, хотя некоторые места там закрыты даже для них.

Главным элементом дварфского общества является клан, и дварфы очень высоко ценят социальное положение. Даже дварфы, живущие вдалеке от своих королевств, хранят свою принадлежность к клану, узнают относящихся к нему соплеменников и взывают к именам предков, произнося клятвы и выкрикивая проклятья. Лишение клана это худшая судьба, способная выпасть на участь дварфа.

Дварфы в чужих землях обычно работают ремесленниками, чаще всего оружейниками или ювелирами. Некоторые становятся наёмниками или телохранителями, очень ценимыми за их храбрость и преданности.

---

!!!Боги, золото, клан
Дварф, выбравший путь искателя приключений, может руководствоваться жаждой сокровищ — для личного пользования, для достижения определённой цели или даже ради альтруистического желания помочь другим. Другими может двигать божественное озарение, прямой приказ, или желание принести славу одному из дварфских божеств. Клан и предки тоже являются одними из сильнейших мотивов. Дварф может искать способ вернуть утерянную честь клана, отомстить древнему врагу или вновь обрести место в клане, откуда был изгнан. Или он может отправиться на поиски топора, утерянного предком на поле брани столетия назад.

---

!!!Имена дварфов
Имя дварфу даётся старейшиной клана согласно традиции. Каждое подходящее имя используется из поколения в поколение. Имя дварфа принадлежит клану, а не отдельному дварфу. Дварф, опорочивший своё имя, лишается его, и согласно законам, ему запрещается использовать любое другое дварфское имя.

''Мужские имена:'' Адрик, Альберих, Баренд, Баэрн, Броттор, Бренор, Вондал, Вэйт, Гардаин, Даин, Даррак, Делг, Килдрак, Моргран, Орсик, Оскар, Рангрим, Рюрик, Таклинн, Торадин, Тордек, Торин, Травок, Траубон, Ульфгар, Фаргрим, Флинт, Харбек, Эберк, Эйнкиль

''Женские имена:'' Артин, Бардрин, Вистра, Гуннлода, Гурдис, Дагнал, Диеза, Илде, Катра, Кристид, Лифтраса, Мардред, Одхильд, Рисвин, Саннл, Торбера, Торгга, Фалкрунн, Финеллен, Хельджа, Хлин, Эльдет, Эмбер

''Названия кланов: ''Балдерк, Боевой Молот, Горунн, Данкил, Железный Кулак, Крепкая Наковальня, Ледяная Борода, Лодерр, Лютгер, Огненная Кузня, Рамнахейм, Стракелн, Торунн, Унгарт, Холдерхек

---

!!!Больше о дварфах

Том Морденкайнена о врагах, Глава 3: Дварфы и Дуэргары, с. 65
Большинство людей, размышляя о других планах, считают их очень далёкими мирами, но планарное влияние может проявиться в любом месте мира. Иногда оно проявляется в существах, рождённых в результате определённых обстоятельств, и несущих силу других миров в своей крови. Дженази — один таких народов, это потомки гениев и смертных. 

Стихийные Планы часто неприветливы к уроженцам Материального Плана: сокрушительная земля, иссушающее пламя, безграничные небеса и бескрайние моря делают посещение этих мест опасным даже на короткое время. Однако, сильные гении не стоят перед такими проблемами, проникая в мир смертных. Они приспособлены к смешанным стихиям Материального Плана и иногда посещают их по собственной воле или будучи призванными магией. Некоторые гении могут принимать смертный облик и путешествовать инкогнито. 

Во время этих визитов смертный может привлечь внимание гения, что может перерасти в дружбу и романтические отношения, а иногда и к появлению детей. Этих детей и называют дженази: люди, имеющие связь с двумя мирами, и в тоже время не принадлежащие ни к одному из них. Некоторые дженази рождены от союза смертного и гения, у других оба родителя могут быть дженази, и очень редко те, у кого в родословной были гении, могут унаследовать его стихийную природу, которая дремала в течение нескольких поколений. 

Иногда дженази могут появиться от воздействий всплеска стихийной силы, через такие явления, как прорыв Внутренних Планов или схождение планов. При таких явлениях стихийная энергия проникает в тела существ, и её может оказаться достаточно, чтобы в качестве потомства от двух смертных появился дженази. 

---

!!!Наследники силы стихий 
Дженази наследуют что-то от обеих сторон своей двойственной природы. Они похожи на людей, но помимо необычного цвета кожи (красный, зелёный, синий или серый цвет) в них есть нечто необычное. Стихийная кровь, текущая в их венах, может проявлять себя по-разному в каждом дженази, и чаще всего как магическая сила. 

Силуэтом дженази может сойти за человека. Те, у кого земляное или водное происхождение, как правило, тяжелее, в то время как воздушные и огненные, как правило, легче. Внешне дженази могут иметь черты своих смертных родителей (заострённые уши от эльфа, коренастое телосложение и густые волосы от дварфа, маленькие руки и ноги от полурослика, чрезвычайно большие глаза от гнома и так далее). 

Дженази почти никогда не общаются со своими стихийными родителями. Гении редко проявляют интерес к своим смертным потомкам и рассматривают их как нелепую случайность. Многие вообще не испытывают никаких чувств к своим детям-дженази. 

Некоторые дженази живут как изгои, отправленные в ссылку из-за своей необычной внешности и странной магии, другие же могут стать лидерами диких гуманоидов и странных культов в диких землях. Третьи могут занимать влиятельные посты, особенно там, где почитают стихийных существ. Некоторые дженази оставляют Материальный План, чтобы найти пристанище на домашнем плане своего родителя-гения. 

---

!!!Дикие и уверенные 
Дженази редко испытывают недостаток в уверенности, и считают себя способными справиться с любой проблемой. Эта уверенность может проявляться как изящная уверенность в своих силах у одного дженази, и как высокомерие у другого. Такая слепая уверенность в себе может иногда заставить дженази пойти на неоправданный риск, а их большие планы часто приводят к большим неприятностям, как для самих дженази, так и их спутников. 

Слишком частые неудачи могут уменьшить самомнение дженази, поэтому они всегда стремятся к идеалу, оттачивая свои таланты и совершенствуясь в своём мастерстве. 

---

!!!Земли дженази 
Дженази так редки, что даже за всю жизнь они могут не встретить никого из своего вида. У них нет больших городов или империй. Дженази редко создают собственные общины, и обычно принимают культуру и общество, в которых они родились. Чем более странен их внешний вид, тем труднее им приходится в жизни. Многие дженази растворяются в многолюдных городах, где их внешность не привлекает внимания людей, привыкших к разнообразию народов. 

Живущим на границе приходится гораздо труднее. Люди там меньше принимают различия. Холодный приём и подозрительные взгляды это лучшее, на что могут надеяться дженази; в более отсталых местах они сталкиваются с гонениями и даже насилием со стороны людей, которые ошибочно принимают их за исчадий. Не желая такой жизни, дженази ищут изоляции от мира, обустраивая свои дома в горах или лесах, возле озёр или даже под землёй. 

---

!!!Имена дженази 
Дженази могут использовать имена народа, среди которого росли. Позднее они могут взять себе имя, делающее акцент на их наследии, к примеру, Пламя, Зола, Волна или Оникс. 

---

!!!Предыстория дженази 
У каждой подрасы дженази свой собственный темперамент, который мог бы сделать некоторые предыстории более подходящими, чем другие. 

''Дженази воздуха'' гордятся своим наследием, иногда вплоть до высокомерия. Они могут быть более красноречивы, и стремятся иметь аудиторию. Они редко остаются в одном месте на долгое время, и всегда находятся в поиске чего-то нового, торопятся жить. Воздушные дженази, не живущие в городах, предпочитают открытые земли, такие как равнины, пустыни и высокие горы. Наиболее подходящая предыстория для них: артист, благородный и шарлатан. 

''Дженази земли'' более замкнуты; их связь с землёй препятствует им чувствовать себя комфортно в городах. Их необычный размер и сила делают их хорошими солдатами, хотя благодаря стойким качествам они могут впечатлить других и стать великими лидерами. Многие дженази земли живут в подземельях, где они чувствуют себя комфортно. Когда они выходят из своих пещер, они могут бродить по холмам и горам или могут предъявить права на старые руины. Наиболее подходящая предыстория для них: отшельник, солдат и чужеземец. 

''Дженази огня'' часто попадают в неприятности из-за своего вспыльчивого характера. Как и их воздушные собратья, они иногда хвастают своим превосходством над простыми людьми. Но они также стремятся, чтобы другие разделяли их высокое самомнение, поэтому постоянно борются за свою репутацию. Наиболее подходящая предыстория для них: благородный, народный герой и преступник. 

Почти все ''дженази воды'' имеют опыт работы на борту или около морских судов. Они становятся отличными моряками и рыбаками. Как и дженази земли, дженази воды предпочитают тихие, уединённые места; широкие берега естественных водоёмов. Они идут туда, куда хотят, и делают то, что хотят, редко чувствуя привязанность к чему-либо. Наиболее подходящая предыстория для них: моряк и отшельник. 

<<<
Парнишка был забит до смерти, его напарница загнана в угол, жрица обмочилась, а волшебница истекала кровью из глубокой колотой раны. К удаче этих новичков, большинство гоблинов собрались в узком проходе, а он был драконорождённым. Вдохнув поглубже, он на миг задумался о том, как же пахнет поджаренный гоблин.

— Рхогар, драконорождённый-ветеран
<<<

Рождённые драконами, о чём говорит их название, драконорождённые идут гордо подняв голову по миру, который встречает их со страхом и непониманием. Сформированные драконьими богами или самими драконами, драконорождённые первоначально вылупились из драконьих яиц как новая раса, сочетающая в себе лучшие качества драконов и гуманоидов. Некоторые драконорождённые являются верными слугами истинных драконов, другие образуют ряды солдат в великих войнах, а некоторые ищут свою судьбу, не найдя себе призвания.

---

!!!Гордый драконий род
Драконорождённые, как правило, выглядят как драконы, стоящие на задних лапах и принявшие гуманоидную форму, потеряв при этом крылья и хвост. Первые из них обладали чешуёй оттенков, присущих драконам разных видов, но поколения непрерывного скрещивания привели к появлению единого цвета. Их маленькие, аккуратные чешуйки обычно цвета меди или латуни, иногда с алым, золотым, медно-зелёным или рыжим оттенком. Они высоки и крепки, часто достигая двух метров в высоту и обладая весом свыше 130 килограмм. Их крепкие, четырёхпалые конечности снабжены пальцами, не уступающими по прочности когтям.

Кровь определённых видов драконов чрезвычайно сильна в представителях некоторых кланов. Эти драконорождённые часто гордятся тем, что цвет их чешуи близок к цвету их прародителей — ярко красный, зелёный, синий или белый, глянцево-чёрный или блестяще-золотой, серебряный, латунный, медный или бронзовый.

Помимо этого, каждый драконорождённый обладает той или иной частью истинного дракона. Тех,чья часть проявляется в виде драконьего хвоста, обычно избегают, так как для драконорождённых наличие хвоста считается плохой приметой и дурным предзнаменованием.

---

!!!Самодостаточные кланы
Для каждого драконорождённого его клан важнее собственной жизни. Они ставят свою преданность и уважение клану выше всего, даже богов. Каждый поступок драконорождённого отражается на чести его клана, и тот, кто опозорил свой клан, может быть изгнан. Каждый драконорождённый знает своё место и свои обязанности в клане, и долг чести заставляет их придерживаться этого места.

Постоянное стремление к самосовершенствованию отражает самодостаточность всей расы драконорождённых в целом. Они ценят мастерство и совершенство во всём, к чему прикладывают усилия. Драконорождённые ненавидят проигрывать, и они приложат все возможные силы к достижению цели, прежде чем откажутся от неё. Они часто делают достижение мастерства в каком-либо навыке целью всей своей жизни. Представители других рас, разделяющие эти взгляды, могут легко завоевать уважение среди драконорождённых.

Однако, несмотря на стремление к самодостаточности, они понимают, что в трудной ситуации без помощи бывает не обойтись. Но лучший источник помощи это твой клан. А если помощь требуется всему клану, то они скорее обратятся к другому клану драконорождённых, чем к представителям других рас, или даже к помощи богов.

---

!!!Имена драконорождённых
Драконорождённые получают личные имена при рождении, но в знак уважения они на первое место ставят название клана. Детское имя или прозвище обычно используется среди представителей одного выводка как неофициальное. Такое имя может указывать на некоторое событие из жизни драконорождённого или его привычку.

''Мужские имена:'' Арджхан, Баласар, Бхараш, Гхеш, Донаар, Крив, Медраш, Мехен, Надарр, Панджед, Патрин, Рхогар, Тархун, Торинн, Хескан, Шамаш, Шединн

''Женские имена:'' Акра, Бири, Даар, Джхери, Кава, Коринн, Мисханн, Нала, Перра, Райанн, Сора, Сурина, Тхава, Уаджит, Фаридэ, Хавилар, Харанн 

''Детские имена:'' Кривоухий, Липучка, Праведник, Скалолаз, Фанатик, Щитогрыз

''Названия кланов:'' Версисатургиеш, Даардендриан, Делмирев, Драчедандион, Кепешкмолик, Керрилон, Кимбатуул, Клестинсиаллор, Линксакасендалор, Мястан, Неммонис, Нориксиус, Офиншталажир, Прексижандилин, Турнурот, Фенкенкаьрадон, Шестенделиат, Яржерит
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
<<<
Изобретатели сами выдумывают передовые проблемы, а потом пытаются решить их - громко и, частенько, с сопутствующим ущербом.

— Таша, ведьма
<<<

Masters of invention, artificers use ingenuity and magic to unlock extraordinary capabilities in objects. They see magic as a complex system waiting to be decoded and then harnessed in their spells and inventions. You can find everything you need to play one of these inventors in the next few sections.

Artificers use a variety of tools to channel their arcane power. To cast a spell, an artificer might use alchemist's supplies to create a potent elixir, calligrapher's supplies to inscribe a sigil of power, or tinker's tools to craft a temporary charm. The magic of artificers is tied to their tools and their talents, and few other characters can produce the right tool for a job as well as an artificer. 

---

!!Artificers in many worlds
Throughout the D&D multiverse, artificers create inventions and magic items of peace and war. Many lives have been brightened or saved because of the work of kind artificers, but countless lives have also been lost because of the mass destruction unleashed by certain artificers' creations. In the Forgotten Realms, the island of Lantan is home to many artificers, and in the world of Dragonlance, tinker gnomes are often members of this class. The strange technologies in the Barrier Peaks of the world of Greyhawk have inspired some folk to walk the path of the artificer, and in Mystara, various nations employ artificers to keep airships and other wondrous devices operational. Artificers in the City of Sigil share discoveries from throughout the multiverse, and from there, the gnome artificer Vi runs a cosmos-spanning business that hires adventurers to fix problems that others deem unfixable. In Vi's home world, Eberron, magic is harnessed as a form of science and deployed throughout society, largely as a result of the wondrous ingenuity of artificers. 

---

!!Creating an artificier
When creating an artificer, think about your character's relationship with the artisan who taught them their craft. Does the character have a rival? Talk to your DM about the role played by artificers in the campaign and the sort of organizations you might have ties to. 

---

!!The magic of artifice
As an artificer, you use tools when you cast your spells. When describing your spellcasting, think about how you're using a tool. For example, if you cast cure wounds using alchemist's supplies, you could be quickly producing a salve. If you cast it using tinker's tools, you might have a miniature mechanical spider that binds wounds. The effect of the spell is the same either way. Such details don't limit you in any way or provide you with any benefit beyond the spell's effects. You don't have to justify how you're using tools to cast a spell. But describing your spellcasting creatively is a fun way to distinguish yourself from other spellcasters. 
<<<
I am kalashtar, born of two worlds. Over a thousand years ago, my ancestor bound her bloodline to the spirit Kashtai, and I am a child of that union. Kashtai moves within me. Her memories come to me in dreams, and at times her voice whispers in the silence of my mind. As long as at least one of my sisters is alive, Kashtai will sur­ vive-and as long as she lives, she will fight il-Lashtavar. 

— Lakashtai, servant of the light 
<<<


The kalashtar are a compound people, created from the union of humanity and renegade spirits from the plane of dreams-spirits called quori. Kalashtar are often seen as wise, spiritual people with great compassion for others. There is an unmistakable alien quality to the kalashtar, though, as they are haunted by the conflicts of their otherworldly spirits. 

You were born with a bond to an otherworldly being. You have memories of a life you’ve never lived, visions of battling fiends and an endless struggle against darkness. When you sleep, you don’t dream as others do, but you often wake with a sense of purpose or new ideas. You see the pain and suffering in the world and know that there is a path to light—but there are monsters in the shadows, faceless enemies that have been hunting you since before you were born. 

Will you embrace the spirit within you and make its struggle your own? Will you stand against the darkness, even if it draws the many eyes of the Dreaming Dark upon you? Or will you ignore that inner voice and try to live your own life? 

---

!!!Kalashtar Origins 
The quori are spirits of nightmare. But just as angels can fall, fiends can rise. Centuries ago, a handful of quori turned against il-Lashtavar, the malevolent force that dominates Dal Quor. The Dreaming Dark hunted them across the dreamscape, seeking to consume and reclaim them. In desperation, these rebel spirits reached out to Eberron, finding a haven in the minds and bodies of a group of Adaran monks. Sixty-seven spirits escaped, and the first kalashtar were born. 

As a kalashtar, you’re descended from one of these monks. A quori is bound to your bloodline. It exists in the minds and dreams of all of your siblings, and as long as one of you is alive the quori is sustained. Should you all die, the spirit will be lost . . . and so, the Dreaming Dark is always happy to kill a kalashtar. 

The kalashtar were born centuries ago, and have since spread out from Adar. What is your background? What has set you on the path to adventure? Are you searching for allies against the Dreaming Dark, or are you pursuing a mission of your own? 

---

!!!Adaran 
The kalashtar were born in Sarlona, in the distant land of Adar. Today, the Empire of Riedra dominates Sarlona, and imperial forces endlessly siege Adar. The monks and priests of Adar believe that the war against the Inspired and il-Lashtavar won’t be won with weapons; instead, prayer and guided meditation will ultimately shift the balance from darkness to light. 

Adaran kalashtar rarely take direct action without reason. If you are from Adar, what caused you to leave your monastery and brave the Riedran blockades? Have the elders entrusted you with a specific mission, or has your quori spirit driven you to distant lands? The hermit background is a good way to reflect a mystic from a distant land possessing dangerous revelations. 

Of all the origins mentioned here, you likely have the strongest connection to your quori spirit. Adaran kalashtar are ascetic, disciplined, and focused on the Path of Light. You were taught to inspire those who live in fear and enlighten those lost to darkness; can you reconcile this with your adventuring life? If you’ve recently arrived in Khorvaire after living your life in a monastery, you are unaccustomed to crime and greed. Is the chaos of a city like Sharn disorienting? 

---

!!!Khorvairian 
There are kalashtar communities in several major cities of the Five Nations, including the Overlook district in Sharn and Whitewalls in Fairhaven. Kalashtar prefer to stay close to one another, both to practice their shared traditions and to stand together against any threats posed by the Dreaming Dark. If you were raised in such a community, you’re familiar with the Path of Light and other kalashtar customs. But there’s no Riedran army at the gates; you know the Dreaming Dark is a threat, but it’s a ghost in the shadows. 

Many kalashtar simply seek to spread light through their daily actions, such as showing kindness and compassion or mediating disputes. On the other hand, some of the kalashtar of Khorvaire have embraced a grim path in the battle against darkness. The Shadow Watchers don’t believe that evil can be fought merely with kindness and prayer. Members of this order seek to identify sources of corruption and to ruthlessly eliminate them. While a Shadow Watcher’s focus is on agents of the Dreaming Dark, they can pursue any force of evil, supernatural or otherwise. 

As a kalashtar of Khorvaire, you could bring a compassionate approach to any background; whether you’re an acolyte of the Path of Light, a wise sage, or a lively entertainer, you do your best to help the innocent and lift spirits. Criminal and charlatan would be unusual paths, but the spy background could reflect the work of a Shadow Watcher. While you aren’t as isolated from the world as an Adaran kalashtar, you’re still guided by alien instincts and have an otherworldly demeanor. 

---

!!!Orphan 
Kalashtar can breed with humans and half-elves, and their children have an equal chance of being fully kalashtar or the race of the other parent. Kalashtar are quite rare; even in cities like Sharn with kalashtar communities, there are many people who will assume kalashtar are just humans with strange eyes . . . or some sort of half-elf, maybe? Maybe it’s a new fashion? 

As such, there are kalashtar in Khorvaire who grew up without the guidance of a kalashtar parent. Orphans may be entirely unaware of their heritage and the nature of their quori spirit—it tries to communicate through dream-visions and instincts, but lacking any context, such orphans rarely understand their quori bond. Nonetheless, the quori is an integral part of them, urging them toward the light—and indeed, most orphans follow such a path. A kalashtar orphan who chooses a darker path is fighting the instincts imparted by their spirit. Such a kalashtar is likely to be deeply conflicted, which can manifest as unidentified stress, fits of rage, depression, or unpredictable behavior. 

An orphan kalashtar can follow any path. Whether altruistic, nefarious, or somewhere in between, work with your DM to decide how you interpret the influence of your quori bond. Have you followed its guidance despite not knowing its true nature? Do you interpret it as a curse or ghost, twisting your thoughts and putting you at odds with yourself? Have you found the inner determination to suppress it entirely? Do you ultimately want to come to terms with your kalashtar nature, or do you like being an outsider and prefer to stay that way? 

---

!!!The Quori Bond 
As a kalashtar, you’re part of a spiritual lineage, traditionally reflected by the suffix of your name. For example, Lanhareth and Minhareth are both kalashtar of the lineage of Hareth. Your lineage is set before birth, tied to one of your parents. If you are born to kalashtar of Vaktri and Hareth, you inherit only one of the bonds, often that of the parent of your gender. Since you can’t inherit both bonds, you won’t be half Hareth and half Vaktri. Your lineage affects your appearance and personality, eye color, hair color, and other aspects. When you meet another kalashtar of your lineage, you’ll see common traits, but you’ll also feel a deeper connection; in some ways, you’re one person. 

The quori bond exists on a deep level. Your quori doesn’t hover over your shoulder or whisper in your ear. Instead, it exists in the collective subconscious of all kalashtar of your lineage, shaping and guiding you all. You feel it as instinct, in memories of things you’ve never done—visions of a war in the realm of dreams. When you sleep, you don’t dream, but the bond grows stronger. Your quori may even give visions to guide you. With time and training, you can strengthen this connection, learning to hear its psychic voice more clearly. Ultimately, it’s up to you how you roleplay your connection. While the quori isn’t an active presence that responds in conversation, some kalashtar do speak to it as if it was, talking with the quori as a way of processing their own thoughts. Others take comfort in its subconscious presence, confident it is with them at all times. And some—notably orphans—refuse to acknowledge it, determined to see their mind as their own. 

In creating a kalashtar character, it’s important to consider what type of quori you’re bound to. You can develop this through roleplaying, but it can also be reflected by your choice of class and by your abilities or spells. Each quori has a connection to a particular emotion. Fiendish quori feed on this emotion, using it to manipulate mortals. In your case, it could be that you understand how to generate that emotion in others, or that you yourself experience that emotion in a deep and powerful way. Or it could be that you have learned how to suppress that emotion, and that is the source of your strength. Whatever choice you make, it will be reflected throughout your lineage. If you decide that Vaktri is a du’ulora quori and that you draw on his burning fury to produce your own barbarian rage, then other Vaktri kalashtar you meet may also be barbarians or furious warriors. 

The bond to the spirit can cause some kalashtar to display unusual quirks. Consider rolling or selecting a trait from the Kalashtar Quirks table. 

| !к10 |!Причуда |
| 1 |You try to understand the motives and feelings of your enemies. |
| 2 |You prefer using telepathy over speaking aloud. |
| 3 |You feel a strong drive to protect the innocent. |
| 4 |You apply dream logic to mundane situations. |
| 5 |You discuss things out loud with your quori spirit. |
| 6 |You suppress your emotions and rely on logic. |
| 7 |You are strongly influenced by the emotions of those around you. |
| 8 |You prefer to find nonviolent solutions to problems whenever possible. |
| 9 |You are driven by a warrior spirit and will fight for any noble cause. |
| 10 |You are obsessed with Dreaming Dark conspiracies. |

The three quori presented in //Eberron: Rising from the Last War// are described below, along with another fourth common quori, the du’ulora. If you want to develop a kalashtar from another quori lineage, discuss it with your DM. 

''Du’ulora ''

The fiendish du’ulora are spirits of rage and aggression. In Dal Quor, they craft dreams that drive feuds and vendettas, spurring mortals to violence and vengeance. Your du’ulora spirit has turned against the darkness, but fury remains its domain and anger is your birthright. How do you express this? As a bard, you might specialize in taunting enemies, turning their anger against them and driving them to rash action. As a barbarian, you could say that your spirit is the source of your rage. As a paladin, you might channel its fury when you smite your foes. You might be calm and serene most of the time, expressing sudden powerful moments of rage when you draw on your bond. 

The key thing to remember is that your du’ulora has chosen the path of light, even if it is a spirit of rage. You may revel in moments when you get to unleash your anger on your enemies, but it still drives you to fight for a noble cause. Your fury is a tool, and you should never let it drag you into darkness. 

''Hashalaq''

The hashalaq are seducers and deceivers, feeding on doubt and desire. They are the spies and loremasters of the quori. Hashalaq kalashtar make excellent bards; the College of Lore reflects both your love of knowledge and your ability to confuse your foes. Hashalaq make excellent warlocks, with your spirit granting the Beguiling Influence invocation and allowing you to charm your enemies. As a hashalaq kalashtar, consider whether you specialize in deception, or choose to be honest and focus on your ability to inspire positive emotion—do you prefer cunning Deception or empathic Persuasion? Hashalaq clerics typically follow this latter path, using their knowledge to guide allies and cut through the deception that comes so naturally to their kind. 


''Kalaraq''

The kalaraq are spirits of pride and ambition. The natural leaders of the quori, they dominate through sheer charisma and force of will. As a kalaraq kalashtar, you surely have your own grand ambitions. You excel at inspiring others to follow you and you won’t hesitate to take bold action. You might lead in the vanguard as a paladin, or strengthen your allies as a cleric, or bend enemies to your will as a bard of the College of Glamour. The kalaraq are also known as the eyebinders, capable of consuming and binding weak souls; you could be a warlock or wizard who specializes in summoning or binding spirits. 

The kalaraq are the rarest and most powerful of the quori. The kalaraq Taratai was the leader of the rebels, and hers is the only spiritual lineage that has been completely destroyed by Dreaming Dark; Taratai’s own fate is unknown. There are only a couple remaining kalaraq lines, and as a kalaraq kalashtar, others may look to you for bold leadership and guidance. 

''Tsucora ''

The tsucora feed on terror and craft the most classic nightmares. As a tsucora kalashtar, you have a deep understanding of fear. This is an excellent foundation for a bard of the College of Whispers or a Living Weapon monk, sowing fear with a word or a touch. Likewise, you could be a Great Old One warlock tormenting your enemies with fear and dissonant whispers. On the other hand, you could take the path of an inspiring cleric who bolsters your allies against fear, using your knowledge of it to strengthen their resolve. Tsucora kalashtar often seem cold and intimidating, but despite your knowledge of nightmares, you are still looking toward the light. 

---

!!!Creating a Lineage 
Once you’ve chosen a quori spirit, next define your lineage, considering the traits you might share with other kalashtar bound to that same quori line. Here are two examples. 

''Lurashtai'' began her existence as a tsucora quori. She wove dreams of gothic horror, playing on her victims’ fears of death and the undead. Raised on these morbid memories, the kalashtar of her line are comfortable with tragedy, have no fear of death, and see beauty in things that others find disturbing or terrifying. As a spirit of light, Lurashtai has taken an interest in the undead; she fears that by being trapped outside the cycle of life and dream, the undead weaken the shared soul of the age. As a result, the kalashtar of her line are often driven to hunt undead and lay their spirits to rest. Lurashtai kalashtar usually have pale complexions, sharp features, and silky, dark hair; they generally favor the color red in their clothing. 

''Aveth'', a hashalaq quori, wielded the twin weapons of manipulation and insight before his exodus from Dal Quor. He takes great interest in the potential that mortals hold to choose a nobler path, much as he and his kind fled Darkness in search of Light. The kalashtar of Aveth’s line prefer following their intuition over the careful planning of others. They have great confidence in their ability to win over potential foes, turning them into friends, which can yield unexpected allies—or the untimely death of the too-optimistic kalashtar. Aveth kalashtar usually have dark skin, black hair, a preference for blue and aquamarine, and a distinct dislike of peanuts. 

---

!!!Psychic Power 
Kalashtar are known for their psychic gifts, but aside from their Mind Link, how does this manifest in a kalashtar character? In fifth edition, how do they wield mental power? In addition, characters carry an innate sense of mental discipline—a kalashtar monk could consider ki as a representation of psionic ability, and the Living Weapon monastic tradition builds on this. But you can also change the flavor of a class without altering the mechanics. Consider the following ideas. 

''Bards ''

Many kalashtar seek to fight evil through inspiration, and the bard can be an excellent foundation for this. While Bardic Inspiration is described as “stirring words or music,” you can describe your actions as being tied to psychic gifts; instead of a mystical song, you could describe your inspiration as a word backed by a surge of psychic energy. When you use the Words of Terror of the College of Whispers or the Cutting Words of the College of Lore, this could easily reflect your powers of psychic manipulation. Likewise, your spellcasting is mechanically magic; it can be counterspelled, it won’t work in an //antimagic field//, and so on. But you can easily describe //vicious mockery// or //crown of madness// as psychic attacks, or present //cure wounds// as a psychometabolic effect, using your mind to knit together the wounds of another. You gain no mechanical advantage from this—in the case of Bardic Inspiration, your target still has to be able to hear you, even if you’re using psychic power—but there’s nothing preventing you from presenting your bard as being psychically gifted as opposed to singing magic songs. 

''Clerics and Paladins ''

Most kalashtar are devoted to the Path of Light, and though its faithful worship no gods, the faith itself can be a source of divine magic. Priests of the Path of Light say that the faithful are inspired by il-Yannah—the great light that will one day rise to replace the Dreaming Dark—but their power comes from within. As such, both cleric and paladin are logical paths for a kalashtar, and you can add psychic flavor to your spells as described with the bard above. When you cast //command//, you aren’t demanding your victim bow to il-Yannah; instead, il-Yannah is strengthening your mind and allowing you to impose your will on the target. Effects such as //bless// could reflect your ongoing psychic guidance, while //cure wounds// and similar spells could be psychometabolic. Your faith helps you focus your mind, but it’s your mind that generates the power. If you want to take this farther, the Mind domain allows you to replace radiant damage with psychic damage; thus, you can flavor your //sacred flame// as a psionic blast instead of holy fire. 

This same concept can work for a Divine Soul sorcerer. You don’t use the trappings of a priest, but your visions of il-Yannah have allowed you to focus your mind and alter reality. You can select spells that feel like they could be psychic powers; when you cast mage hand, it can be flavored as an act of telekinesis. 

''Warlocks''

You can simply describe your warlock spells as being drawn from psychic power as opposed to arcane invocations. Your patron is your quori spirit. As a warlock, you might have an especially strong bond to this spirit and receive clearer visions than most kalashtar of your lineage; traditionally, kalashtar with such a strong connection are called atavists. The Great Old One is an easy choice, as many of its spells reflect mental manipulation; you can describe //Evard’s black tentacles// as ectoplasmic projections, or //armor of Agathys// as a blend of telekinetic force and cryokinesis. The Awakened Mind feature soon becomes obsolete due to Mind Link; a DM could choose to combine the two, increasing the range of a kalashtar warlock’s Mind Link feature by 30 feet. The Celestial patron is another logical choice, focusing on your quori as a spirit of light. As a Hexblade or any warlock using the Pact of the Blade, you can describe your weapon as being forged from nightmares. 

If you want to add more psionic flavor to your warlock, your DM might allow you to shift the damage type of a few of your spells; could eldritch blast inflict psychic damage? And even with default rules, you can roleplay it as a burst of telekinetic force. 

---

!!!Kalashtar Names
A kalashtar name adds a personal prefix to the name of the quori spirit within the kalashtar. Such names have no relation to the kalashtar's gender. 

Kalashtar orphans are unlikely to know the name of their spirit and take names from another source. 

''Quori Names:'' Ashana, Ashtai, Ishara, Hareth, Khad, Kosh, Melk, Nari, Tana, Tari, Tash, Ulad, Vakri, Vash 

''Kalashtar Names:'' Coratash, Dalavash, Dolishara, Ha­ lakosh, Khoratari, Koratana, Lanhareth, Molavakri, Nevitash, Sorashana, Torashtai, Valakhad, Vishara 
<<<
Карта, которую мы нашли, показала вход в тайник с сокровищами короля–священника прямо в середине разрушенной части города. Мы без проблем приближались к нашей цели, но, когда мы достигли сгоревшего здания, внезапная какофония зазвучала вокруг нас. Птичий крик, кошачье шипение, собачий лай. Лидда погнала нас назад, к более безопасным улицам города. Только когда мы вернулись в районы, патрулируемые стражей, она объяснила, что шум означал, что бескрылый народ занял этот район, и что нарушение границы повлечет смерть. 

– Гимбл, //Заметки Охотника за Сокровищами// 
<<<

Преследуемые древним преступлением, которое лишило их крыльев, кенку блуждают по миру как бродяги и грабители, живущие на отшибе человеческого общества. Кенку имеют зловещую репутацию, которая не совсем уж незаслуженна, но они могут оказаться ценными союзниками. 

---

!!!Древнее проклятие 
Кенку однажды служили таинственной, могущественной сущности на другом плане существования. Некоторые полагают, что они были приспешниками Граз’зта, другие говорят, что они были разведчиками и исследователями Герцогов Ветра Аакуы. В любом случае, согласно легенде, кенку предали своего повелителя. Не сумев противиться соблазну красивого сверкающего сокровища, кенку спланировали украсть предмет и сбежать на Материальный План.

К сожалению для кенку, их повелитель раскрыл их план прежде, чем они смогли его осуществить. В ярости, эта сущность наложила на них три ужасных проклятия. Во–первых, любимые крылья кенку иссохли и отвалились, оставив их привязанными к земле. Во–вторых, за то, что их изобретательность и умения обернулись интригами против их покровителя, из их душ была вырвана искра творческого потенциала. И наконец, чтобы гарантировать, что кенку никогда не смогут выдать его тайны, их повелитель лишил их голоса. Как только эта сущность удовлетворилась наказанием, кенку были отпущены на Материальный план. 

С тех пор кенку блуждают по миру. Они обосновываются в местах, которые принимают их, обычно мрачные города, которые переживают тяжелое время и наводнены преступностью. 

---

!!!Мечты о полёте 
Больше чем что либо, кенку хотят вернуть свою способность летать. Каждый кенку рождается с желанием подняться в воздух, и те, кто изучает колдовство, делают это в надежде овладеть заклинаниями, которые позволят им лететь. Слухи о магических предметах, таких как ковры–самолеты, метлы, способные летать, и аналогичных предметах, пробуждают у кенку большое желание приобрести их себе. 

Несмотря на отсутствие крыльев, кенку любят жить в башнях и других высоких строениях. Они ищут руины, которые простираются к небу, хотя им нехватает мотивации и креативности, чтобы сделать в них ремонт или укрепить их. Даже в этом случае, их легкий вес и размер позволяют им жить в хрупких строениях, которые обрушились бы под человеком или тем более орком. 

Некоторые гильдии воров используют кенку как наблюдателей и посыльных. Кенку живут в самых высоких зданиях и башнях, контролируемых гильдией, что позволяет им, прячась на верхних уровнях, наблюдать за городом. 

---

!!!Безнадежные плагиаторы 
В результате отсутствия у них творческого потенциала, кенку комфортнее быть прислужниками могущественного руководителя. Лидеры стай поддерживают дисциплину и минимизируют конфликты, но они не способны эффективно планировать или составлять долгосрочные планы. 

Хотя они неспособны говорить своим собственным голосом, кенку отлично могут подражать любому звуку, который они слышат, от голоса халфлинга до шума камней, падающих вниз по склону. Однако, кенку не может создать новые звуки и может общаться только используя звуки, которые он уже слышал. Большинство кенку использует смесь из подслушанных фраз и звуковых эффектов, чтобы передать свои идеи и мысли. 

К тому же, кенку неспособны придумывать новые идеи или создавать новые вещи. Кенку может скопировать существующий предмет с исключительным умением, что позволяет им стать превосходными ремесленниками и писцами. Они могут копировать книги, делать точные копии предметов, и преуспевать на других должностях, где от них требуется создавать большое количество одинаковых предметов. Немногие кенку находят удовлетворение в такой работе, так как их поиск свободного полета делает их малопригодными для занятий рутиной. 

---

!!!Идеальные прислужники 
Кенку собираются в группы, называемые стаями. Стаю возглавляет самый старый и самый опытный кенку с самым широким запасом знаний из которого можно черпать информацию, часто называемый Мастером. 

Хотя кенку не может создать новую вещь, у них есть талант к изучению и запоминанию подробностей. Таким образом, амбициозный кенку может отличится как превосходный шпион и разведчик. Кенку, который знает хитрые схемы и планы, разработанные другими существами, может их использовать. У кенку отсутствует способность импровизировать или изменять план, но мудрый Мастер приводит в исполнение одновременно несколько планов, уверенный, что подчиненные будут в точности следовать приказам. 

Поэтому многие кенку живут немудрёной жизнью, служа посыльными, шпионами, и наблюдателями для гильдий воров, бандитов и других преступных картелей. Сеть кенку может передать птичий щебет или подобный шум через город, предупреждая союзников о подходе патруля стражи или сообщая о наилучшей возможности для грабежа. 

Так как кенку может точно воспроизвести любой звук, сообщения, которые они передают, редко меняются или теряют смысл. Посыльные–люди могли бы изменить слова или фразы и нечаянно исказить сообщение, но кенку с точностью воспроизводят то, что они слышали. 

---

!!!Искатели приключений кенку 
Приключенец кенку – это обычно оставшийся в живых из стаи, которая понесла тяжелые потери, или редкий кенку, которому надоела жизнь преступника. Такие кенку более амбициозны и смелы, чем их товарищи. Другие начинают самостоятельные исследования тайн полета, овладевая магией, или пытаются раскрыть тайну своего проклятия и найти способ снять его. 

У приключенцев кенку, несмотря на их относительную независимость, все еще есть склонность искать компаньона, чтобы подражать ему и следовать за ним. Кенку любят подражать голосу и словам своего компаньона. 

---

!!!Имена кенку 
Учитывая, что кенку может копировать любой звук, их имена состоят из поразительного разнообразия звуков и шумов. Имена кенку в основном делятся на три нижеследующие категории, мужские и женские имена не отличаются. 

Кенку головорезы, воины и бандиты используют как имя звук, издаваемый оружием, таким как лязг булавы о броню или звук ломающейся кости. Не–кенку обращаются к кенку, описывая этот звук. Примеры этого типа имен: Разбиватель, Лязгун, Разрезатель, и Грохотун. 

Воры, мошенники и грабители кенку используют как имя крики животных, обычных для города. Таким образом кенку могут обращаться друг к другу, в то время как те, кто слышит их, принимают их за обыкновенных животных. 

Не–кенку используют имена, которые относятся к издаваемому звуку или к животному, которому кенку подражает, такие как: Крысиный Скрежет, Свистун, Мышатник и Рычун. 

Некоторые кенку отворачиваются от преступности, чтобы вести законные дела. Эти кенку используют как имя звуки, издаваемые при их ремесле. Моряк повторяет звук трепещущего паруса, в то время как кузнец подражает лязгу молотка о металл. Не–кенку дают им имена по ремесленным звукам, такие как Хлопок Паруса, Молоточник и Резатель. 

---

!!!Отыгрыш кенку
Если Вы играете кенку, постоянные попытки подражать шумам могут приводить к путанице или раздражать вместо того чтобы вызывать интерес. Вы можете просто описать звуки, которые издает ваш персонаж и что он имеет в виду. Поясните намерения своего персонажа, если вы не стремитесь сознательно к недопониманию или таинственности. 

Вы можете сказать, «Щелкун издает звук молотка медленно и ритмично постукивающего по камню, чтобы показать, насколько ему скучно. Он играет со своим кинжалом и изучает агента Альянса Лордов, сидящего в баре.» Создание вокабуляра шумов, которые другие игроки должны будут расшифровать, может показаться веселой идеей, но на самом деле это может сильно отвлекать и замедлять игру. 
<<<
Кобольды становятся гораздо менее симпатичными, когда обучаются метать огненные шары. 

– Воло, //Справочник Воло по монстрам//
<<<

Кобольды часто описываются как трусливые, глупые и слабые, но эти мелкие рептилоиды на самом деле обладают развитой общественной системой, основывающейся на преданности племени; они умелые ремесленники и ожесточено работают сообща, чтобы преодолеть свои физические ограничения. 

В мечтах, кобольды представляют мир, в котором другие существа оставили их в покое, позволив спокойно рыть туннели и воспитывать следующее поколение, в надежде обнаружить магию, что поможет освободить их бога. В реальном же мире, кобольдов часто задирают и уводят в рабство более сильные существа. Живя на свободе, они постоянно испытывают страх перед вторжением и завоеванием. По отдельности кобольды пугливы и избегают сражений, но, если вы загоните его в угол или ему придется защищать свое гнездо – берегитесь. Кобольды печально известны своими импровизированными ловушками, которые они устанавливают для защиты своих нор. 

---

!!!Искусные туннелепроходцы 
От природы кобольды искусны в прокладке туннелей. Как и дварфы, они обладают врожденным чувством камня, определяя какие части породы слабые или сильные, какие из них можно подвергнуть нагрузке или раскопать, где находятся залежи минералов или подземные источники воды. Такие способности позволяют им создавать надежные жилища там, где другие существа не смогут почувствовать себя в безопасности. 

Пусть остальные гуманоидные расы могут сказать мало хорошего о кобольдах, но все они отмечают потрясающее качество работы маленьких рептилий в прокладке туннелей при использовании столь примитивных инструментов. Часто кобольдов, захваченных в рабство более могущественными созданиями, заставляют расширять жизненное пространство хозяйского убежища и обеспечить охрану жизненно важных областей с помощью ловушек и других видов защиты. 

Некоторые сообщества людей нанимают кобольдов для прокладки канализационных туннелей, оплачивая их труд едой и инструментами, доступа к которым у кобольдов нет. При должном обращении и отсутствия излишнего внимания со стороны людей, они усердно работают, прокладывая сеть туннелей под улицами, соединяя их с ближайшим водоемом, таким образом улучшив санитарные условия в городе. В случае, если кобольдом понравится местность, а обращение со стороны людей не будет жестоким, они могут остаться, обзаведясь постоянным домом, работая над расширением канализационных сетей растущего сообщества. Так называемые «городские кобольды» живут исключительно под землей, время от времени совершая ночные вылазки на поверхность. Примерно под четвертью всех городов мира проживают городские кобольды, однако, большинство из живущих на поверхности людей даже не подозревают о своих скрытных соседях, живущих внизу. 

---

!!!Опытные мусорщики 
Кобольды являются экспертами в обнаружении поломанных, потерянных, бракованных или брошенных вещей других существ, которые всё еще можно использовать. Они предпочитают собирать явно давно оставленные или выброшенные вещи, исчезновение которых не привлечет чужое внимание. В то же время, они совсем не испытывают стыда, пытаясь стянуть вещи, принадлежащие другим, так как такие вещицы находятся в более хорошем состоянии, а потому обычно более полезны или ценны. 

Собираясь на воровскую миссию, кобольды пытаются остаться незамеченными, не дав повода владельцу предмета причинить им вред. Например, группа городских кобольдов может скрытно проникнуть в дом сапожника ночью, забирая ножи, обрывки кожи, гвозди и другие полезные вещи, но, если появится минимальный риск быть обнаруженными, они стремглав убегут, не пытаясь напасть на кого–то в доме. Убегая до того, как их увидят и опознают, они избегают навлечь гнев городских жителей на свое племя. 

Конечно, существуют и более агрессивные особи, и племена, но в целом кобольды никогда специально не провоцируют ответное нападение существ, у которых они обычно воруют. Лучше быть осторожным и осмотрительным, чем быть объявленным опасностью и угрозой. 

---

!!!Драконьи слуги 
Кобольды верят, что были созданы из крови драконов богиней Тиамат, что объясняет их рептилиеподобный (или как они скажут драконоподобный) внешний вид. В каждом племени кобольдов легенда об их происхождении передается от стариков к детям, прививая каждому по отдельности и всему поколению гордость и самоуважение. Пусть кобольды и предпочитают бежать, а не драться, бросая имущество и часто оказываясь под гнетом более сильных гуманоидов, но они знают, что внутри них живет величие, и гордятся, что они избраны быть кровными родственниками драконов. 

Кобольды с готовностью служат хроматическим драконам и поклоняются им как полубогам, несущим божественную искру. Это не обычный вид поклонения или богослужения. Кобольды благоговеют в присутствии дракона, как будто настоящий божественный аватар почтил их своим появлением. Кобольды из кожи вон лезут, чтобы исполнить любые приказы дракона, даже если эти приказы опасны. Хотя кобольды и не поклоняются Тиамат на прямую, они признают ее богиней всех цветных драконов, а также повелительницей их расового бога, Куртулмака. 

---

!!!Жизнь и мировоззрение 
Кобольды живут племенным строем, где у каждого – своя роль в защите и выживании сообщества. Сильнейшие кобольды становятся воинами и охотниками, умнейшие – ремесленниками и стратегами, самые стойкие идут в шахты или занимаются дрессировкой, и т.д. Даже глупый и слабый кобольд приносит пользу племени, занимаясь сбором грибов или присмотром за молодняком, тем самым заботясь о выживании группы. 

Кобольды ощущают прохладную близость или нечто вроде родства с другими членами своего племени, при этом они редко бывают мягки в обращении друг с другом. Пара кобольдов может считать себя друзьями или врагами по прошествии десятилетия общения, но глубина этих чувств не идет ни в какое сравнение с людскими эмоциями. Благодаря тому, что большую часть своего времени они проводят в работе, спорящие кобольды редко получают возможность обменяться оскорблениями, не говоря уже о том, чтобы подраться из–за разногласий. 

Кобольды выбирают пару исходя из удобства. Отсутствие у них эмоциональной привязанности приводит к отсутствию такого понятия как брак или постоянные семейные отношения. Они откладывают яйца в общеплеменном инкубаторе без возможности для вылупившегося молодняка отследить своих родителей. 

Так как яйца не требуют особой заботы, женские особи кобольдов также участвуют в сражениях и работах. Более того, в процессе жизни кобольды могут медленно сменить свой пол. Если большая часть мужчин или женщин племени была убита, оставшиеся в живых смогут изменить соотношение полов в течении нескольких месяцев, пока сообщество вновь не станет сбалансированным. Благодаря этому, племя может быстро восполнить потери при наличии всего нескольких выживших. Исходя из этих предпосылок, у кобольдов нет гендерной роли среди молодежи и взрослых. Вождь, чародей, шахтер или ремесленник могут быть как мужчиной, так и женщиной.

---

!!!Быстро вырос, рано умер 
Кобольды вырастают и созревают намного быстрее чем другие представители гуманоидных рас. В возрасте 6 лет кобольд считается взрослым. Большинство становится жертвами болезней, жестокости, несчастных случаев до достижения 20 лет, но потенциально кобольды могут прожить до 120 лет. Такая длительность жизни является проявлением отдаленного родства с драконами. Самка может отложить до 6 яиц в год, каждое из которых вылупится через два–три месяца. 

Кобольды не проводят похоронных церемоний. Мертвое тело сжигают или уничтожают каким–либо другим способом (или, если в племени практикуют каннибализм, съедают). Кобольды верят, что, погибнув служа племени, будут мгновенно возвращены к жизни Куртулмаком, появившись из яиц последней кладки в инкубаторе. В случае смерти особо важного или уважаемого члена племени, за инкубатором начинают пристально наблюдать. Как только будет отложено новое яйцо, его отделяют от остальных и ревностно оберегают. Появившийся из такого яйца кобольд будет воспитан, чтобы занять важную роль. 

---

!!!Отыгрыш кобольда 
Кобольд прекрасно осознаёт свою слабость перед враждебным миром. Он знает, что мал, и более сильные существа будут использовать его; скорее всего он погибнет в юном возрасте, а жизнь будет полна тяжелого труда. Пусть такие перспективы выглядят мрачновато, кобольды находят отдушину в работе, делах на пользу племени и знании о своем великом драконьем наследии. 

Кобольды не особенно умны, но и не так тупы, как орки. Многие могут обмануть кобольда сладкими речами и остротой ума, но как только он поймет, что его провели, он запомнит это. Если у него будет возможность когда–нибудь отплатить своему обидчику, он обязательно ей воспользуется, даже если это будет мелкой пакостью. 

Кобольд не любить чувствовать себя одиноким или загнанным в угол. Он всегда хочет иметь путь для безопасного отступления или хотя бы союзника, что повысит его шансы. Без этого кобольд начнет нервничать, он будет то истерить, то погружаться в полное безмолвие. 

---

!!!Имена кобольдов 
Имена кобольдов являются производными от Драконьего языка и часто обозначают характерную черту, такую как цвет чешуи, особенности строения тела, привычки. Например: «Красная нога», «Белый клык» или «Спринтер». Так звучат на Общем перевод часто встречающихся имен. Кобольд может сменить имя, когда станет взрослым, или добавить дополнительный слог после важных событий, таких как первая охота, первая кладка или выживание в первой битве. 

''Имена кобольдов:'' Арикс, Варн, Галакс, Гару, Иртос, Кашак, Миипо, Моло, Ососс, Ротом, Сагин, Сик, Снив, Таклак, Тес, Урак, Хагнар, Хокс, Экс, Этт

---

!!!Внешнее разнообразие 
Кобольды имеют большое разнообразие в цветах и узорах своей чешуи. Хотя люди с трудом различают двух выглядящих похоже кобольдов, сами рептилоиды легко различают друг друга. 

Большая часть кобольдов одного племени имеет похожий окрас. Например, представители племени Меднозубых в большинстве своем серые в красную полоску. Два племени, которые сливаются, в итоге скрещиваются достаточно, чтобы создать новый фенотип, несмотря на то, что случайные аномальные отклонения и атавизмы приводят к появлению представителей с окрасом одного из исходных племен. 

---

!!!Больше о кобольдах
Справочник Воло по монстрам, Глава 1: Происхождение монстров, Кобольды: Малые драконы, с. 62
<<<
"Pierce was built by deisgn, while you were built by accident," Lakashtai said. "The soul is what matters, not the shape of the vessel." 

"What makes you think he has a soul?" Gerrion said. 

"What makes you think you do?" 

— Keith Baker, //The Shattered Land//
<<<


As a warforged, your body was made in a Cannith forgehold. The creation forge wove rootlike muscles across a frame of metal and darkwood, bathing your body in alchemical fluids, giving you skin of steel or hardened leather. And then the miracle occurred: you came to life. You are made from wood and steel, but you are alive, aware, capable of feeling love and anger. You were born with an innate sense of your purpose, the knowledge of war burned into the back of your mind. But you aren’t bound to follow the path that your creators planned for you. You have freedom. You have the ability to learn. Perhaps you even have a soul. 

As a warforged, you were created for a reason—what was it? How did you find a new purpose and become an adventurer? What do you want from life now? Are you concerned about the fate of the warforged as a species, or do you feel more of a kinship with your adventuring companions than you do with other warforged? 

---

!!!Origin and Purpose 
The first warforged were built for battle. As Cannith refined its techniques, what started as simple infantry gave way to more sophisticated designs: lithe scouts with mithral plating, powerful juggernauts, even “living wands” wielding the power of sorcerers. As people grew more accustomed to these living constructs, Cannith began designing civilian warforged with a wide array of talents. 

As a warforged, you have the ability to learn, and your background and class features could reflect this. If you’re a warforged bard, were you built to entertain, or were you created as a simple laborer only to discover remarkable talent within yourself? If you’re a sorcerer, were you designed to channel arcane power, or is it an unexpected development? Determine your original purpose from the options below, then consider how it relates to who you are today. 

''Battlefield ''

Like most warforged, you were designed to serve in the Last War. You didn’t choose your side; you were sold to one of the Five Nations and set to work. You weren’t taught to question this role—war was the only purpose you knew. Some warforged came to feel a patriotic attachment to the nation they served, despising the enemies they fought. Others felt a close bond to the officers and soldiers they served with, fighting for this “family” rather than for a nation. How about you? Which nation did you fight for? Do you consider yourself to be a Thrane or a Cyran, or do you have no love for the nation that bought you and threw you on the front lines? 

Warforged were in service for the last three decades of the war. How long did you serve? What was your most dramatic experience? Did combat leave you with lasting scars or damage, even if they have no mechanical effect on your character? 

For many warforged, class abilities reflect the role you played on the battlefield. As a fighter, you likely fought in the vanguard. As a ranger or rogue, you may have been designed as a scout. A barbarian’s rage could reflect a “battle mode”— you don’t actually get angry, but you temporarily increase your damage output and resistance. Class abilities gained over time could reflect an evolution of that design as you unlock your full potential—is this true for you, or are you developing unexpected talents? 

''Civilian ''

In the last decade of the Last War, Cannith began selling warforged to civilian organizations. This wasn’t a common thing; a farmer couldn’t just go to the shop and take a warforged home. But you could have served a dragonmarked house, been a bodyguard or a tutor for a noble family, or even been designed to serve as an enforcer for a criminal organization. This path provides a wide range of possible backgrounds and unusual stories. If you take the noble background, that doesn’t mean you hold noble rank yourself—you could be a trusted bodyguard who’s still treated as a member of the household. Perhaps a noble has made you their heir; such a thing would be unprecedented, but it would be an interesting story! With the folk hero background, you could have served as the protector of a particular village, with the story of your brave deeds spreading far and wide. 

As a civilian warforged, does your class reflect your original purpose, or have you risen beyond that? For example, you could take the sage background to reflect that you were designed to be a tutor or a researcher. You weren’t built to be a wizard—but over the course of your career, you began to master the arcane, far exceeding the expectations of your creators. 

Warforged who served on the battlefield are forced to find a new life, because there is no war. As you weren’t made for war, did the end of the war have a dramatic impact on you? The Treaty of Thronehold released you from any form of indenture, but do you still feel an attachment to your family or village? Did you ever have a sense of loyalty to a nation, or has your worldview always been shaped by the people you worked with? 

''Specialized or Unique ''

Battlefield warforged were largely mass produced. But there were many small runs of experimental warforged using specialized designs or experimental techniques. Perhaps your warforged rogue was part of a secret unit of assassins that were never deployed; how many others were in the unit, and what’s become of them? As a warforged entertainer, were you built to be a superstar—and if so, how does House Phiarlan feel about that? As a druid, have you found a bond to the natural world within, or did an eccentric artificer design you with the potential to change shape and bond with natural creatures? 

In developing an exotic warforged, talk with your DM to develop details about your creator and your purpose. Are you one of a kind or part of a small run? Do you know who built you and why, or is your true purpose a mystery even to you? 

---

!!!Mind and Body 
Cannith artificers designed your body and made you for a purpose. When the creation forge imbued you with life, there were things you knew. If you were built to be a warrior, you knew how to wield a sword and pike. You had an instinctive sense of squad tactics. There were things Cannith instructors had to teach you, but even there, it felt almost as if they were reminding you of things you already knew. 

This is one of the mysteries of the warforged. Where does your sentience come from? Cannith gave direction, but they didn’t design your mind; if they could, they’d have made you without emotion, and likely without the capacity for true independence. Many arcane scholars theorize that the creation forges don’t create the warforged mind, but rather summon it. Some believe that the warforged soul is drawn from the planes, that a warforged soldier is infused with the essence of Shavarath. Others suggest that the creation forges could be recycling husks from Dolurrh . . . perhaps the reason you sometimes feel that you’re remembering new skills is because you possessed those skills in a former life. 

Regardless, your Cannith instructors taught you to focus solely on the purpose they gave you. They trained you to suppress emotions, to be a weapon or a tool. Now you are free, able to explore your full potential. What does this mean for you? You can feel a full range of emotions, but do you? Or are you mystified by anger and love? What do you actually care about? Do you feel loyalty to a particular person? To a nation? To the future of the warforged race? Some warforged revel in the ability to choose a new path; others hold fast to their original purpose, and just want a reason to put those skills to work. 

''Evolution ''

Warforged aren’t machines; they’re living, magical beings, and can evolve both physically and mentally. Just as you can learn new skills, your body can transform over time. This is one way to reflect class benefits; can you think of a way that your body could physically change to account for a new ability? If you gain the Defense Fighting Style, that might reflect your natural armor becoming thicker. If you’re a warforged sorcerer, the ability to cast new spells could be reflected by arcane sigils appearing on your body, or by growing crystals that project light or energy. Never forget that you’re the product of magic as well as science. You may be made of metal and leather, but you’re also alive. 

''Integrated Protection ''

As a warforged, your armor is a part of you. Your skin is metal or leather, physically bonded to the rootlike tendrils that serve as your muscles. While it is possible for you to change your armor, very few warforged actually ever do this. The process is similar to a human peeling off their skin; while it’s not dangerous for the warforged, it’s a disturbing and uncomfortable experience. As an adventuring warforged, it’s an important ability to have, as it allows you to improve your defense and to make use of magical armor. But be aware of the weight of what you’re doing when you exchange your armor. 

Once you have integrated a suit of armor, it cannot be removed against your will. However, you are still considered to be wearing armor for purposes of the Defense Fighting Style or other feats and benefits that relate to armor. Likewise, integrated armor can be targeted by magical effects. 

''Integrated Tools ''

Just as a warforged can bond to armor or weapons, it’s possible to attach a tool to its body. There are two ways to do this. The first is to acquire an //integrated tool//. This is a common magic item that requires attunement; through attuning the tool, you bond it to your body. 

Unlike an //armblade//, an //integrated tool// represents more than just having a hammer attached to your hand. Most tools don’t represent one single object, but rather, a range of smaller items. How does this manifest with you? If you have a set of integrated thieves’ tools, do you use your fingers as lockpicks? Or do you draw the various tools you need out of compartments in your forearm? If you have an integrated instrument, is it built into your arm or your torso? Whatever you decide, remember that you have to have a hand free in order to make use of an //integrated too//l. You can say that your bagpipes are built into your chest, but you still need a free hand to play them. 

An //integrated tool// can be an interesting part of a character concept that reflects the purpose a warforged was built for. A warforged outlander could have a set of cartographer’s tools built into her body; she was designed to explore, using her integrated tools and innate sense of direction to constantly update her maps. A warforged entertainer with an integrated flute is a compelling image. In both cases, it’s not that the warforged acquires the tool, but rather, it was part of their original design. If you have an interesting origin story, you can see if your DM will allow you to take a tool you possess at character generation as an //integrated tool//. If not, //integrated tools// are common magic items and can be easily acquired over the course of your adventures. 

---

!!!Warforged Concepts 
When creating a warforged character, a simple place to start is to ask: What did you do during the war? How have you changed since it ended? Did you choose the path you’re on, or were you designed for it? The Living Weapon monk could be a warforged whose abilities reflect physical evolution combined with martial discipline. The Circle of the Forged is a druid path that lets you explore your connection to the natural world while remaining a creature of wood and stone. Here are a few other unusual concepts. 

''The Divine Tool ''

You were made by human hands. There are many who believe that you have no soul, that you’re just a tool. What would draw you to a religion and imbue you with the faith required to channel divine magic? If you’re creating a warforged paladin or cleric, here are a few ideas to consider: 

* Onatar is the Sovereign of the Forge, the patron of the smith and artificer. As a Forge cleric, you might believe that the warforged weren’t designed by a mortal mind; rather, Aaren d’Cannith was guided by divine inspiration to bring Onatar’s children into the world. Do you want to bring humans and warforged together, promoting a peaceful coexistence? Or do you believe that the warforged have their own divine purpose that has yet to be fulfilled?
* A artificer built fifteen warforged, each to serve as an avatar for one of the Sovereigns and Six. Did they succeed? You wield divine magic; is there the seed of a Sovereign within you, waiting to grow as you gain levels? Which Sovereign do you represent? And if the experiment appears to have worked, what became of your fourteen siblings?
* You have the body of a warforged but the mind of a human. You were a devoted follower of the Blood of Vol. After death, you awoke in a warforged body. You don’t know how this happened. Was it an accident? The work of a necromancer? Or are all warforged vessels for dormant ghosts? Regardless, you intend to use this second life to fight for the living.
* Any noble soul can draw on the power of the Silver Flame to protect the innocent. Were you inspired by a paladin who fought by your side, and you took up their sword when they fell in battle? Or perhaps you were //designed// to channel the power of the Flame — a prototype commissioned by one of the Cardinals of Thrane. Are you a miracle, a celebrated champion of the church with the acolyte background? Or has Cardinal Krozen branded you an abomination? 

''The Docent Warlock ''

A //docent// is a sentient magic item, a sphere that attaches to the chest of a warforged and offers guidance. Ancient //docents// have been found in Xen’drik, artifacts of unknown age and origin. You found such a //docent// and it’s attached to your body, altering your physiology and gifting you with supernatural powers. Mechanically you’re a warlock, but you wear your patron on your chest. The patron you choose reveals something about the nature of the //docent//. If you take the Fiend as your patron, it suggests that a dark power could be bound in the //docent//. If you take the Celestial as your patron, perhaps the //docent// holds a spirit of light. The //docent// is the source of your powers, but you don’t know if you can trust it; discovering the true nature of the docent will be part of your unfolding story. Is it a magic item created by a forgotten society? Or is an immortal spirit bound in the //docent// . . . and if so, what does it want? 

While the story idea is that you found a //docent//, your patron doesn’t use an attunement slot and you can’t actually remove it; it’s become a part of you. However, if you do somehow remove it, you won’t lose the powers you already possess. Should this happen, perhaps you’ll have to find a new patron, or perhaps you’ll find that the power was a part of you all along. 

''The Forgotten Assassin ''

You awoke in the bottom of a lake. You have no memory of how you got there or anything of your life before that moment. As warforged don’t need to breathe, you made your way back to shore. You’re a warforged rogue, quick and deadly. But you have flashes of your past, glimpses of memory in which you’re an assassin possessing far greater skills than you have today. As you gain levels, you are actually regaining these skills you once possessed. As you do so, perhaps you’ll also recover your memory. Who did you work for? Who did you kill? How and why was your memory wiped? And most of all, are you sure you want to know the answer?  

---

!!!Quirks
Warforged often display an odd personality trait or two, given how new they are to the world. The Warforged Quirks table contains example quirks.

| !к8 |!Причуда |
| 1 |You analyze-out loud-the potential threat posed by every creature you meet. |
| 2 |You often misread emotional cues. |
| 3 |You are fiercely protective of your friends. |
| 4 |You try to apply wartime discipline to every situation. |
| 5 |You don't know how to filter your feelings and are prone to dramatic emotional outbursts. |
| 6 |You don't understand clothing beyond its utility and assume it denotes a person's function. |
| 7 |You are obsessed with your appearance and con­ stantly polish and buff yourself. |
| 8 |War is the only thing that makes sense to you, and you're always looking for a fight. |

---

!!!Warforged Names
Most warforged were assigned numerical designations for use in military service. Many of them adopted nick­ names, often given to them by their comrades. As inde­pendent individuals, some have chosen new names as a way to express their path in life. A few take on human names, often the name of a fallen friend or mentor. 

''Warforged Names:'' Anchor, Banner, Bastion, Blade, Blue, Bow, Cart, Church, Crunch, Crystal, Dagger, Dent, Five, Glaive, Hammer, Iron, Lucky, Mace, Oak, Onyx, Pants, Pierce, Red, Rod, Rusty, Scout, Seven, Shield, Slash, Smith, Spike, Temple, Vault, Wall 
[img [https://i.imgur.com/lYaBvye.png]]
Marred but resolute, his grimacing face dripping with sweat, a half-orc reddens a finger across his wounds to draw a glowing, ruby glyph in the air. He grips the weightless, completed sigil, twisting it to unleash dark magical energies that fire forward, cursing the stalking behemoth from within its own veins to better even the odds. 

A mysterious half-elf swathed in a worn cloak and rugged leather armor carefully investigates a grizzly scene off the roadway, her eyes flashing with recognition as she meditates on the remnants of the massacre. The survivor who warily hired her withdraws with a jump as the half-elf suddenly shoots to her feet, sure in the knowledge of the culprit, where it calls home, and how little time there is to find it. 

Stepping into the lightless chambers of ancient dust and lingering whispers, the halfling’s nose picks up the pungent smell of imminent danger as she hears the scraping of bone and claw on nearby stone. She winces as she runs her blade across her palm, the steel transmuting her blood into glowing runes of powerful magic, her sword suddenly engulfed in arcane flames, eager to brand and burn the flesh of her enemies. 

Often feared or misunderstood, and driven by an unending drive to destroy the wicked, blood hunters are clever, arcane warriors who have bound their essence to the dark creatures they hunt to better stalk and survive their prey. Armed with the rites of forbidden blood magic and a willingness to sacrifice their own vitality and humanity for the cause, they protect the realms from the shadows, ever vigilant to avoid becoming the same monsters they choose to hunt. 

---

!!Sacrifice to Preserve Life 
While most of the classic schools of magical study are well known and widely respected, the less refined and macabre incantations of Hemocraft have long been forbidden and lost to most of the civilized world. Blood Hunters have reclaimed these techniques away from the judging eyes of society, finding blood magic’s esoteric nature effective against the evils that often defy the divine powers that historically hold the line. 

Through careful study and practice, blood hunters have honed the rites of hemocraft into their combat prowess, forfeiting a facet of their health to infuse their weapons with powerful blood magic and summoning the elements to envelop their strikes. They can sear an arcane brand into the body of their quarry that hinders their foe’s abilities and punishes their aggression, or call blood curses upon their enemies, manipulating their bodies from the inside. Willing to suffer whatever it takes to achieve victory, these adept warriors have forged themselves into a potent force against the terrors that threaten the innocent. 

---

!!A Monster to Fight Monsters 
Whether driven by the wish to make a difference in a dangerous world, the need to take vengeance for a great wrong they have suffered, being inspired by witnessing the strange and powerful techniques of another blood hunter in person, or just seeking a place to belong in an uncaring world, the reasons one may take up the Hunter’s Bane and choose this life are many and varied. In joining an order of blood hunters, one is also joining a tight family bound by service to each other and the common cause. For many, this is the only family they have known or have left, so the kinship felt between members of an order is a bond neigh unbreakable. 

Beyond the boundaries of the order, however, the life of a blood hunter is often not an easy one. The rituals of the Hunter’s Bane regularly leave one visibly changed and prone to unsettle common folk, and the witnessing of hemocraft can invoke a superstitious fear from even the most learned scholar. While some societies have come to accept the good deeds of the orders, many blood hunters publicly hide their nature unless absolutely necessary, feeling more comfortable in the wilds and wastes of the world where the Orders commonly train. Even so, the best work a blood hunter can do usually involves the poor and defenseless on the outskirts of society, those prone to the corrupting touch of fiends and dark intension. Braving the threat of vilification, these dark protectors wade through civilization, earning coin as mercenaries or bounty hunters, ever watching for the signs of something more nefarious beneath the surface. 

In choosing this path, a blood hunter has irrevocably given a part of themselves to their cause, physically, emotionally, and sometimes morally. The orders of blood hunters practice their own unique ideals and methods, often employing techniques with dark origins that test the strength and will of these guardians. Many wrestle with the fear of losing this struggle, so a life of discipline and vigilance drives their travels as they wander the countryside in search of like-minded adventurers and whispers of dark deeds afoot. 

---

!!Creating a Blood Hunter
As you create a blood hunter, the most important aspects of your character are why you were driven to this lifestyle, and why do you seek to give up everything to wallow in the dark with the evils you hunt? Did you lose a loved one to a fiendish beast and now wish to prevent others from suffering the same fate? Do you seek a sense of purpose and security, and found this among the order that has taken you in? Have you always carried a seed of darkness within you, and seek kin to watch over you and prevent you succumbing to it? Were you once a holy warrior who strayed from his faith and was cast out, but still seek to give yourself to the cause of protecting the innocent? Or are you a criminal with a dark past seeking to make amends, taking this life as a path of penance? 

What is your relationship with the powers of hemocraft and the abilities it promises to grant you as you step closer to its mastery? Do you respect and fear the ancient power that surges through your veins, using them only when necessary? Do you relish in the strength it offers you, embracing your gifts and using them freely? Are you w worried the superstitions are right, and this power will eventually turn you into one of the monsters you hunt? Or has your study instilled you with the confident control of mind over matter, certain you can bend these gifts to bring a brighter dawn? 

Consider too that while a blood hunter belongs to an order, many strike out on their own to do their best work. What made you leave the comfort of your order? Do you intend to return, or have you decided you have more to learn in the world beyond? What do you seek in other adventurers that can help you meet your goals? 

While most blood hunters follow a path of good or neutrality in their pursuits, some have fallen to the dark, seductive side of hemocraft and use their abilities for selfish and evil purposes. These deviants are always thrown from the order, and often hunted along with the creatures they once trained to fell. 
<<<
Это были рассказы о беспокойном народе , путешествовавшем по морям и рекам на длинных кораблях, сперва для грабежа и разбоя, потом в поисках мест для поселений. Но с каждой страницы била энергия, любовь к приключениям. Лириэль читала большую часть ночи, тратя драгоценные свечи. 

Она никогда не задумывалась о людях, но эти истории восхищали ее. В этих пожелтевших страницах говорилось о храбрых героях, странных и яростных животных, могучих богах и магии, которая была неотъемлемой частью той дальней земли. 

— Элейн Каннингем, //Дочь дроу// 

<<<

В большинстве миров люди — это самая молодая из распространённых рас. Они поздно вышли на мировую сцену и живут намного меньше, чем дварфы, эльфы и драконы. Возможно, именно краткость их жизней заставляет их стремиться достигнуть как можно большего в отведённый им срок. А быть может, они хотят что-то доказать старшим расам, и поэтому создают могучие империи, основанные на завоеваниях и торговле. Что бы ни двигало ими, люди всегда были инноваторами и пионерами во всех мирах.

---

!!!Многоликие
Со своей склонностью к миграции и завоеваниям, люди более разнообразны физически, чем другие распространенные расы. Не существует типичной внешности человека. Рост отдельного представителя может составлять от 150 до 185 см, а вес — от 60 до 110 кг. Оттенок кожи у людей варьируется от почти чёрного до очень бледного, а волосы — от чёрного до светлого тонов (волнистые, кудрявые или прямые); мужчины могут носить волосы на лице, густые или редкие. Многие люди имеют примесь нечеловеческой крови, выдающей черты эльфа, орка, или предков другого происхождения. Люди достигают совершеннолетия около двадцати лет, и редко проживают одно столетие.

---

!!!Разнообразие во всём
Люди являются самыми приспособленным и амбициозным народом среди распространённых рас. Их вкусы, нравы и обычаи сильно отличаются во множестве разных земель, где они поселились. Однако там, где они селятся, они остаются надолго: строят города, стоящие веками, и великие королевства, сохраняющиеся множество столетий. У отдельного человека может быть относительно короткая продолжительность жизни, но человеческая нация и культура сохраняет традиции от своих истоков на время, намного превышающее память одного человека. Они живут сегодняшним днём, что весьма хорошо подходит для приключенческой жизни, и позволяет вдобавок строить планы на будущее, со стремлением оставить после себя прочное наследие. Индивидуально или в группах, люди легко приспосабливаются к ситуации, и всегда остаются внимательными к изменяющейся политической и социальной динамике.

---

!!!Прочные институты
Там, где один эльф или дварф могут взять ответственность за охрану особого места или великой тайны, человек создаёт священные порядки и институты. В то время как кланы дварфов и старейшины полуросликов передают свои традиции новым поколениям, человеческие храмы, государства, библиотеки и своды законов запечатлевают их традиции в анналах истории. Люди мечтают о бессмертии, но (за исключением тех, кто становится нежитью или достигает божественного восхождения, чтобы избежать оков смерти) достигают его, когда продолжают жить в памяти, после смерти. 

Хотя некоторые люди могут быть ксенофобами, в целом их общество очень смешано. На землях людей обитает большое количество нечеловеческих рас, по сравнению с количеством людей, живущих на землях нелюдей.

---

!!!Воплощение амбиций
Люди, ищущие приключений, являются самыми смелыми и амбициозными представителями смелой и амбициозной расы. Они стремятся заработать славу в глазах своих товарищей, накапливая власть, богатство и популярность. Более чем другие народы люди борются за цель, а не за расширение территорий или процветание отдельных фракций.

---

!!!Человеческие имена и этносы
Поскольку культура людей самая разнообразная среди всех существующих рас, у них нет типичных имён. Некоторые родители дают своим детям имена из других наречий, например, из Дварфского или Эльфийского (произносимые более или менее правильно), но большинство родителей даёт имена, связанные с культурой своего региона или традициями предков. 

Культура быта и физические характеристики людей могут сильно меняться в зависимости от региона. В Забытых Королевствах, например, одежда, архитектура, кухня, музыка, и литература в северо-западных землях Серебряных Пустошей отличаются от тех, что есть в далёком Тёрмише или Импилтуре на востоке, и совсем не похожи на их аналоги в далёком Кара-Туре. Физические характеристики людей различаются в соответствии с переселениями их предков, поэтому люди Серебряных Пустошей имеют все возможные сочетания цветов кожи. 
<<<
Если вы обдумываете, брать ли с собой чешуйчатого в приключение, запомните этот важный факт. Этот странный, нечеловеческий блеск в его глазах, когда он оглядывает вас – тот же взгляд, которым вы смотрите на свежеподжареный стейк. 

– Тордек, дварфийский воин и приключенец 
<<<


Только дурак смотрит на людоящеров и видит не более, чем просто чешуйчатых гуманоидов. Несмотря на их физическую форму, людоящеры имеют больше общего с игуанами или драконами, чем с людьми, дварфами или эльфами. Людоящеры обладают чуждым и непостижимым образом мысли, их желаниями и мыслями руководит другой набор основных принципов, чем у существ с теплой кровью. Их мрачные болотные дома могут располагаться в сотнях миль от ближайшего людского поселения, но разрыв между образом мыслей у них и у гладкокожих намного больше. 

Несмотря на их чужеродное мировоззрение, некоторые людоящеры прилагают усилия, чтобы понять и, по-своему, подружиться с представителями других рас. Такие людоящеры становятся преданными и умелыми союзниками. 

---

!!!Иная логика 
Рептилоидная натура людоящеров проявляется не только в их внешности, но также и в том, как они думают и действуют. Людоящеры испытывают куда как меньше эмоций, чем другие гуманоиды. Как и у большинства рептилий, их чувства в основном вращаются вокруг страха, агрессии, и удовольствия. 

Вместо чувств людоящеры испытывают реакции на существ и ситуации. Например, люди, столкнувшиеся с сердитым троллем, на подсознательном уровне испытывают страх. Они испуганны, их движения и мысли путаются, они реагируют инстинктивно. Страх захватывает их и управляет ими. Для людоящеров же, наоборот, эмоции — это особые реакции на других существ, объекты и ситуации. Людоящер не думает, «я боюсь.» Вместо этого он рассматривает самых сильных и агрессивных существ как угрозу, которую по возможности нужно избегать. Если такие существа нападают, людоящер бежит, сражаясь только если его загнали в угол. Людоящер не боится тролля; вместо этого он понимает, что тролль это внушающее страх, опасное существо, и реагирует соответственно. 

Людоящеры никогда не сердятся так, как это делают другие, но они могут быть агрессивны к существам, которых они могут победить в бою, и которые не опасны для них как-то иначе. Они агрессивны к добыче, которую хотят съесть, существам, которые приносят им вред, и так далее. 

Людоящерам приятны существа и вещи, которые облегчают жизнь. Приятные вещи должны быть сохранены и защищены, иногда даже за счет безопасности самого людоящера. Большинство приятных для людоящера существ и вещей оцениваются скорее как хорошие, чем как пугающие. 


---

!!!Холодные и расчетливые 
Большинство гуманоидов считает хладнокровных людей недостаточно эмоциональными и сочувствующими. Тот же ярлык навесили на людоящеров. В отсутствие каких–либо внутренних эмоциональных реакций, людоящеры ведут себя отстраненно. Они не оплакивают павших товарищей и не впадают в ярость по отношению к врагам. Они просто наблюдают и реагируют согласно ситуации. 

У людоящеров нет эмоциональных связей с прошлым. Они оценивают ситуации, основываясь на их текущей и будущей полезности и важности. Наиболее сильно это проявляется тогда, когда людоящеры имеют дело с мертвыми. Для людоящера умерший товарищ становится потенциальным источником еды. Этот компаньон, возможно, когда-то был воином или охотником, но теперь он – не более чем свежее мясо. 

Людоящер, который живет среди других гуманоидов, может, в течение долгого времени учиться уважать эмоции других существ. Людоящер не разделяет эти чувства, но вместе с тем оценивает их так же беспристрастно. Да, павший дварф мог бы быть полезнее как еда, но разрубание тела на стейки вызывает агрессию у других гуманоидов и делает их менее полезными в сражении. 

---

!!!Полезность и выживание 
Мышление людоящеров могло бы показаться излишне жестоким, но оно помогает им выжить во враждебном окружении. Болота, которые они населяют, наполнены потрясающим разнообразием угроз. Людоящеры нацелены на выживание любой ценой, без сантиментов. 

Людоящеры оценивают всё и всех с точки зрения полезности. Искусство и красота не имеют для них значения. Острый меч полезен и хорошо служит, в то время как тупой меч – мертвый груз без точильного камня. 

Людоящеры не видят необходимости планировать будущее дальше чем на сезон. Этот подход позволяет им поддерживать свой текущий уровень влияния в мире, но это ограничивает их развитие. У людоящеров нет никакого интереса к развитию письма, созданию долгосрочных планов, или культивированию других ме- тодов развития за пределы их обычного существования как охотников и собирателей. 


---

!!!Несчастные мягкокожие 
По сути, людоящеры относятся к другим гуманоидам с безразличием, граничащим с жалостью. Учитывая, что другие гуманоиды родились без крепкой чешуи и острых зубов, это вообще чудо, что им удалось выжить так долго. Типичный человек загнулся бы на болотах за день. 

Однако, если другие существа оказываются полезными для людоящера, то они вызывают у людоящеров желание защитить их, которое тем сильнее, чем внешне слабее защищаемый. Людоящеры оценивают таких существ как молодых и неспособных защищаться детенышей, которые могут оказаться полезным в будущем, если о них заботиться. 

---

!!!Речь людоящеров
Людоящеры могут отлично владеть Общим языком, но в следствие особенностей их склада ума, структура их речи отличается от других гуманоидов. 

Людоящеры редко используют метафоры. Их речь почти всегда буквальна. Они могут понимать идиомы, но с некоторыми трудностями. 

Имена путают их, если они не являются описательными. Они склонны давать собственные имена согласно своим традициям другим существам, используя слова Общего языка. 

Людоящеры используют активные глаголы, чтобы описывать мир. Людоящер в холодную погоду может сказать, «Этот ветер приносит холод» вместо «Мне холодно». Людоящеры склонны определять вещи с точки зрения действий, а не результатов. 

---

!!!Индивидуальность людоящеров 
Вы можете использовать таблицу ниже, чтобы определить персональные причуды или особые манеры вашего людоящера. 

| !к8 |!Причуда |
| 1 |Вы ненавидите расточительство и не видите причин, почему бы не освежевать павших врагов. Пальцы – это вкусно и компактно!  |
| 2 |Вы лучше всего спите, когда большей частью погружены в воду.  |
| 3 |Деньги для вас бессмысленны.  |
| 4 |Вы думаете, что есть только две разновидности гуманоидов: людоящеры и мясо.  |
| 5 |Вы научились смеяться. Вы используете этот талант в ответ на все эмоциональные ситуации, чтобы лучше находить общий язык со своими товарищами.  |
| 6 |Вы все еще не понимаете, как работают метафоры, но это не мешает вам использовать их при любом удобном случае.  |
| 7 |Вы высоко цените мягких гуманоидов, которые понимают, что нуждаются в кольчуге и мечах, чтобы соответствовать тем подаркам, с которыми вы родились.  |
| 8 |Вы любите есть свою еду пока она все еще трепыхается.  |

---

!!!Имена людоящеров 
Людоящеры берут свои имена из драконьего языка. Они используют простые определения, даваемые племенем, основанные на известных делах и поступках. Например, Гарурт переводится как «топор»: имя, данное воину людоящеров, который победил орка и завладел его оружием. Людоящера, которому нравится скрываться в зарослях тростника, чтобы заманить в засаду животное, можно было бы назвать Ачуак, что означает «зеленый», описывая, как она смешивается с листвой. 

Людоящеры не делают различия между мужскими и женскими именами. Каждое приведенное в качестве примера имя дано с переводом в круглых скобках. 

''Имена людоящеров:'' Арит (война), Ачуак (зеленый), Биэшра (животное), Варгач (сражение), Вертика (гора), Вилигнат (ожог), Вит (сталь), Вута (черный), Гарурт (топор), Дарастрикс (дракон), Джанк (молоток), Ирхтос (тайна), Кепеск (шторм), Кетенд (драгоценный камень), Корт (опасность), Косч (небольшой), Котар (демон), Литрикс (броня), Мирик (песня), Отокент (умный), Саурив (глаз), Троден (много), Туркер (ночь), Уск (железо)
<<<
Полезная уловка: если вы столкнетесь с медвежатником, у которого на шипы воткнуты отрубленные головы-трофеи, произнесите заклинание, позволяющее головам заговорить. После этого вы сможете заставить делать медвежатника почти что угодно. 

– Эльминстер, //Справочник Воло по монстрам//

<<<

Медвежатники фигурируют в страшилках многих рас – громадные, волосатые твари, которые крадутся в тени, тихо как кошки. Если вы будете идти по лесу один, то медвежатник протянет свои лапы из кустов и задушит вас. Если вы ночью отойдете слишком далеко от дома, то медвежатники схватят вас, чтобы сожрать в своей берлоге. Если медвежатник отрезает вам голову, ваша душа остается запертой внутри, и медвежатники используют вашу голову, чтобы магически повелевать всеми, кого вы когда-либо знали. 

Жуткие истории вроде этих, несут в себе долю правды. Медвежатники, нападая, действительно полагаются на скрытность и силу, предпочитая действовать ночью. Они действительно собирают головы вражеских лидеров, но настолько же маловероятно, что они действительно будут есть врагов без разбора, как то, что это будут делать люди. Медвежатники, скорее всего, не нападут на одинокого путника или заблудившихся детей, если это, конечно, не принесёт им какую-либо пользу. С точки зрения остального мира, их агрессивность и дикость к счастью компенсируются их редкостью и ленивостью. 

---

!!!Ленивые и жестокие тунеядцы 
Вне боя медвежатники проводят большую часть своего времени отдыхая или подрёмывая. Они почти совсем не занимаются ремеслом или сельским хозяйством, или как-то иначе делают что-либо значимое. Они заставляют более слабых существ выполнять их приказы, а сами тем временем расслабляются. Когда превосходящая сила попытается заставить медвежатников служить, они попытаются сбежать, вместо того, чтобы выполнить работу или противостоять противнику. Даже состоящих в войске гоблиноидов и участвующих в войне медвежатников часто нужно будить и подкупать, чтобы заставить их выполнять свои обязанности. 

Эта лень не позволяет понять то, насколько злы эти существа. Медвежатники способны впадать в припадки невероятной ярости, используя свои мускулистые тела для точного, быстрого и безжалостного избиения. По своей сути, медвежатники – засадные хищники, привыкшие к длительным периодам бездеятельности, нарушаемым кратковременными вспышками смертоносной активности. Хотя они могут быть свирепыми, медвежатники не приспособлены для длительной активности. 

---

!!!Менталитет банды 
Так как медвежатники – не очень плодовитая раса, вся их популяция малочисленна и раскидана в широкой области. Медвежатники живут семейными группами, которые действуют скорее, как банды. В группе как правило не больше дюжины особей, в основном родных братьев и сестер и их пары, а также немного потомства и пара стариков. Банда живет внутри и в окрестностях небольшого огороженного места, часто естественной пещеры или старой берлоги медведя, и у них может быть дополнительное логово в другом месте на их территории, которую используют временно, когда идут в длительный поход за едой. 

В хорошие времена банда медвежатников сплочена, и ее участники хорошо сотрудничают, охотясь или запугивая других существ. Но когда удача отворачивается от банды, её члены становятся эгоистичными и могут саботировать друг друга, чтобы подавить противников или изгнать более слабых или непопулярных участников, чтобы сохранить остальную часть банды сильной. К счастью для расы в целом, даже у юных и пожилых медвежатников есть способность в одиночку выжить в дикой местности, и изгнанный члены банды может в конечном счете присоединиться к другой группе. 

Не смотря на свою природу, влияние медвежатников на окружающий мир не сильно больше, чем у стаи волков. Они существуют, создавая простые инструменты, охотясь и собирая еду, и банды иногда мирно сходятся, чтобы обменяться между собой товарами и членами банды. 

---

!!!Злое поклонение злым богам 
Медвежатники поклоняются двум богам: братьям Хруггеку и Гранхулу. Хруггек – внушающий страх старший брат, обладающий легендарной силой и мастерством в бою. Медвежатники полагают, что их сила и храбрость проистекают от него. Коварный Гранхул – младший брат, и истории медвежатников рассказывают, что он одарил их скрытностью, но взамен он высосал их энергию, чтобы медвежатники спали вместо него в своих берлогах, в то время как он будет вечно бдительным и бодрым. 

Согласно легендам медвежатников, Хруггек и Гранхул часто сражаются бок о бок, охотясь на все, с чем они сталкиваются, как и позволяет им их право сильнейшего. Хруггек забирает головы тех, кого он убивает и насаживает их на колья в своем логове, где они молят его о милосердии и восхваляют его силу. Гранхул присматривает за Хруггеком, когда тот спит, но, если он должен быть в другом месте, он шепчет команды отрезанным головам, чтобы они разбудили Хруггека, если ему будет угрожать опасность. 

Медвежатники восхищаются качествами обоих братьев. Из-за Хруггека они считают, что отвага и физическое превосходство — это их естественное состояние. Благодаря Гранхулу они могут использовать свои размер и силу, чтобы работать тайными убийцами вместо того, чтобы слоняться по округе как огры. 

Запугивания, убийства и участие в сражениях – для медвежатников это священные действия. Удушение застанного врасплох противника и нанесение поражения противнику в открытом бою считаются актами почитания богов, также как дварфы считают, что ковка метала является священнодейством для Морадина. 

Медвежатники признают двух других богов, которых они презирают и боятся: Маглубиет и Скиггарет. 

Маглубиет – глава пантеона гоблиноидов, вынудил обоих братьев подчиниться его власти, но вместо того, чтобы убить их, он проявил милосердие и даже счел их достойными свободы – под его управлением – так, чтобы медвежатники смогли продолжить использовать свои таланты против его врагов. Медвежатники понимают, что, чтя Хруггека и Гранхула, они также отдают дань Маглубиету, даже при том, что они открыто не воздают должное своему повелителю. Когда медвежатников призывают присоединиться к войску, они полагают, что Маглубиет снова загнал братьев в божественное сражение, и они чтят своих богов, следуя их примеру. 

Скиггарет – это страшилка медвежатников, столь же ненавистный и ужасный для них, как сами медвежатники в глазах многих других рас. Его имя редко произносят, причем всегда шепотом. Влияние Скиггарета проявляется время от времени, когда медвежатники вынуждены действовать трусливо; медвежатник, который знает или чувствует, что находится в смертельной опасности, впадает в своего рода безумие и сделает что угодно, чтобы остаться в живых, включая попытку убежать. Медвежатники полагают, что это чувство страха появляется из-за того, что в них вселяется Скиггарет, они не любят испытывать это чувство. После того, как безумие прошло, медвежатники не думают о вещах, которые делали в присутствии Скиггарета. Разговор об этом может призвать его назад.

---

!!!Благословения богов медвежатников 
Для медвежатников шаманы и священники бесполезны. Никому не надо говорить им, чего хотят их боги. Если боги-братья сердятся на них, они сообщают медвежатникам об этом вспышками молний (Хруггек), либо ослепляя их или убивая (Гранхул). Медвежатники поклоняются своим богам, просто охотясь на других существ и не используя никаких других церемоний, чтобы оказать почтение – с одним исключением. 

В акте почитания, который также иногда привлекает благосклонное внимание их богов, медвежатники отрубают головы побежденных противников, отрезают или пришивают открытыми веки, и оставляют рты висеть открытыми. Головы затем насаживают на колья или подвешивают на веревках вокруг логова медвежатников. Сами головы – трофеи, которые чтят Хруггека, а их всегда открытые глаза – уважение к никогда не спящему Гранхулу. 

Головы лидеров и могущественных противников являются особенно священными, и преподнёсшая такой трофей банда медвежатников может получить особый дар. Банда, которая снискала расположение Хруггека и Гранхула таким образом, может обнаружить, что голова кричит, когда враг подойдет слишком близко. Иногда головы людей, у которых есть информация, нужная медвежатникам, рассказывают свои секреты вперемежку с плаксивыми мольбами о милосердии.
[img [https://i.imgur.com/lYaBvye.png]]
<<<
Лорд Дагулт Неверэмбер однажды спьяну сказал мне, что орки боятся своих богов и если разыграть эту карту верно, их можно контролировать при помощи страха и заставить плясать под свою дудку. 

– Воло, //Справочник Воло по монстрам//

<<<

В страшном сне любого цивилизованного места мира вы можете почувствовать гром боевых барабанов за городскими воротами и услышать хор голосов, рычащих: «Груумш!». Не важно насколько прочны стены, умелы лучники или храбры рыцари – лишь несколько поселений на протяжении всей истории смогли выстоять перед крупномасштабным вторжением орков. 

Каждый солдат, выживший в столкновении с орками, расскажет о противостоянии с громадным противником, который может расколоть череп воина единственным ударом, являющегося частью силы, что может пожинать врагов, словно серп колосья пшеницы. Только умелый и решительный герой может надеяться пережить поединок с орком. 

Дикие и бесстрашные племена орков всегда находятся в поисках эльфов, дварфов и людей, чтобы уничтожить их. Мотив их ненависти к цивилизованным расам мира и необходимость утоления требований богов продиктован верой, что, если орки будут хорошо сражаться и принесут славу своему племени, Груумш призовет их на родной план Ахерон. Там в посмертии избранные присоединятся к Груумшу и его армии в их бесконечной межпланарной битве за превосходство. 

---

!!!Боги орков 
Орки верят, что их боги непобедимы. Они видят работу определяющих их и их богов принципов в повседневной жизни вокруг себя – природа поощряет сильных и беспощадно уничтожает слабых и нерешительных. Орки не столько уважают, сколько боятся своих богов: у каждого племени есть суеверия о том, как предотвратить их гнев и получить благословение. Эти укоренившиеся неуверенность и страх проявляются в форме дикости и жестокости; орки грабят и убивают в надежде успокоить богов и избежать их ужасного возмездия. 

На вершине пантеона орков находится Груумш Одноглазый, тот, кто создал орков и продолжает управлять их судьбами. Ему помогают и содействуют другие божества-воины, Богтру и Илневал, которые приносят с собой силу и хитрость на поле боя. Последователи трех богов – налетчики и разрушители племени – часто являются единственными, кого видят жертвы племени. 

В глубинах логова племени, далеко от горна войны, где воины собираются и празднуют, живут последователи Юртруса, бога болезни и смерти, и Шаргааса, бога темноты и неизвестности. Орки, слишком слабые для битв (из-за физической слабости, врожденных дефектов, ран или возраста), часто присоединяются к этим культам, спасаясь от ежедневных унижений, изгнания или смерти. 

Жрицы Лутик, богини орков, олицетворяющей как жизнь, так и посмертие, выступают в качестве посредников между двумя частями племени. Именно ее поклонники растят молодых орков воинами, а затем, в конце их жизни, отводят их к Юртрусу и Шаргаасу, в смерть и великую неизвестность. 

---

!!!Жизнь племени
Орки выживают благодаря своей дикости и числу. В их жизни нет места слабости, каждый воин должен быть достаточно сильным, чтобы взять то, что принадлежит ему по праву сильного. Орков не интересуют союзы, торговые переговоры или дипломатия. Их заботит лишь удовлетворение их неутолимой жажды битвы, поражение врагов и умиротворение их богов. 

---

!!!Взрывная рождаемость 
Орки необыкновенно быстро размножаются, чтобы восполнить потери от их бесконечных войн (и они не особенно разборчивы с кем спариваться, поэтому в мире можно обнаружить таких существ, как полуорки и огриллоны). Женщины, собирающиеся родить, освобождаются от работ, и отправляются в щенячий загон логова, где за ними ухаживают последователи Лутик. 

Орки не вступают в брак, и не ищут себе пары до самого момента спаривания. Во всех остальных случаях мужчины и женщины более-менее равнодушны друг к другу. Все орки полагают, что спаривание является элементом жизненной необходимости, и не придают ему большего значения. 

В возрасте 4 лет орк считается подростком, к 12 годам – полностью взрослым. Большинство орков редко доживает до 25 лет из-за болезней или войн, однако, он может дожить до 40 лет, оставаясь здоровым почти до самого конца. Божественное благословение Лутик может продлить жизнь орка, невзирая на то, что Груумша никогда не радует, когда она делает это, и не одобряет таких «благословленных».

---

!!!Будущие воины 
Молодые орки быстро взрослеют в попытке пережить жестокое воспитание. Их ранние годы омрачены испытаниями силы, жестоким соперничеством и отсутствием материнской и отеческой любви. С того момента как ребенок сможет владеть палкой или грубым ножом, он самоутверждается и защищает себя сам, одновременно обучаясь сражаться, выживать в дикой природе, и бояться богов. 

Дети, которые не смогли вынести суровость жизнь, наполненной битвами, отделяются от главной части племени, и передаются последователями Юртруса. Достигший зрелости орк воин хорошо подготовлен к жизни, полной сражений. 

---

!!!Культура и верования орков 
Орки живут в постоянном страхе пред богами, и это чувство глубоко пустило корни в их менталитете. Они считают, что повсюду в окружающем мире проявляются знаки воли их богов, и возлагают ответственность за выявление знаков и знамений, хороших и плохих, а также решение, как племени реагировать на них, на священников племени. 

Как у расы, у орков отсутствуют примечательных общих социальных черт, кроме как некой схожести в использовании грубой письменности, распространенной среди всех орков, и в том, как они используют краску, чтобы украшать и характеризовать себя и свое жилище.

---

!!!Знамения и суеверия 
Орки полагают, что любое, даже на первый взгляд неважное открытие или событие — следы когтей медведя на дереве, стая воронья или внезапный порыв ветра — могут быть посланием от богов. Если племя сталкивалось с таким предзнаменованием прежде, священники понимают, что оно может значить, но, если у божественного знака нет четкого объяснения, священнослужителям, возможно, придется медитировать в течение многих дней или часов, чтобы увидеть знамения, поясняющие его значение. 

У каждой группы орков есть свои собственные суеверия и понимание определенных предзнаменования. Эти традиции меняются от племени к племени и часто основаны на событиях, имевших место в прошлом. Вот несколько примеров: 

• Если дварф или человек перед смертью призывают своего бога, то нужно носить с собой уши трупа в течении трех дней, дабы отвести от себя возмездие, а затем похоронить или сжечь их.

• Три ворона всегда добрый знак.

• Если плюнуть там, где спишь, это принесет удачу. 

• Если носить при себе кости гнома, то это даст защиту от болезней. 

• Никогда не стойте внутри кольца камней, грибов или любого другого круга. 

• Увидеть падающую звезду перед битвой – плохой знак. Чтобы защититься от него, нужно проглотить камень. 

• Подношение эльфийских ушей приносит благосклонность Груумша 

• Если закопать пять камней на рассвете перед долгим путешествием, то всегда можно найти путь назад к военному очагу. 

• Топните ногой три раза и произнесите: «Груумш», чтобы оградиться от злой магии. 

---

!!!Символьная коммуникация 
У орков есть письменность, основанная на дварфийской, но, не будучи поголовно грамотными, они редко ведут записи или излагают свои мысли письменно. Если оркам необходимо что-то сообщить письменно, они используют грубые символы, передающие несложную информацию, такие как «здесь хранится еда», «опасность близко», «иди сюда». Группа орков, участвующая в набеге, может оставлять такие знаки на пути своего движения, в помощь воинам, путешествующим через эту область позднее. Горные проводники, друиды и следопыты могут быть знакомы с множеством таких символов, что предостерегает их вместе с подопечными от вторжения на территорию племени. 

---

!!!Цвета завоевания 
У трех цветов есть особое значение среди орков, они раскрашивают тела, имущество и убежища с помощью пигментов, которые дают эти цвета. Красная охра символизирует кровь, пепельно-белый представляет смерть, а угольно-черный обозначает тьму. 

Неписанные законы, которые определяют статус отдельных орков в племени, указывают определенную степень, в которой цвета могут быть использованы для раскрашивания себя или своих вещей. Например, вождь одного племени может быть единственным, который имеет право окрасить свои клыки красной охрой, в то время как воины другого племени втирают полоски пепла в свою одежду, что символизирует безопасное возвращение с набега. 

---

!!!Отыгрыш орка 
Большинство орков ведут жизнь, полную разрушения и резни. Но в отличии от существ, чья натура злая от природы, таких как гноллы, возможно, что орк, оторванный от своей культуры, сможет развить в себе некоторое чувство любви, сострадания и сочувствия. 

Не имеет значения, насколько одомашненным выглядит орк, в жилах у него по-прежнему течет орочья кровь. С его инстинктивной любовью к битвам и желанием доказать свою силу, орк, пытающийся жить в границах цивилизованности, сталкивается с трудной задачей. 

---

!!!Имена орков 
Имена орков не всегда что-то значат на их языке, а самые заслуживающие внимания личности получают прозвище от своих соплеменников. 

''Мужские имена:'' Абзуг, Бажок, Гел, Груток, Денч, Джахрук, Имш, Кет, Краск, Лортар, Мобад, Мугруб, Муррен, Ронт, Рук, Рхог, Токк, Урзул, Фенг, Хенк, Холг, Шамок, Шамп, Шугог

''Женские имена:'' Багги, Вола, Волен, Евельда, Имен, Кансиф, Мев, Муай, Ниига, Овак, Оунка, Сута, Шаута, Эмен, Энгонг

''Прозвища:'' Глазодер, Грязный, Железный клык, Жестокий, Живодер, Копье смерти, Костелом, Молот Рока, Потрошитель,Рассекатель черепов, Хребтолом, Эльфийский мясник

---

!!!Больше об орках
Справочник Воло по монстрам, Глава 1: Происхождение монстров, Орки: Богоизбранные, с. 81
[img [https://i.imgur.com/lYaBvye.png]]
<<<
Long ago there was a woman named Jes, and she had one hundred children. Her rivals conspired against her and swore to kill her children. Jes begged the Sovereigns for help, but their only answer was the wind and rain. In the depths of her despair, a lonely traveler took her hand. "I will protect your children if they follow my path. Let them wander the world. They may be shunned and feared, but they will never be destroyed." Jes agreed, and the traveler gave her his cloak. When she draped it over her children, their old faces melted away and they could be whoever they wanted to be. And so it remains. Though the children are shunned by all, the gift of the Traveler protects them still. 

— Chance, changeling priest 
<<<


Changelings can shift their forms with a thought. Many changelings use this gift as a form of artistic and emo­ tional expression. It's also an invaluable tool for grifters, spies, and others who wish to deceive. This leads many people to treat changelings with suspicion. 


<<<
I will protect your children if they follow my path. Let them wander the world. None will know them. They will have no kingdom but the road, and no enemy will find them. They may be shunned by all, but they will never be destroyed.
<<<


These are said to be the words of the Traveler, a promise that was made to the first changelings bestowed with the gift of shapeshifting. Many changelings still live according to these principles—wandering clans that remain hidden from the world. But there are an ever-increasing number of changelings who chose to live in the open. As a changeling adventurer, you may use your gifts to fool your enemies—but do you show your true face to your companions?

---

!!!Changeling Origins 
Changelings are spread across Khorvaire and Sarlona. They can interbreed with many other humanoid species, and the offspring of such a union will either be changeling or the other species—there are no “half-changelings.” So just as you can be a Brelish elf with no ties to Aerenal, you can be a changeling with no connection to any changeling culture or community. There are changeling students in Arcanix and Morgrave, changeling agents in the King’s Citadel and the Royal Eyes of Aundair, and any number of changelings devoted to the nations they call home. So you don’t //need// deep cultural ties to play a changeling character, but if you want to explore a connection to your changeling roots, here are a few ideas. 

''Travelers ''

Nomadic changelings are often referred to as “travelers,” a name referencing both to their wandering lifestyle as well as the Traveler of the Dark Six—who, legend holds, gave them the ability to change their form, and whose chaotic nature is echoed in the lives of many travelers today. 

The oldest traveler tradition is that of the Children of Jes. Inspired by the Traveler, the Children follow migratory patterns that slowly evolve, keeping them from becoming too predictable to outsiders. Many travel in small groups—a troupe of entertainers, a merchant convoy, a stagecoach of exotic travelers. Others prefer to travel alone. Regardless, they believe in the importance of change, taking on many personas during their wanderings. Tinker, bard, courier, and priest are common roles, and the changeling might well be quite talented at their trade. Traveler priests can preach a sermon to the Host in the morning and lead Flamesong in the evening. As they conceal their true changeling nature, Children are usually invisible to the people around them; they use a secret language of tattoos and scars to identify one another, along with a set of shared personas. 

Few people in the Five Nations understand the culture and values held by changeling travelers. Some are unnerved by the concept of a hidden culture, that a stranger might not be the human or hobgoblin they appear to be. Others assume that because changelings have the uncanny ability to change their faces at will, that they will use it for malevolent ends, cheating honest folk before moving on. Changeling traditions predate Galifar and its laws, and indeed, some deem it fair to “obtain” another’s possessions as long as they’re replaced with a gift of equal value. And a few travelers assert the Traveler’s blessing is their license to prey on the “single-skins”—a term for races lacking the changeling gift for shapeshifting. However, travelers are no more innately dishonest than any other people—whether dragonmarked heir or Gatekeeper druid—though those that respect local customs are still subject to much suspicion due to their shapeshifting abilities and nomadic preferences. 

As a player character, the changeling traveler background can allow you to be part of a secretive network of changelings spread across the nation. As a DM, you could present the Children as a stereotypical source of thieves and charlatans. But they could be more enigmatic— an unexpected ally that can appear almost anywhere.

''Stable Changelings''

Under the rule of Galifar, many changelings chose to emerge from the shadows and live in the open, and today they can be found in most major cities of the Five Nations. Changelings in stable communities—such as Dragoneyes in Sharn or the Blackleaf district of Wroat—rarely hide their true nature. This allows them to sell their services openly and to pursue careers that make use of their unique talents, as explored in the “Changeling Careers” sidebar. However, many still make use of shared personas, and outsiders can be confused by the changelings’ fluid relationship with identity. Settled changelings don’t face the same level of prejudice as travelers, but there are still many single-skins who believe no changeling can be trusted. 

In addition to changeling neighborhoods in the cities of the Five Nations, there are two unique changeling cultures. The Gray Tide principality of the Lhazaar Principalities is a nation of changelings with a strong mercantile tradition; some say that the Gray Tide engages in a great deal of piracy, using their shapeshifting gifts to shift the blame to other princes. In Droaam, changelings are said to have a stronghold in the city of Lost. However, no outsider knows the location of Lost, and it’s said that the city itself is alive, and can freely move and change its shape. Regardless, the changelings of Lost have been strong allies of the Daughters of Sora Kell, and changelings can be found serving Daask. 

As a player character, a stable background gives you a place to call home and allows you to be open about your true nature. As a DM, a changeling community can be an interesting backdrop for an adventure or an easy place to find changeling services. 

''Passers ''

While changelings are well represented in the major cities, there are many villages and towns where they’re treated with fear and suspicion. You might have been born into such a community, possibly never even knowing another changeling. As a passer, you’ve crafted a single identity that you consider to be your true face. You may live your entire life as a human warrior or an elf priest, engaging your shapeshifting abilities only as a last resort. 

If you grew up as a passer, how do you live today? Do you want to learn more about other changeling cultures, or do you deny any connection to other changelings? Do you acknowledge your changeling nature, or do you consider your passer identity to be your true self? Do you pretend that your changeling abilities come from another source—claiming that your nonmagical cap is a //hat of disguise// or pretending that you’re casting //disguise self// when you shapeshift? 

Passer can be an interesting choice for an urchin, outlander, or a changeling who’s lived through oppression and is only now coming to understand their true nature. With NPCs, passers can add an element of chaos—if a slain villain is revealed as a changeling, did they use a body double and escape, or was the villain always a passer? 

''Others ''

Changelings are as diverse as any other species, presenting many other cultures and paths you could explore. //Reality seekers// are settled changelings who prefer their natural form and avoid deception, instead searching for the ultimate truth. //Becomers// actively seek to live many lives in order to more fully understand the experiences of others. The Cabinet of Faces is a secret society devoted to the Traveler, and its members actively seek to challenge traditions and cause chaos. Do you have ties to any of these movements? 

---

!!!Personas 
For a changeling, an identity is like a set of clothes. Within a changeling community, a persona may serve the same role a badge of office or uniform would for a human. The local priest is Father Hes. The sheriff is Big Dol. The healer is Lela. Whoever takes on the job assumes that persona. There may be three different priests, but whoever is currently on duty assumes the identity of Hes. In part, this is visual, but it’s also about adopting a personality—not just looking like Father Hes, but //becoming //Father Hes, giving the people a sense of continuity. 

This is especially important for the traveling clans. Travelers use well-established personas as anchors in potentially hostile communities. A trusted merchant, a beloved storyteller, or a reliable mercenary—any traveler can use one of these established personas to ensure a warm welcome. Of course, when using an established persona, it’s up to you to preserve its reputation. If you’re exposed as a changeling or if you ruin the reputation of the persona, you’re destroying a valuable tool. 

Many changelings develop their own unique personas. If you’re a fighter with proficiency in the violin, you might use a grim half-orc form in combat and an elegant elf when you play the violin. You’re not //required //to use a persona—the violinist could fight in their elf form—but the persona can serve as a way to focus on that particular skill. The Focused Personas feat in chapter 6 provides a concrete reflection of this. 

---

!!!Changeling Careers 
People often think of the shapeshifting talents of the changeling as a tool for deception. But in places where changelings live openly, including Droaam and the major cities of the Five Nations, there are many practical uses for shapeshifting. Changelings have long dominated the industry of paid companionship, using their talents to fulfill fantasies. While this can be sexual, there are many other changeling companions who specialize in giving a client the opportunity to have a meal or conversation with a distant loved one, or to practice a difficult conversation with a changeling stand-in. Many artists use changelings as versatile models. Changelings can also often be found as beauticians; in addition to possessing a deep understanding of the shifting nature of appearance, a changeling can use their own form as a palette on which to perfect the look a client is aiming for. 

Impersonation is also a viable career. Do you need to be in two places at once? Do you want a local celebrity to appear at your child’s birthday party? Hire a changeling impersonator. The Defender’s Guild of House Deneith has recently begun training and licensing elite changeling bodyguards, capable of serving as body doubles or posing as harmless bystanders until needed. 

Many changelings pursue a career in entertainment. After all, a changeling with the proper //shiftweave// outfit can play five roles! However, House Thuranni and House Phiarlan have been accused of denying opportunities to changelings. In licensed Phiarlan companies, changelings are typically relegated to serving as understudies and stunt doubles for dragonmarked superstars. 


---

!!!Casual Shapechanging 
As a changeling, consider that your ability to shapechange is a natural reflex for you. It doesn’t have to be used for impersonation or deception. You can change your hair color or style on a whim, shift your eye color to suit your mood, even create artistic patterns on your skin. When you make a face to express an emotion, it can be any face. Are you making a rude gesture? Well, what sort of hand do you want to use to do it? Shapeshifting gives you many creative opportunities; don’t be afraid to use them! 

---

!!!Changeling Concepts 
You could create a character of any class and background who just happens to be a changeling—or you can create a character whose concept is integrally tied to your identity as a changeling. However, you can have an equally interesting story with a character of any background or class, instead adjusting the “fluff”—the cosmetic details or backstory of a class—to fit an idea. While the following ideas don’t require any modification to the mechanical rules of a class, it’s always a good idea to discuss any exotic concept with your DM to make sure it fits the campaign. 

---

!!!The Aberrant Sorcerer 
An aberrant dragonmark grants dangerous power. What if you found a way to use your natural powers to transform your mark—and in so doing, to change the powers it grants you? The Wild Magic sorcerous origin could reflect the idea that you’re not entirely in control of your abilities, still learning what you can do and how to control it. Acquiring new spells might reflect your ability to reshape your mark into new configurations. 

Such an ability would be unprecedented—dragonmarks resist any effort at modification or replication. If you can alter your aberrant mark’s form, could you one day replicate the powers of a true mark? Does this gift mean that you have a special role to play in the Draconic Prophecy, or could your powers be part of an experiment tied to the daelkyr or a group of rogue dragons? If you take the hermit background, this could be the foundation of your Discovery feature. Whatever the truth, you’ll surely be of interest to the dragonmarked houses and House Tarkanan. 

---

!!!The Changeling Changeling 
In many places, it’s possible to pass between Eberron and Thelanis, and countless stories are told of children stolen away by the fey. As a child, perhaps you wandered through such a portal, finding yourself in the Faerie Court. After a decade in Thelanis, you’ve returned as an agent of one of the mighty archfey . . . a changeling changeling. 

This is a logical path for a warlock with an Archfey patron, and could also work with a bard (likely following the College of Glamour). Your powers reflect both the gifts of your patron and tricks you learned growing up in Thelanis. The archfey isn’t just your patron, they’re your surrogate family. Have you returned with a specific mission to fulfill? Or are you just reacclimatizing to the world and waiting for your purpose to be revealed? 

As a changeling changeling, you’re an outsider, used to living in a world of fairytale logic and still learning how the world works. The outlander background is one option, reflecting a childhood spent roaming the trackless forests of Thelanis. The hermit background is another logical choice; your Discovery could be a revelation shared with you by your patron. Another path would be to say that you returned to the Material Plane some time ago— perhaps you’ve earned a reputation as an entertainer by playing the music of the Feywild, or become a folk hero using your fey magic. 

---

!!!The Fraud 
You’ve taken the noble background. You’re the proud scion of a noble family . . . except you’re not. You’re a changeling body double hired by a young noble to take their place, and they never returned to take it back. It’s not a bad life, you take your responsibilities seriously, and you’re //good //at it—far better than the person you replaced. But you’re not who you appear to be. How does this impact your career as an adventurer? Did you know your fellow adventurers before you became a noble fraud? Do you have an entirely separate persona you use while adventuring, or are you adventuring in the guise of the noble? 

While the noble is a sound choice for this story, many other backgrounds could work as well. You were the understudy for a famous entertainer who died in a mysterious accident; now you’re sought By Popular Demand, but your fame is based on someone else’s face and talent. Or you could be a spy’s contact now forced to complete their mission. Any class could work with this story—regardless, you’ve taken on someone else’s identity and this comes both with benefits and grave responsibilities. 

---

!!!The Menagerie 
As a changeling, you can assume the shape of any humanoid. What if you discovered that this was just a fraction of what you were capable of—that you could assume animal forms as well? As a Circle of the Moon druid, you could assert that your spells and shapechanging powers don’t reflect a bond to nature, but rather an evolution of your natural abilities. Spells such as longstrider, darkvision, and barkskin could all be explained as evolved shapeshifting, while charm person or hold person could reflect psychic talents. 

If you want to play up this idea of having druidic powers with no ties to druidic traditions, you could talk to your DM about replacing the Druidic language feature. If you take the criminal background, the DM might allow you to replace it with thieves’ cant; another option would be skin cant, described in the changeling traveler background. If neither of these fit, you could likely exchange it for another uncommon language. 

Like the aberrant sorcerer, a changeling menagerie possesses an unusual talent. As you gain levels, you’re unlocking more gifts. Are you intrigued by this mystery and what you could become? Or is your shapeshifting simply a useful tool for you? 

---

!!!The Pantheist 
The wandering priest is an easy role for the changeling traveler; pick a faith you know will receive a warm welcome in your town, preach a sermon for your supper, and move on in the morning. If you started on this path, you could have a shiftweave garment with vestments for the Host, the Flame, and the Blood of Vol, all ready to go. But while you may have started as a charlatan, something odd happened—you found faith. You trust that the Sovereigns are watching over you; you believe that that the Silver Flame strengthens champions of the light; when you adopt an elf form, you even feel a surge of devotion for the Undying Court. When you adopt the trappings of a faith, you feel a connection to it. You’ve had visions tied to every faith, and the magic flows through you. As far as you’re concerned, all the faiths are real; it’s just about picking the right faith for the job. 

The simplest way to approach this concept is to pick a fairly general domain—such as Life—and to make your transformations largely cosmetic, a foundation for roleplaying. When you expect to be going into battle, shift your trappings to Dol Dorn. Fighting lycanthropes? Turn to the Silver Flame. About to speak to the dead? Time to call on the Blood of Vol. In taking on all these faiths, you are deeply empathetic, you accept all beliefs as valid, and you seek to help people of different faiths understand one another. Another possibility, if your DM likes the idea, is that you can receive divine visions based on the faith you’re currently embodying. Adopting Onatar’s trappings won’t give you the mechanical benefits of the Forge domain, but you may receive a vision from the Sovereign. Again, this is purely a story idea—and it’s always possible that your divine visions are just deep-rooted delusions! 

---

!!!Changeling names 
A changeling might use a different name for each mask and persona and adopt new names as easily as they change faces. The true name of a changeling tends to be simple and monosyllabic; however, there are often accents to a changeling's name that are expressed through shapeshifting, something single-skins will likely miss. So, two changelings might have the name //Jin//, but one is //Jin-with-vivid-blue-eyes// and one is //Jin-with-golden-nails//. 

Changelings have a fluid relationship with gender, see­ing it as one characteristic to change among many. 

''Changeling Names:'' Aunn, Bin, Cas, Dox, Fie, Hars, Jin, Lam, Mas, Nix, Ot, Paik, Ruz, Sim, Toox, Vil, Yug 
[img [https://i.imgur.com/lYaBvye.png]]
Широкая распространённость людей и их способность давать потомство от представителей других гуманоидных рас породили множество гибридов-полулюдей. Ниже описаны самые распространённые из них.

<<tabs "[tag[Полулюди]]" "Полудварфы" "$:/state/tab1">>
<<<
Реджис, единственный полурослик на протяжении сотен миль, в какую сторону ни посмотри, сцепил ладони за головой и откинулся на густо заросший мхом ствол дерева. Реджис был чрезвычайно мал ростом даже по меркам собственного весьма миниатюрного народца. Верхние кончики волос его торчавшей во все стороны буйной гривы едва достигали трёх футов, однако живот Реджиса ясно свидетельствовал о том, что его обладатель любит съесть хороший обед, а то и несколько, смотря по обстоятельствам. Длинная кривая палка, служившая Реджису удилищем, приподнялась, чуть дрогнула, пристроилась поудобнее между мохнатыми пальцами полурослика и повисла над спокойными водами, безупречно отражаясь в зеркальной поверхности озера. 

— Р. А. Сальваторе, //Магический кристалл //
<<<

Целью большинства полуросликов является домашний уют. Место, где можно поселиться в покое и тишине, подальше от мародёрствующих чудовищ и сражающихся армий. Огонь очага, сытная пища, добрая выпивка и добрая беседа. Хотя некоторые полурослики проживают свой век в удалённых сельских общинах, другие сбиваются в постоянно кочующие общины, влекомые открытыми дорогами, широкими горизонтами и возможностью открыть чудеса новых мест и новых людей. Но даже такие кочевники любят покой, вкусную еду, свой очаг и свой дом, даже если это повозка, трясущаяся по пыльной дороге или плот, плывущий по течению реки.

---

!!!Маленькие и практичные
Крошечные полурослики выживают в мире, полном более крупных существ, стараясь избегать внимания, а если это оказывается невозможным, то избегая враждебности. Имея рост около 90 см, они кажутся относительно безвредными, и благодаря этому успешно существуют столетиями, оставаясь в тени империй, войн и политической борьбы. Они склонны к полноте, и весят около 20 кг.

Кожа у полуросликов встречается от смуглой до бледной, с румянцем. Волосы обычно коричневые или рыже-коричневые, вьющиеся. Глаза полуросликов карие или ореховые. Мужчины часто отпускают длинные бакенбарды, но бороды носят редко, а усы тем более. Они любят носить простую, удобную одежду, предпочитая яркие цвета.

Практичность полуросликов распространяется не только на их одежду. Они довольствуются удовлетворением основных потребностей и простых радостей, уделяя совсем мало внимания роскоши. Даже богатейшие из них предпочитают хранить своё добро в закрытых сундуках и подвалах, а не выставлять его на всеобщее обозрение. Полурослики умеют находить простые решения своих проблем, и являются весьма решительными.

---

!!!Добрые и любопытные
Полурослики — приветливый и дружелюбный народ. Они ценят дружбу и родственные связи так же как собственный дом и очаг, лишь в тайне мечтая о золоте и славе. И даже те из них, кто стали искателями приключений, обычно отправляются в путь, преследуя цели дружбы или общества, тяги к переменам или любопытства. Они любят открывать для себя что-то новое, даже если это совсем простые вещи, вроде экзотической еды или незнакомого стиля одежды.

Полурослики легко поддаются жалости, и не выносят вида чужих страданий. Они щедры, и с радостью делятся тем, что имеют, даже в трудные времена.

---

!!!Единые с толпой
Полурослики легко вливаются в сообщества людей, дварфов или эльфов, где их ценят и всегда им рады. Сочетание их врождённых скрытности и скромности позволяют им легко избегать ненужного внимания. 

Полурослики охотно работают с другими, и они верны своим друзьям, вне зависимости от их вида. Однако, если кто-то из их друзей, семьи или общины оказывается под угрозой, они способны проявить удивительную свирепость.

---

!!!Пасторальные удовольствия
Большинство полуросликов живёт в маленьких, мирных общинах с большими фермами, среди ухоженных рощ. Они редко создают собственные королевства, и не держат земель за пределами своих тихих владений. Они обычно не признают среди себя какого-либо рода знати или королевской власти, вместо этого прислушиваясь к семейным старейшинам, руководствуясь их мнением. Семьи сохраняют свой традиционный уклад, несмотря на подъёмы и падения империй.

Множество полуросликов живёт среди других рас, где усердная работа и надёжные перспективы принесут им обильное вознаграждение и земные блага. Некоторые общины полуросликов ведут кочевой образ жизни, путешествуя на повозках или плавая на суднах от одного места к другому, не оседая на одном месте постоянно.

---

!!!Поиск возможностей
Полурослики обычно становятся на путь искателя приключений, чтобы защитить свои общины или поддержать своих друзей или исследовать огромный наполненный чудесами мир. Для них авантюризм в меньшей степени карьера, скорее это возможность, а иногда и необходимость.

---

!!!Имена полуросликов
Полурослику даётся имя, фамилия, и, возможно, прозвище. Фамилии часто являются прозвищами, которые прилипли так сильно, что стали передаваться через поколения.

''Мужские имена:'' Альтон, Андер, Гаррет, Кейд, Коррин, Лайл, Линдал, Майло, Меррик, Осборн, Перрин, Рид, Роско, Уэллби, Финнан, Элдон, Эррих

''Женские имена:'' Бри, Вани, Верна, Джиллиан, Китри, Кора, Кэлли, Лавиния, Лидда, Мерла, Недда, Паэла, Портия, Серафина, Трим, Шаэна, Эндри, Юфемия

''Фамилии:'' Вверхтормашкин, Высокохолм, Галькоброс, Добробочка, Зеленофляг, Кустосбор, Лугодуг, Подветкин, Репейник, Чайнолист

---

!!!Больше о полуросликах
Том Морденкайнена о врагах, Глава 5: Полурослики и Гномы, с. 99
[img [https://i.imgur.com/lYaBvye.png]]
<<<
Однажды у нас проездом останавливалась табакси, несколько зим назад. Она каждый вечер собирала полный зал желающих послушать ее истории и провела большинство дней, дремля на стуле перед камином. Мы думали, что она очень ленивая, но когда Лайнин пришла, ища пропавшее шило, она вылетела из двери так, что я и глазом моргнуть не успел. 

– Тоблен Стоунхилл, трактирщик 
<<<


Родом из странных и далёких земель, странствующие табакси – кошкоподобные гуманоиды, которых любопытство заставляет собирать интересные артефакты, записывать рассказы и истории, и осматривать все чудеса в мире. Отъявленные путешественники, любознательные табакси редко на долго оседают на одном месте. Их врожденный характер толкает их раскрывать тайны и находить потерянные сокровища и легенды. 

---

!!!Cтранствующие бродяги 
Большинство табакси остается на своей далекой родине, живя маленькими, сплоченными кланами. Эти табакси охотятся, ремесленничают, и в значительной степени сами держатся в кругу себе подобных. 

Однако, не все табакси удовлетворены такой жизнью. Кошачий Бог, божество, создавшее табакси, одарил каждое свое дитя одной типично кошачей чертой. Табакси, одаренные любопытством, стремятся странствовать повсюду. Они собирают истории, артефакты и знания. Те, кто пережил этот период страсти к путешествиям, возвращаются домой в своих зрелых годах, чтобы поделиться новостями о внешнем мире. Таким образом табакси остаются изолированными, но всегда осведомленными о мире за пределами их дома.

---

!!!Обмен знаниями 
Табакси дорожат знаниями, а не материальными вещами. Сундук, заполненный золотыми монетами, может пригодится, чтобы купить еду или моток веревки, но он в сущности не интересен. В глазах табакси, накопление богатства похоже на сбор припасов для долгой поездки. Оно нужно, чтобы выжить в мире, но не ст ит из-за него волноваться. 

Вместо этого табакси ценят знания и новый опыт. Их уши навостряются в полной таверне, и они выспрашивают истории, предлагая еду, напитки и монеты. Табакси может уйти с пустым кошельком, но он обдумывает истории и слухи, которые он собрал, как скупердяй подсчитывает монеты. 

Хотя материальное богатство мало значит для табакси, у них есть жажда находить и осматривать древние реликвии, волшебные предметы и другие редкие объекты. Помимо сил, которые могут дать такие предметы, табакси испытывают большую радость от распутывания историй их создания и использования. 

---

!!!Мимолётные увлечения 
Странствующие табакси – существа непостоянные, обменивающие одну навязчивую идею или увлечение на другую по мимолетной прихоти. Желания табакси ярко вспыхивают, но в один момент исчезают, замещаемые новой навязчивой идеей. Цель захватывает их только пока в ней есть тайна. 

Табакси-плут может с удовольствием провести месяцы, составляя план кражи необычного драгоценного камня у дворянина, а потом обменять его на билет на корабль или жилье спустя неделю после кражи. Табакси может сделать обширные заметки или запомнить каждую грань драгоценного камня прежде чем отдать его, но драгоценный камень перестает очаровывать его как только его тайны и природа были раскрыты. 

---

!!!Торговцы и менестрели 
Любопытство движет большинством табакси, встреченных за пределами их родины, но не все они становятся приключенцами. Табакси, ищущие более безопасный путь для удовлетворения своих навязчивых идей, становятся странствующими торговцами и менестрелями. 

Эти табакси работают маленькими труппами, обычно состоящими из старшего, более опытного табакси, который ведет до четырех молодых, постигающих свое место в мире. Они путешествуют в маленьких, красочных фургонах, перемещающихся от поселения к поселению. Когда они прибывают, то устанавливают небольшую сцену на городской площади, где они поют, играют на инструментах, рассказывают истории и предлагают экзотические товары в обмен на предметы, которые разжигают их интерес. Табакси неохотно принимают золото, они больше предпочитают интересные предметы или знания в качестве оплаты. 

Эти странники придерживаются цивилизованных королевств, предпочитая торговать вместо того, чтобы следовать более опасными путями удовлетворения своего любопытства. Однако, они не брезгуют небольшим осторожным воровством, чтобы получить особенно интересный предмет, который владелец отказывается продать или обменять. 

---

!!!Имена табакси 
У каждого табакси есть одно имя, данное кланом и основанное на сложной формуле, которая включает в себя астрологию, прорицание, историю клана и другие эзотерические факторы. Имена табакси могут относиться как к мужчинам, так и к женщинам, большин- ство использует прозвища, получаемые из полных имен или вдохновленные ими. 

Названия клана обычно основаны на географической достопримечательности, расположенной на территории клана или около неё. 

В приведенных примерах имен табакси, прозвища указаны в круглых скобках. 

''Имена табакси:'' Леворукая Колибри (Птица), Нефритовый Башмак (Нефрит), Облако На Горной Вершине (Облако), Пять Брёвен (Бревно), Семь Грозовых туч (Гроза), Туманное Зеркало (Туман), Юбка Змеи (Змея)

''Кланы табакси:'' Горное Дерево, Грохочущая Река, Отдаленный Дождь, Храпящая Гора, Яркие Утесы 

---

!!!Индивидуальность табакси 
У табакси могут быть мотивы и причуды, очень отличающиеся от дварфа или эльфа с похожей предысторией. Вы можете использовать следующие таблицы, чтобы персонифицировать вашего персонажа в дополнение к чертам характера, идеалам, привязанностям и слабостям вашей предыстории. 

Для дополнительного веселья, кидайте кубик раз в несколько игровых дней, чтобы определить новый результат, что отражает изменение ваших интересов. 

''Навязчивые идеи табакси''

| !к8 |!Мое любопытство сейчас сосредоточено на... |
| 1 |Боге или планарном существе |
| 2 |Монстре |
| 3 |Потерянной цивилизации |
| 4 |Тайне волшебника |
| 5 |Обычном предмете |
| 6 |Магическом предмете |
| 7 |Месте |
| 8 |Легенде или рассказе |

''Причуды табакси''

| !к10 |!Причуда |
| 1 |Вы скучаете по своему тропическому дому и бесконечно жалуетесь на холодную погоду, даже летом. |
| 2 |Вы никогда не носите один наряд дважды без крайней необходимости. |
| 3 |У вас небольшая боязнь воды и вы ненавидите мокнуть. |
| 4 |Ваш хвост всегда выдает ваши сокровенные мысли. |
| 5 |Вы громко мурлычете когда счастливы. |
| 6 |Вы держите маленький шарик пряжи в руке, который постоянно теребите. |
| 7 |Вы всегда в долгах, так как тратите свое золото на шикарные вечеринки и подарки для друзей. |
| 8 |Говоря о чем-то, чем вы увлечены, вы начинаете говорить быстро и без пауз, так что другие не могут вас понять. |
| 9 |Вы записываете всякие пустяки, знания и истории, которые вы обнаружили. |
| 10 |Вы не можете не прикарманить заинтересовавший вас предмет. |
<<<
«Но ты же видишь, как люди смотрят на тебя, дитя дьявола». 

Взгляд чёрных глаз, холодных, как зимняя метель, был устремлён прямо в её душу. Её потрясла неожиданная серьёзность его тона. 

«Как там говорится? — спросил он. — Один — любопытство, двое — заговор...» 

«А трое — проклятье. — закончила она. — Думаешь, я никогда не слышала этот бред?» 

«Конечно, слышала». Когда она уставилась на него, он добавил: «Для этого не обязательно копаться в твоих мыслях, девочка. Это ноша каждого тифлинга. Некоторые ломаются под её тяжестью, некоторые спокойно несут это бремя, некоторые даже наслаждаются им». Он снова наклонил голову, разглядывая её с озорным блеском в глазах. «А ты с этим борешься, не так ли? Как дикая кошка, я бы сказал. Все упрёки и замечания лишь делают твои когти острее». 

— Эрин М. Эванс, //Серные ангелы //
<<<

Быть тифлингом — значит постоянно натыкаться на пристальные взгляды и перешёптывания, терпеть страдания и оскорбления, видеть страх и недоверие в глазах каждого встречного. Беда в том, что тифлинги знают причину этого — договор, заключённый много поколений назад и позволивший Асмодею — владыке Девяти Преисподних — внести вклад в их родословную. Такая внешность и природа — не их вина, а последствие древнего прегрешения, расплачиваться за которое предстоит им, их детям, и детям их детей.

---

!!!Дьявольская родословная
Тифлинги произошли от людей, и по большому счёту всё ещё выглядят как люди. Тем не менее, их дьявольское наследие оставило заметный отпечаток на внешности. У тифлингов есть большие рога, принимающие различные формы: у некоторых витые рога, как у барана, у других длинные и прямые, как у газели, у третьих спиральные, как у антилопы. Их толстый хвост, от 120 до 150 сантиметров длиной, вьётся между ног, похлёстывая их, когда тифлинг нервничает. Острые зубы превращают улыбку в звериный оскал, а их глаза сплошного цвета без намёка на зрачок или белок, обычно чёрного, красного, белого, серебряного или золотого цвета. Цвет кожи тифлингов может принимать все тона, характерные для человека, а также различные оттенки красного. Их волосы, струящиеся из-за рогов, обычно тёмные, от чёрного или коричневого до тёмно-красного, синего или фиолетового.

---

!!!Самодостаточные и недоверчивые
Тифлинги живут небольшими общинами, в основном в людских городах, чаще всего в самых трущобах, где из них вырастают жулики, воры и короли преступного мира. Иногда они живут группами среди других меньшинств, которые относятся к ним с чуть большим уважением.

У тифлингов нет родины, и они знают, что им нужно найти свой путь в жизни, и что им понадобится сила для выживания. Они с опаской относятся ко всем, кто называется их другом, но когда кто-то проявляет доверие по отношению к ним, они стремятся отплатить той же монетой. Для того, кто заслужит верность тифлинга, он станет верным другом и надёжным союзником до конца своей жизни.

---

!!!Имена тифлингов
Имена тифлингов можно разделить на три категории. Тифлинги, выросшие в какой-либо другой культуре, часто носят имена, характерные для этой среды. Некоторые носят имена, передающиеся из поколения в поколение и произошедшие из Инфернального языка. А некоторые молодые тифлинги, стремящиеся найти своё место в этом мире, берут имена, отражающие какую-либо добродетель или другую концепцию, а затем стараются воплотить её в жизнь. Для некоторых выбранное имя становится путеводной звездой, для другим — тяжким грузом.

''Мужские инфернальные имена:'' Акменос, Амнон, Баракас, Дамакос, Йадос, Кайрон, Люцис, Мелех, Мордай, Мортос, Пелайос, Скамос, Терай, Экемон

''Женские инфернальные имена:'' Акта, Анакис, Брисеис, Дамая, Каллиста, Криелла, Лерисса, Макария, Немея, Орианна, Риета, Фелая, Эа

''«Идейные» имена:'' Безрассудство, Вера, Идеал, Искусство, Музыка, Мука, Надежда, Напев, Нигде, Открытость, Отчаяние, Падаль, Поиск, Почтение, Поэзия, Превосходство, Скорбь, Слава, Случайность, Страх, Усталость
<<<
//Я рыбу большую поймал.// 

//Хорошего друга ищу теперь,// 

//Трапезу чтоб разделить.//

 — тортлское хайку 
<<<


То, что многие тортлы считают просто жизнью, другие могут назвать жизнью полной приключений. Тортлы рождаются вблизи песчаных пляжей, но как только они учатся ходить на двух ногах, они становятся кочующими приспособленцами, жаждущими исследовать дикую местность, пережить множество чудес, проверить собственные навыки в деле, и завести новых знакомых. 

---

!!!Жизнь тортла 
Тортл вылупляется из толстой скорлупы яйца и первые несколько недель ползает на четвереньках. Его родители, старые, на пороге смерти, проводят то немногое время, что у них осталось, рассказывая истории своим отпрыскам. В течении года, молодой тортл становится сиротой, но не ранее чем начнет говорить и сможет позаботиться о себе. 

Молодой тортл и его братья и сестры наследуют все инструменты, оружие и подарки, оставленные их родителями. Ожидается, что каждый молодой тортл позаботится о себе. Он покидает место своего рождения и находит свой уголок в глуши, где охотится, ловит рыбу и обитает. С каждым годом тортл оттачивает свои навыки. Он заключает дружбу с соседями также уважая их уединение. В какой-то момент, тортл чувствует почти несдерживаемое желание уйти из дома и путешествовать в дальние страны и увидеть мир. Он собирает все свои вещи и отправляется в странствие, возвращаясь месяцы или годы спустя с историями о своих приключениях и новыми навыками. 

Когда тортл чувствует надвигающуюся смерть он находит себе пару и продолжает свой род. Тортлы откладывают яйца (количеством от одного до дюжины) в крепком обиталище, обложенной каменными стенами которую легко охранять. Если такой кладки нет, они строят ее. Родители посвящают остаток жизни охране кладки, защищая отпрысков, и посвящая время передаче знаний прежде чем умереть. Когда дети становятся достаточно взрослыми чтобы покинуть кладку они возьмут оружие и инструменты, оставшиеся от родителей и останутся сами по себе. 

---

!!!Убеждения 
У тортлов нет своего пантеона богов, но они зачастую поклоняются богам других рас. Это не редкость для тортла слышать истории или легенды, связанные с богом и решить поклоняться этому божеству. В Забытых Королевствах, тортлы особенно привержены Эльдат, Гонда, Латандеру, Саврасу, Селунэ и Тиморе. 

В Грейхоке, они склоняются к Селестиан, Фарлангуну, Пелору, Фолтусу и Св. Кутберту. Тортлы зачастую избирают Богов Добра в Саге о Копье и Верховных Владык в Эберроне. Среди нечеловеческих божеств, Морадин и Йондала больше всего относятся к тортлам. 

Тортлы верят, что ночь и день следят за ними и остальными существами. Луна – это глаз ночи что следит за ними в темноте, и солнце такой же неусыпный глаз дня. Тортлы чувствуют умиротворение тогда, когда один или оба этих глаза взирают на него. Они начинают нервничать и переживать, когда ни одного шара не видно в небе. Тортлам больше всего некомфортно под землей, где ни солнце, ни луна не видны им. 

Блаженны дни, когда оба светила видны на небе в одно время. Зачастую тотрлы выбирают такие дни чтобы отправится в путешествие по диким землям, или совершить иное опасное деяние. 

---

!!!Искатели приключений в сердце 
У тортлов есть поговорка: «Мы носим дома на спине.» Панцирь, который они носят, обеспечивает все необходимое им убежище. Вследствие чего, тортлы не чувствуют нужды оставаться в одном месте надолго. 

Поселения тортлов в основном используются как собрание, где тортлы общаются друг с другом, делятся полезной информацией, и торгуют с путниками в безопасной численности. Тортлы не рассматривают эти поселения как места, достойные чтобы защищать их ценой своей жизни, и они покинут поселение, как только нужда в нем отпадет. 

Большинству тортлов нравится наблюдать как живут другие существа и открывать новые обычаи и способы делать вещи. Желание размножаться не посещает тортла до самой старости, и тортл может проводить десятилетия вдали от родной земли, не чувствуя тоски по дому. 

Тортлы принимают простые взгляды на мир. Это чудесное место, и тортлы созерцают его красоту в обыденном. Они живут ради шанса услышать мягкий порыв ветра меж пальмовых листьев, увидеть лягушку, квакающую на листе лилии в пруду, или постоять на переполненном человеческом рынке. 

Тортлы любят изучать новые навыки. Они изготавливают собственные инструменты и оружие, и они хороши в строительстве и укреплениях. Они восхищаются произведениями других цивилизованных существ, в частности людей, и могут потеряться на многие годы в городе, изучая его архитектурные чудеса и обучаясь навыкам, которые они могут использовать, когда будут строить форты, чтобы содержать их потомство. 

Хотя они проводят значительную часть своей жизни в изоляции, тортлы – социальные существа, которые любят формировать значимые дружеские отношения. Они не имеют врожденной неприязни к представителям других рас. На самом деле, тортлы часто ищут дружбу с не-тортлами, чтобы узнать новые обычаи и новые точки зрения.

---

!!!Имена тортлов 
Тортлы предпочитают простые, гендерно-нейтральные имена состоящие не более чем из двух слогов. Если тортлу по какой-либо причине не нравится его имя он может сменить его. Тортл может сменить десяток имен за свою жизнь. У тортлов нет фамилий или семейных имен. 

''Мужские и женские имена:'' Бака, Вабу, Гар, Гура, Даму, Зопа, Ини, Йог, Кве, Квег, Квотт, Келбук, Кинлек, Крулл, Лим, Лоп, Нортл, Нулка, Оло, Плокват, Санни, Тибор, Убо, Уок, Яппа
<<<
Ах, тритоны. представьте себе эльфов, которые несколько столетий прожили глубоко на дне моря, где ничто не мешало расти их высокомерию и самомнению. Но по крайней мере, тритоны провели это время, сражаясь с сахуагинами и с кем похуже, так что на них можно положиться в бою. 

– Брего Стоунхарт, капитан корабля 
<<<


Тритоны охраняют океанские глубины, строя маленькие поселения около глубоководных впадин, порталов в стихийные планы и других опасных мест, далеких от глаз народов суши. Признанные защитники океанских глубин, в последние годы благородные тритоны стали все более и более активными в мире на поверхности. 

---

!!!Водные крестоносцы 
Столетия назад, тритоны пришли в мир в ответ на растущую угрозу стихийного зла. Тритоны вели много войн против своих врагов в Плане Воды, гоня их в Затемнённые Глубины, куда они сбегали в высокое давление и кромешную тьму. Со временем, тритоны заметили, что их древние стихийные противники затихли. Экспедиции в глубины показали, что кракены, сахуагины и намного более худшие враги сбежали с Плана Воды на Материальный План. 

Тритоны, ведомые чувством долга и ответственности, не позволили своим противникам убежать так легко. Великий конклав тритонов собрал добровольцев, владеющих оружием и магией, в экспедиционный корпус, чтобы они пришли в Материальный План и нашли своих врагов. 

Эти тритоны распространились по океанам и основали протектораты, следящие за глубокими впадинами, порталами, подводными пещерами, и другими местами, где могут скрываться их враги. Они победили своих противников, которых нашли, а остальных заставили попрятаться, и теперь очень гордятся тем, в каком долгу у них все оказались. 

Изгнав врагов в самые темные глубины моря, тритоны осели, следя за малейшими знаками их возвращения. Со временем тритоны расширили свое наблюдение за морским дном за пределы окрестностей своих первоначальных поселений и построили аванпосты для торговли с другими расами. Несмотря на это распространение, о них знают немногие. Их поселения так отдалены, что даже мерфолки и морские эльфы редко встречают их. 

---

!!!Надменная знать 
Как результат своей изоляции и недопонимания Материального Плана, тритоны производят впечатление надменных и высокомерных. Они рассматривают себя как хранители морей, и ждут, что другие существа будут относится к ним если не с глубоким почтением, то хотя бы с уважением. 

Хотя подобное отношение и возмущает других, но в нем есть доля истины. Мало кто знает о великих победах тритонов над ужасными подводными угрозами. Тритоны снисходительны к такому невежеству и с радостью поясняют на сколько все перед ними в неоплатном долгу. 

У тритонов также есть обыкновение появляться из своей изоляции с мыслью, что другие народы их поприветствуют как уважаемых союзников и наставников. Это опять же вызвано расстояниями. Ограниченное знание тритонов о мире оставляет их в неведении о королевствах, войнах и прочих трудностях мира на поверхности. Тритоны с готовностью рассматривают все это как мелочи, происходящие всего лишь на заднем плане по сравнению с ролью тритонов, как защитников мира. 

---

!!!Непоколебимые борцы 
Несмотря на свои отталкивающие манеры, в глубине души тритоны – доброжелательные существа, убежденные, что другие цивилизованные расы заслуживают их защиты. Их отношение может злить, но когда пиратские флоты рыскают по волнам, или пробуждается кракен, они одни из первых берутся за оружие, чтобы защитить других. 

Тритоны с готовностью жертвуют собой ради общего блага. Они без сомнений будут сражаться и умирать за людей, мерфолков и других существ. Из–за своей замкнутости они не замечают историю других народов, но их терзает чувство вины за то, что они позволили злу из Плана Воды прийти на Материальный План и угрожать его жителям. Тритоны полагают, что это их долг чести, и они будут сражаться и умирать, чтобы оплатить его. 

Время от времени их рвение и незнание мира вводят их в заблуждение. Тритоны, впервые сталкиваясь с другими существами, могут их недооценить, что делает тритонов уязвимыми для обмана. Имея сильные военные традиции, тритоны могут иногда слишком поспешно ввязываться в схватку. 

---

!!!Чужаки на поверхности 
Учитывая их изоляцию, большинство тритонов никогда не было на поверхности. Для них трудна мысль, что они не могут так же легко двигаться вверх и вниз, как в воде, а смена сезонов сбивает их с толку. 

Тритоны также считают разнообразные социальные институты, королевства и прочие обычаи изумительными. Несмотря на всю свою гордую культуру, они становятся наивными в сухопутном мире. Типичный протекторат тритонов прочно систематизирован, организован и объединен вокруг общего дела. Тритона на поверхности легко сбивают с толку множество союзов, противостояний и мелких обид, которые мешают поверхностным народам объединиться. 

В худшем случае высокомерие может мешать тритонам пытаться понять, каким образом устроен мир поверхности. Для тритона легко списать непонятные социальные нормы на варварство, слабость, или трусость поверхностных народов. 

---

!!!Индивидуальность тритонов 
Далекие от безупречности, эти заступники добра желают его окружающим, но другие их легко разочаровывают. Вы можете выбрать самостоятельно, определить броском кубика или переделать причуду из таблицы ниже. Используйте причуду как идею относительно того, как вы будете изображать своего персонажа. 

| !к6 |!Причуда |
| 1 |Вы формулируете просьбы как приказы, которым вы ожидаете, что другие будут подчиняться. |
| 2 |Вы энергично восхваляете величие вашей цивилизации. |
| 3 |Вы изучали древний вариант Общего, и используете в вашей речи «Азъ», «есьм», «доколе» и т.д. |
| 4 |Вы предполагаете, что люди говорят вам правду о местных нравах и обычаях. |
| 5 |Поверхностный мир – поразительное место, и вы записываете все его детали в журнале. |
| 6 |Вы ошибочно полагаете, что народы поверхности знают историю вашего народа и преклоняются перед нею. |

---

!!!Имена тритонов 
Имена тритонов обычно состоят из двух или трёх слогов. Мужские имена как правило заканчиваются гласным и буквой –с, а женские имена традиционно заканчиваются на –н. Тритоны используют свой домашний протекторат в качестве фамилии, добавляя гласную вместе с «–т» на конце названия протектората. 

''Мужские имена тритонов:'' Водос, Делнис, Джимас, Зунис, Керос, Корус, Молос, Налос

''Женские имена тритонов:'' Белтин, Влэрин, Вуолин, Дьютин, Отанин, Филорин, Шелрин, Эрин

''Фамилии тритонов:'' Алорсат, Вууваксат, Пуманат.
<<<
Мы провели три месяца, выслеживая зеленого дракона прежде, чем определили лес, в котором он устроил убежище. В наш второй день в лесу, проснувшись, мы обнаружили в центре нашего лагеря голову дракона. Совелисс сказал мне, что, должно быть, этот лес принадлежит фирболгам, и они хотят показать, что нам здесь делать больше нечего. Он уверил меня, что, если мы задержимся, наши головы могут быть следующими. 

– Гимбл, //Заметки Охотника за Сокровищами// 
<<<


Племена фирболгов, уединившиеся в отдаленных лесных крепостях, предпочитают проводить свои дни в безмолвной гармонии с лесом. Будучи спровоцированными, фирболги демонстрируют грозные навыки владения оружием и магией друидов. 

---

!!!Скромные стражи 
Ничего фирболги не любят больше, чем спокойный день, проведенный в окружении деревьев в старом лесу. Они рассматривают леса как священные места, символизирующие душу мира, и памятники стойкости живого. 

Будучи хранителями природы, фирболги живут за счет земли, стремясь соблюдать природный баланс. Их методы отражают бережливость и замечательную изобретательность в использовании природных ресурсов. На протяжении урожайного лета они откладывают лишние орехи, фрукты и ягоды. Когда наступает зима, они разбрасывают всё, что запасли, чтобы гарантировать, что лесные животные доживут до весны. 

На взгляд фирболга, нет ничего хуже, чем жадность. Фирболги полагают, что мир остается здоровым только когда каждое существо берет только то, в чем нуждается. Материальные блага, особенно драгоценные камни и золото, мало для них значат. Какой от них толк, когда долгой зимой кончилась еда? 

---

!!!Прирожденные друиды 
У фирболгов есть склонность к магии друидов. Почтительность их культуры к природе, объединенная с их силой и проницательным умом, делает инстинктивное постижение этой магии частью их развития. Почти каждый фирболг знает несколько заклинаний, в основном для маскировки своего присутствие, и многие продолжают постигать природную магию. 

Фирболги, которые становятся друидами, служат лидерами крепости. Перед тем как племя предпримет какое-либо действие, друиды взвешивают нужды своего племени и последствия, который это действие будет иметь для лес и остальной части мира природы. Племена фирболгов лучше будут голодать, чем перетруждать землю во время недорода. 

---

!!!Незримые наблюдатели 
Будучи хранителями природы, фирболги предпочитают не попадаться на глаза и не привлекать внимание. Они не пытаются подчинить себе природу, а скорее стремятся гарантировать ей процветание и выживание согласно её собственным законам. 

Фирболги используют свою магию, чтобы сохранить свое присутствие в лесу в тайне. Такой подход позволяет им избегать политики и противоборства между эльфами, людьми и орками. Подобные события заботят фирболгов только когда они затрагивают лес. 

Даже при угрозе вторжения, фирболги предпочитают воздействовать тихо и незаметно, предотвращая ущерб своим землям. Они используют свое волшебство, чтобы сделать лес непривлекательным для изучения, на время отводя ручьи, прогоняя дичь, крадя важные инструменты, и изменяя тропы, чтобы отряды охотников или лесорубов безнадежно заблудились. О присутствии фирболгов можно догадаться из-за отсутствия животных и странной тишины, как будто лес хочет избежать излишнего внимания. Чем быстрее путешественники решат идти дальше, тем лучше. 

Если эта тактика проваливается, фирболги действуют более прямолинейно. Наблюдая за поселением, они решают, что делать дальше. Если чужаки выглядят миролюбиво, фирболги приходят к ним и вежливо просят их уйти, даже предлагая еду и другие припасы, чтобы поспособствовать их скорейшему отъезду. 

Если они настаивают на том, чтобы остаться, уважая природу и беря только то, в чем нуждаются, и живя в гармонии с лесом, фирболги рассмотрят возможность подружиться с ними, если чужаки пообещают не вредить лесу. Если поселенцы явно демонстрируют недобрые намерения, фирболги прибегнут к грубой силе и магии для единственной сокрушающей атаки. 

---

!!!Изгнанные искатели приключений 
Будучи хранителями леса, очень немногие фирболги помышляют о том, чтобы покинуть свой дом или попробовать влиться в человеческое общество. Но у изгнанного фирболга, или у того, чей клан уничтожен, нет выбора. Большинство фирболгов – искателей приключений попадают в эту категорию. 

Изгнанные фирболги никогда не смогут вернуться домой. Они совершили что–то непростительное, как правило что–то, что поставило под угрозу их родину, например, устроили лесной пожар или убили редкое, или красивое дикое животное. Эти фирболги – одиночки, которые блуждают по миру в надежде найти новое место, которое смогут назвать домом. 

Осиротевшие фирболги это те, чей кланы или родина были уничтожены. Они становятся крестоносцами природы – стремятся отомстить за свою потерю и предотвратить дальнейшее уничтожение мира природы. 

Изредка бывает, что клан поручает фирболгу важную миссию за пределами их дома. Эти фирболги чувствуют себя странниками в чужой стране, и обычно они хотят как можно быстрее закончить свою миссию и вернуться домой. 

Таблица ниже может служить вдохновением для того, чтобы определить, почему персонаж фирболг покинул дом. 

| !к8 |!Причина отправиться в приключения |
| 1 |Изгнан за убийство |
| 2 |Изгнан за серьезное разрушение домашней территории |
| 3 |Клан уничтожен вторгшимися гуманоидами |
| 4 |Клан уничтожен драконом или демоном |
| 5 |Отделился от племени и потерялся |
| 6 |Родина уничтожена стихийным бедствием |
| 7 |Личное задание, полученное как предзнаменование |
| 8 |Отправлен на задание лидерами племени |

---

!!!Имена фирболгов 
Фирболги берут себе эльфийские имена, когда имеют дело с чужаками, хотя сама идея имен кажется им странной. Они знают животных и растения леса без формальных названий, а вместо этого узнают детей леса по их делам, привычкам, и другим действиям. 

Таким же образом, говоря о своем племени, они просто называют его домом. Имея дело с другими расами, фирболги называют свои земли тем же названием, какое используют окружающие народы, как знак тактичности и гостеприимства, но в среде своих сородичей они говорят просто «дом». 

Иногда фирболги принимают прозвища или имена, которые дают им чужаки, считая, что те, кому нужны имена, могут называть их вообще как угодно. 

---

!!!Классы фирболгов
Большинство фирболгов – друиды, следопыты или воины. Среди их вида эти призвания передаются из поколения в поколение. Магическое наследие фирболгов также проявляет себя другими способами; те, кто становится бардами, оберегают знания клана, а фирболги чародеи защищают свои сообщества. Волшебники фирболгов возникают, когда клан начинает дружить с эльфами. 

Плуты фирболгов это, как правило, скауты, которым дают задание следить за соседним народом, чтобы определить их намерения. Они наиболее распространены среди фирболгов, чьи дома граничат с поселениями людей. 

Варвары среди фирболгов редки, за исключением кланов, которые постоянно находятся перед лицом угрозы со стороны злых гуманоидов и других захватчиков. 

Клирики и паладины фирболгов обычно служат богам природы и на них взирают как на проводников воли богов. 

Колдуны фирболгов редки, но некоторые кланы создают союзы и тайные договоры с влиятельными феями. 

О фирболгах монахах почти никто ничего не слышал, хотя монастырь мог бы взять на воспитание маленького сироту из уничтоженного клана фирболгов. 
<<<
Хобгоблины – несгибаемые солдаты, верно следующие строгой тактике и приказам. Я больше опасаюсь их менее предсказуемых разведчиков и шпионов.

– Воло, //Справочник Воло по монстрам//
<<<

Война – источник жизненной силы хобгоблинов. Её слава – мечта, которая вдохновляет их. Её ужасы не являются им в кошмарах. Трусость для хобгоблина страшнее смерти, поскольку они несут свои деяния при жизни в посмертие. Погибший героем – навеки герой. 

Молодые хобгоблины начинают военную службу, как только научатся ходить, и отвечать на призыв на построение, как только они овладеют своим оружием. Каждый легион хобгоблинского сообщества всегда готов к войне. 

---

!!!Брутальная цивилизованность 
Хобгоблины придерживаются высоких норм воинской чести. Раса имеет долгую историю общих традиций, записанных и пересказываемых, чтобы сохранить эти знания для следующих поколений. Когда хобгоблины не ведут войну, они занимаются сельским хозяйством, строительством и практикуются в воинском и колдовском искусствах. 

Эти признаки цивилизованного общества плохо скрывают ту жестокость, которую практикуют хобгоблины в отношении друг друга и доводят до совершенства в отношении других рас. Наказание за нарушение законов хобгоблинов быстро и беспощадно. Красота у хобгоблинов ассоциируется только с изображениями конфликтов и войны. 

Железной хваткой их философия удерживает их сердца, делая хобгоблинов слепыми к достижениям других народов. У хобгоблинов не хватает уважения или терпения для искусства. Они оставляют в своей жизни мало места радости или отдыху, и поэтому у них нет запаса веры, чтобы воззвать к нему в отчаянном положении. 

---

!!!Суровые боги 
Хобгоблины поклоняются двум богам, уникальным для их расы, единственным оставшимся в живых из их пантеона, который был подкошен Маглубиетом так давно, что хобгоблины уже не помнят имена павших богов. Номог-Геая – старший из двух и чаще почитаемый. Он воспринимается как стойкий, хладнокровный и тиранический лидер, и хобгоблины полагают, что он ожидает такое же поведение от них. Баргривйек – бог долга, единства и дисциплины, и он, как думают, радуется проявлению этих принципов. 

В историях, что хобгоблины рассказывают друг другу, Баргривйек служит заместителем командира Номог-Геаи. Номог-Геая предпочел бы, чтобы эту должность занял кто–то более похожий на него, но Баргривйек был единственным, кто у него остался после завоевания Маглубиетом. Хотя оба божества в конечном счете подчинены Маглубиету, великий бог позволяет им сохранить часть своего влияния на хобгоблинов, потому что их философия соответствует его собственной. 

Хобгоблины не строят храмы своим богам, чтобы они не вызвали недовольство Маглубиета, но некоторые священники ухаживают за маленькими святилищами и рассказывают легенды о своих богах. Священники Номог-Геаи всегда используют его любимое оружие, длинный меч и ручной топор. Они ответственны за боевую подготовку, а также за обучение стратегии и тактике. Священники Баргривйека владеют его символом, цепом с покрашенным белой краской билом. Они служат как полиция в обществе хобгоблинов, вынося суждения о чести, разрешая споры и другими путями обеспечивая дисциплину. 

---

!!!Кровавые синие носы 
Хобгоблины иногда рождаются с ярко-красными или синими носами. Это считается признаком силы и потенциала. Сине- и красноносые хобгоблины получают привилегированную подготовку, и как следствие, они занимают более высокое положение в обществе хобгоблинов. 

Носы всех хобгоблинов становятся более яркими, когда они разгневаны или взволнованы, так же, как щеки людей вспыхивают от эмоций. 

---

!!!Больше о хобгоблинах
Справочник Воло по монстрам, Глава 1: Происхождение монстров, Гоблиноиды: Войско завоевателей, с. 45
[img [https://i.imgur.com/lYaBvye.png]]
<<<
У вас не получится вызвать ненависть или страх, или разбудить любовь или дружбу у кого-либо из змеиного народа. Они могут изобразить таковые, чтобы вам было комфортнее, но внутри они всегда холодно и спокойно рассчётливы.

– Эльминстер, //Справочник Воло по монстрам//
<<<


Змееподобные существа, известные как юань–ти – это все, что осталось от древней, пришедшей в упадок человеческой империи. Сотни лет назад темные боги обучили их как с помощью каннибализма и омерзительных ритуалов смешать свою плоть со змеями, чтобы создать кастовое общество гибридов, где наиболее схожие со змеями существа являются лидерами, а человекоподобные – шпионами и агентами в других странах. 

---

!!!Преобразованные люди 
Люди, которые превратились в юань–ти были представителями одной из самых первых человеческих цивилизаций. Они строили огромные храмы из камня и обрабатывали металлы, производя броню, инструменты и оружие. В своих церемониальных обрядах они почитали змею, как воплощение наиболее ценных качеств. Они разработали философию разделения эмоций и интеллектуальной деятельности, что позволило им сосредоточить всю свою энергию на личном развитии и расширении своих территорий. Они считали себя наиболее просвещенными из всех смертных в мире, и в своем высокомерии стремились стать еще величественнее. 

Змеиные божества первобытного мира вняли молитвам этих людей и прошипели темные указания им на ухо. Люди запятнали собственные души, проводя человеческие жертвоприношения во имя богов, издеваясь над жертвами и пожирая их, и изменили собственные тела в колдовском ритуале, извиваясь в бассейнах, заполненных живыми змеями, смешивая человеческую плоть со змеиной, став подобием своих богов внешне, мысленно и эмоционально. Освободившись от оков человеческих тел, юань–ти использовали свои новые способности, чтобы завоевать новые земли и расширить границы своей империи. 

---

!!!Одна раса, множество форм 
Тела всех юань–ти это слияние человеческих и змеиных частей, но их соотношение варьируется индивидуально. После первоначального превращения людей их общество быстро разделилось на касты в зависимости от того, насколько полная была трансформация. Большинство Юань–ти можно разделить на три категории – отродья, проклинатели и чистокровные – мутировавшие стражи выводка и чрезвычайно редкие анафемы также имеют свое место в иерархии. 

Все юань–ти могут скрещиваться. Самки обычно откладывают кладку яиц, которые хранятся в общем инкубаторе, хотя живорождение не является редкостью. Результатом спаривания юань–ти различных типов почти всегда являются яйца из которых вылупляются юань–ти более слабого родителя, так что большинство выбирают партнеров того же типа для поддержания силы их личной родословной. 

Юань–ти отказались от своей человечности и считают, не змееподобных гуманоидов ущербными существами, которые недалеко ушли в своем развитии от обычных обезьян. Хотя некоторые чистокровные и способны спариваться с людьми, большинство из них считает это омерзительным и делают это только в случае крайней необходимости, когда нужно сохранить свою роль в качестве доверенного лица или советника в человеческом обществе. Очень редкое потомство такого союза всегда чистокровное, хотя признаки этого у человека могут появиться как и сразу при рождении, так и в течение нескольких лет после. 

---

!!!Скрытая империя 
Больше тысячи лет с момента падения их империи юань–ти остаются в своих скрытых цитаделях, в ожидании подходящего момента, чтобы нанести новый удар. Сегодня, когда их число сильно уменьшилось, а их враги гораздо сильнее, чем раньше, юань–ти понимают, что не могут прибегать к прямым атакам, чтобы вернуть себе достойное место в этом мире. Действуя из подземных руин своих зданий в чужих странах, агенты юань–ти внедряются в правительство противников, чтобы обнаружить слабые стороны предводителей врага, которые они смогут использовать. Юань–ти с нетерпением ждут того дня, когда их империя поднимется и распространится по всему миру, как яд по крови, как это было много лет назад. 

Поскольку их численность очень мала, юань–ти понимают, что они уязвимы в открытом противостоянии. Вместо этого, их нынешние планы предполагают, что они никогда не будут править открыто в человеческом обществе, поэтому они набирают влияние, контролируя правителей противника и тех, кто к ним близок с помощью шантажа, наркотиков, магии и увертливых, замаскированных чистокровных юань–ти. 

---

!!!Организованное общество 
Цель каждого юань–ти – превратиться в идеальную комбинацию змеи и гуманоида. Эта парадигма отражена в кастовой системе общества юань–ти, в которой статус существа диктуется тем, на какой стадии трансформации оно находится. 

Канонической формой общества юань–ти является пирамида, наверху которой располагаются отродья, проклинатели на среднем уровне, и чистокровные внизу. Отдельной частью являются анафемы, самые могущественные юань–ти из всех, и две касты с самым низким статусом: стражи выводка и рабы. 

Чистокровные юань–ти самые многочисленные и самые человекоподобные, их выделяет одна или несколько присущих змеям особенностей, вроде разрезов зрачков или вкраплений чешуи на коже. 

В городах юань–ти чистокровные живут спокойно, однако их желания всегда меркнут перед потребностями отродий и проклинателей. 

Чистокровные могут легко сойти за человека, поэтому самая значительная их миссия – быть агентами юань–ти в остальном мире. Они живут инкогнито среди людей как дипломаты, агенты влияния и шпионы. Так как во время выполнения заданий некоторые из них получают значительную власть и влияние, они окружают роскошью свою жизнь в человеческих обличьях, и впоследствии бывают сильно возмущены потребностью вернуться домой, к жизни внизу кастовой системы. 

---

!!!Бесстрастное зло 
Во время их возвышения много лет назад, юань–ти освободили себя от ярма человеческих эмоций. Теперь они смотрят на мир с бесстрастной, прагматичной точки зрения. Интеллектуально и отстранено они понимают эмоциональные связи, и используют их для влияния на чужие чувства через взятки, любовь или угрозы. Как существа, лишенные эмоций, юань–ти проявляют это в жизни и тактическом планировании. В бою или в повседневной жизни юань–ти используют следующие принципы. 

''Чужая жизнь – мелочь''

Юань–ти мало ценят жизни гуманоидов, даже жизни своих рабов и культистов. Они отравляют детей ради исполнения угрозы родителям или превращают одного члена семьи в стража выводка, чтоб наглядно показать остальной семье последствия сопротивления. Они могут воздерживаться от провокации чувств других, если это может негативно повлиять на планы юань–ти. Однако они достаточно хорошо понимают гуманоидную психологию, и знают, что могут пренебречь человеческой жизнью почти в любой ситуации. 

Более того, в кастовой системе юань–ти жизнь вышестоящего ценится намного выше нижестоящих, и ожидается, что более слабые граждане сложат свои жизни во имя защиты вышестоящих. 

''Выживание прежде всего''

Юань–ти предпочтут отступить или бежать из конфликта, если не верят, что у них есть реальные шансы на успех. Это не трусость, просто практичные юань– ти слишком высоко ценят собственные жизни, чтоб ими рисковать, когда шансы не в их пользу. Короткое отступление может быть попыткой занять лучшую тактическую позицию, найти союзников, или позволить юань–ти изучить оппонентов для создания лучшей тактики. 

''Пленяй , не убивай''

Цель расы юань–ти – покорять и порабощать других, но они не признают тот тип зла, который призывает безжалостно убивать и изничтожать всех, кто выступает против них. Исходя из целей доминирования, юань–ти предпочтет захватить, а не убить потенциально полезных противников. 

Юань–ти принуждают врагов к согласию при помощи промывки мозгов, очарований, пыток или превращения в стражей выводка. Тем, чью волю сломить не удается, все равно находится применение в виде жертвы богам или еды. 

''Положись на обман''

Юань–ти не видят смысла в честном бою. Они незаметны от природы, и, если могут подкрасться незаметно, устроить засаду или убить во сне, они так и сделают, предпочтя эту тактику прямому столкновению. Чистокровный, служащий королевской семье как дегустатор, может отравить еду, и съев кусок объявить ее безопасной.

---

!!!Физические вариации 
Не бывает двух одинаково выглядящих юань–ти. Как змеиная, так и человеческая части тела демонстрируют большое разнообразие форм и раскрасок. Так как внешний вид юань–ти в основном передается по наследству, в небольших поселениях юань–ти будут выглядеть похоже, а в больших городах большее смешение даст более широкий диапазон результатов. 

| !к20 |!Особенность чистокровного | !к20 |!Цвет кожи |
| 1–3 |Клыки | 1–4 |Темно–коричневая |
| 4–5 |Раздвоенный язык | 5 |Зелено–коричневая |
| 6–9 |Чешуйчатые руки и кисти рук | 6–9 |Светло–коричневая |
| 10–11 |Чешуйчатое лицо | 10–15 |Умеренно–коричневая |
| 12–15 |Чешуйчатый торс | 16 |Бледно–коричневая |
| 16–18 |Змеиные глаза | 17–18 |Красно–коричневая |
| 19–20 |Бросьте дважды, перекидывая 19 и 20 | 19–20 |Желто–коричневая |

| !к100 |!Цвет чешуи | !к100 |!Цвет чешуи |
| 01–06 |Черный | 49–51 |Голубой и серый |
| 07–12 |Черный и коричневый | 52–54 |Голубой и желтый |
| 13–18 |Черный и зеленый | 55–60 |Коричневый |
| 19–23 |Черный и красный | 61–66 |Коричневый и зеленый |
| 24–26 |Черный и белый | 67–73 |Зеленый |
| 27–30 |Черный и желтый | 74–79 |Зеленый и каштановый |
| 31–36 |Черный, золотой и красный | 80–84 |Зеленый и белый |
| 37–42 |Черный, красный и белый | 85–90 |Зеленый и желтый |
| 43–45 |Голубой | 91–96 |Красный и каштановый |
| 46–48 |Голубой и черный | 97–00 |Альбинос |

| !к20 |!Узор чешуи | !к6 |!Цвет языка |
| 1–5 |Пёстрый | 1 |Черный |
| 6–7 |Беспорядочный | 2 |Синий |
| 8–10 |Сетчатый | 3 |Оранжевый |
| 11–15 |Крапчатый | 4 |Бледный |
| 16–20 |Полосатый | 5–6 |Красный |

| !к6 |!Цвет глаз |!к6 |!Цвет глаз |
| 1 |Голубой | 4 |Красный |
| 2 |Коричневый | 5 |Каштановый |
| 3 |Зеленый | 6 |Желтый |

---

!!!Отыгрыш юань – ти 
Юань–ти лишены эмоций, однако чувствуют свое полное превосходство над гуманоидами таким же образом, как человек чувствует свое превосходство над курами или кроликами – как само собой разумеющийся факт, не подлежащий сомнению или подтверждению. Для юань–ти существует всего три категории существ: угрозы, юань–ти и мясо. Угрозы – это могущественные существа типа демонов, драконов или джиннов. К юань–ти относятся все существа их вида вне зависимости от касты; хотя соперничающий юань–ти может быть опасным, а слабый или мертвый может быть потенциальной едой, все же в первую очередь это всё равно представители истинного народа, заслуживающие определенного уважения. К мясу относится любое существо, не относящееся к угрозам или к юань–ти, возможно, полезное для каких–то специфических целей, но в ином отношении не заслуживающее беспокойства. 

Большинство юань–ти считают ниже своего достоинства разговаривать с мясом. Только чистокровные, которые вращаются среди гуманоидов и посему вынуждены учиться общаться с ними культурно, практикуют взаимодействие с мясом. Значительная часть их обучения посвящается подавлению внутреннего раздражения необходимостью разговаривать с низшими существами, как если бы те были равными, или необходимостью почтительно обращаться с правителями гуманоидов как будто чистокровный – просто советник. Чистокровные–шпионы чувствуют что–то вроде легкого презрения к мясным существам, но могут принимать приятную личину и разговаривать с такими существами сладкоголосым тоном, скрывающим их истинные чувства. 

---

!!!Имена юань – ти 
Имена юань–ти имеют значения и передаются из поколения в поколение, хотя с годами варианты написания и интонации изменились. 

Некоторые юань–ти добавляют больше шипящих к своим именам создавая преувеличенный шипящий звук, основываясь на личных предпочтениях или особенностях анатомии, облегчающих произнесение имени в таком виде. Это имя признается как вариант данного при рождении имени, а не как новое уникальное имя. Юань–ти может пользоваться как данным при рождении именем, так и измененным как описано выше именем, так и (что особенно распространено среди чистокровных) заимствованным у местного населения именем. 

''Имена юань–ти:'' Асутали, Зиху, Исзаху, Итстли, Мануюа, Мезтли, Несалли, Отлех, Саисатал, Сзималли, Сисава, Ситлали, Соакош, Талаш, Теоши, Хесзатал, Хитотии, Шалкашлах, Эзтли, Яотал

---

!!!Больше о чистокровных юань-ти
Справочник Воло по монстрам, Глава 1: Происхождение монстров, Юань-ти: Люди-змеи, с. 91
<<<
Geth's ancient heritage rose up from deep within him, spreading out from the core of his being. Some shifters manifested terrible claws, others massive fangs, still others astounding speed or heightened senses. Geth's gift from his lycanthrope ancestors was sheer toughness. Strength seeped into his bones and flooded his flesh. His skin hard­ened, and his hair became coarse like an animal's tough hide. A sense of invincibility spread through him. For the moment at least, he felt unstoppable!

— Don Bassingthwaite, //The Binding Stone //
<<<


Shifters are sometimes called the weretouched, as many believe they are the descendants of humans and lycanthropes. Whatever their origins, shifters have evolved into a unique race. They are humanoids with a bestial aspect; while they can't fully change shape, they can temporarily enhance their animalistic features-a state they call shifting. 

As a shifter adventurer, you walk a path between the wilds and the civilized world. You are driven by primal instincts, the whispers of Wolf or Rat. When you embrace those voices, you transform. Do you see your shift-form as your true self, reveling in these moments of primal ascension? Or do you hate shifting, fearing that you might one day lose yourself to the beast within? 

In creating a shifter, consider your roots and the spirit that drives you. What has set you on the path to adventure? Do you embrace the party as your pack, or are your companions just the means to an end? 

---

!!!Shifter Origins
 Shifters are relatively rare in the Five Nations; there are more changelings in Breland than there are shifters. The bulk of the shifter population of Khorvaire is based in the Towering Wood, the vast forest that stretches across the northwest. Over the last four decades, shifters have emerged from the deep woods to live in the farmlands of the Eldeen Reaches, shaping the culture of this new nation. Outside the Towering Wood, many shifters fled the violence and persecution of the Silver Crusade, leading to their scattering across the Five Nations. While the hysteria of the Silver Crusade has long since died down, there are still many who treat shifters with fear or suspicion. //They’re weretouched, more beast than human. They’re prone to violence—they can’t help it. Don’t they become dangerous when the moons are full? //

As a shifter character, you don’t have to be tied to a shifter community. You could’ve grown up in the Five Nations, serving as a soldier or working for a dragonmarked houses just as anyone else might have. But if you want deeper ties, consider the following options. 

''Deep Forest''

The shifters of the Towering Wood, nomadic hunter-gatherers, follow the same traditions that have sustained their people for millennia. Their champions are druids, rangers, and barbarians, and they are attuned to the beast within. But they know almost nothing about the world beyond the wood and have little experience with artifice or the wonders of the dragonmarked houses. If you’re from such a tribe, what drove you to leave the woods? Are you following a druidic prophecy? Pursuing an ancient evil that’s escaped from the wood? Have you been exiled from your tribe, or are you simply driven by curiosity? Outlander and hermit are both logical backgrounds for such a character. 

''Eldeen Reaches''

Shifters played a strong role in the rise of the Eldeen Reaches. They can be found in the Warden militia, and many have settled in the farmlands, integrating with the other races in the area. The Reaches are a young nation that broke free from Aundair during the Last War, and there’s considerable fear that Aundair may try to reclaim the region. As an Eldeen shifter, are you a proud Reacher? Do you stand up for your people and take an aggressive stance against Aundair? Are your actions in some way helping your family? Or have you turned your back on the Reaches? Any background can work for an Eldeen shifter, but folk hero and outlander are both strong options.


''Urban Pack ''

Due to the fear and prejudice of many strangers, shifters often form tight communities in the larger cities. Lower Northedge in Sharn holds most of the city’s shifters; as a child, you might have played hrazhak on the bridges or pissed on the shrine of Fathen the Martyr. Do you have ties to an extended family in a bad part of town, or are you a lone wolf? Did you serve in the Last War, and if so, was it a sign of devotion to your nation or were you just doing your job? Do you cling to any of the old traditions of the woods, or do you see stories of Grandmother Wolf as foolish superstition? 

---

!!!The Beast Within
Your shifter subrace isn’t driven by genetics—two beasthide shifters can have a swiftstride child. Young shifters have the same general phenotype, but as a child you find your beast within; this sets your subrace, triggering physical and psychological changes. The tribes of the Towering Wood believe that these beasts are totem spirits; Moonspeaker Druids tell stories of Grandmother Wolf and Grandfather Rat, and shifter hunters may swear by Tiger’s Blood. 

Your beast within is reflected by your subrace and shapes your personality and appearance. If your beast is the Tiger, you likely have feline features, which are exaggerated when you shift. However, the beast is ultimately a reflection of who you are; you can attribute your wild temper to your Boar nature, but it’s not a truly independent force like the quori spirits of the kalashtar. 

Moonspeaker druids respect many spirits, but the following five are usually associated with the beast within: 

*The ''Bear'' embodies strength and caution; in contrast to the Boar, the Bear pauses before taking rash action. Shifters tied to the Bear are typically beasthide. 
*The ''Boar'' possesses great endurance and is celebrated for its honesty and lack of guile; however, it is also seen as being reckless and overly enthusiastic, often prone to rash action. Boar shifters are typically beasthide. 
*The ''Rat'' is clever and stealthy. Lacking physical strength, Grandfather Rat uses wits to overcome his enemies. Rat shifters are usually swiftstride, but can also be wildhunt. 
*The ''Tiger'' is known for grace and speed, seen as a valiant hunter. In contrast to those guided by the Wolf or Rat, those touched by Tiger tend to be loners. Tigers are usually swiftstride or wildhunt. 
*The ''Wolf'' is considered wise and honorable, the pillar of a community and keeper of the druidic mysteries. Wolf shifters with a martial bent tend to be longtooth shifters, while druids guided by Grandmother Wolf are usually wildhunt. 

In creating a shifter character, consider both the nature of your beast within and how you relate to it. If you’re a wildhunt shifter with lupine characteristics, do you think of yourself as being touched by Grandmother Wolf? Do you play up this aspect of your personality, or do you largely try to ignore it? 

---

!!!Shifters and Religion 
Shifter paladins and clerics are rare. Shifters have a natural tie to primal forces and are more likely to embrace these as opposed to the abstract religions of the east. While shifters can be found in all of the Eldeen druidic sects, the Moonspeakers are a sect tied specifically to shifter traditions; Moonspeakers usually follow the Circle of the Moon or the Circle of the Shepherd. Moonspeaker druids respect the totems associated with the beast within—Grandmother Wolf, Cousin Bear—but they don’t see these spirits as gods. These beasts guide shifters from within—they don’t shape the world itself. 

The Silver Crusade is a festering wound that left most shifters feeling bitter and suspicious of the organized religions of the Five Nations. However, there are shifters who recognize that the Crusade was a tragedy caused by the failings of people rather than being the fault of the Flame itself; over the decades, there have been a number of shifter heroes who have embraced the Silver Flame and sought to form a bridge between their people and Flamekeep. There’s still much work to be done here—but your character could be the one called to do it. 

In the Five Nations, a few shifters have abandoned the Moonspeaker traditions and instead taken up the Sovereign Host. The Hounds of Balinor are a shifter sect whose members believe that shifters are the chosen of Balinor and that the Sovereign of the Hunt strengthens them when they shift. Others embrace the Three Faces of the Wild—the worship of Arawai, Balinor, and the Devourer. A few have turned to the Blood of Vol, blending the idea of the divinity within with the beast within. 

As often as not, however, shifters focus on their inner strength and instincts as opposed to seeking guidance from divine sources. Many city shifters are actively suspicious of clerics and paladins, especially followers of the Silver Flame. 

---

!!!Shifters and Lycanthropes 
Shifters and lycanthropes are clearly related. Both transform into a more bestial state. Shifters have affinities for bear, boar, rat, and wolf; could it be mere coincidence that these are the most common forms of lycanthrope? And yet, the differences between shifter and lycanthrope are vast. Being a shifter isn’t a condition that can be passed by a bite. Shifters have full control over their gifts, while lycanthropes struggle with them. The beast within may shape a shifter’s personality, but it doesn’t overwhelm it. By contrast, lycanthropy attempts to destroy the victim’s original personality and can turn the most virtuous hero into a bloodthirsty murderer. Wererats and werewolves are cruel killers . . . but Grandmother Wolf doesn’t encourage savagery, and Grandfather Rat doesn’t urge murder. And perhaps most important of all: shifters themselves can become lycanthropes. This isn’t in their blood; lycanthropy is a curse, and it can afflict them just like it can any other humanoid. 

The Moonspeaker druids tell a tale of five shifter champions who ventured too deep into the Towering Woods. They hunted a great evil, but when they caught it, they were overwhelmed; its evil filled their hearts, and it sent them back to prey on their friends and families. If anyone survived their attacks, the evil would seep through the wound and poison their hearts as well. These, they say, were the first lycanthropes. 

The Silver Crusade began when a dark power surged in the Towering Wood, amplifying the power of lycanthropy. The curse became more virulent. Victims fell prey to its power more quickly, guided by some dark power beyond the common evil of the curse. Within the Towering Woods, tribes of shifters fought their corrupted kin. Beyond it, the farmers of Aundair were tormented by raiding wolves and boars. When the templars responded, the beasts that were slain reverted to their natural forms, revealing that they were shifters. The word quickly spread: all shifters were weretouched, capable of turning into savage beasts. None could be trusted! Meanwhile, among the shifter tribes, scouts warned of atrocities committed by the foreign soldiers. In fact, the demagogues on both sides were wererats working to ensure that these possible allies would instead become bitter enemies . . . and the trick worked. Frightened templars and paranoid mobs slew many innocent shifters, and to this day the extremist sect known as the Pure Flame claims all shifters are servants of darkness. 

The fact of the matter is that lycanthropy is a weapon; it spreads through violence and turns its victims into killers. Its origins may never be discovered, but the Moonspeaker tale is as logical as any. Lycanthropes and shifters are related in that the first lycanthropes were cursed shifters. The unknown force responsible was likely also behind the surge that caused the Silver Crusade—and it could rise again. One logical contender is the daelkyr known as Dyrrn the Corruptor. It’s said that Dyrrn created doppelgangers by twisting changelings; it could have used this same technique to create lycanthropes from shifters. Or it could have been the work of an overlord, an archfiend of the Age of Demons; some texts speak of the Wild Heart, an overlord who destroys civilizations and feeds on primal cruelty. Ultimately, it’s up to the DM to decide if the answer will be revealed, and if so, what it is. In battling the cults of the Dragon Below, could you face the original shifter champions corrupted by Dyrrn? Or might the schemes of the Lords of Dust unleash the Wild Heart? 

While shifters and lycanthropes aren’t the same, the story and the stereotype is well established. Everyone calls the shifters “weretouched.” Beyond the Towering Woods, there are many shifters who indeed believe they are thin-blooded lycanthropes. And the wounds caused by the Silver Crusade and the Pure Flame will never completely heal. But despite the stereotype, the shifters of the Towering Woods fear and fight evil lycanthropes, and their tribes include Monster Slayer rangers who specialize in hunting werewolves. Shifters and lycanthropes resemble one another, but they are not the same—and shifters are just as vulnerable to the curse of lycanthropy as humans are. 

---

!!!Shifters and Totems 
The Totem Warrior barbarian and the Circle of the Shepherd druid are both strong choices for a shifter character. But how do the totem options overlap with your ties to the beast within? If you decide that you’re a beasthide shifter with a Bear spirit, can you take Wolf as your Totem Spirit feature? Of course you can—even as a Totem Warrior, you’re not bound to a single totemic beast. You could play up the idea that you feel a connection to multiple spirits. With your DM’s approval, you could even have your character develop physical traits tied to your second spirit; you’ve always been a big, bearlike warrior, but now you manifest lupine ears and fangs when you shift. 

Another option is to rename your class features to match your beast within. There’s no reason you can’t take the Bear option for the Totem Spirit feature but call it “Boar” instead. There is no Rat option for a Totem Warrior, but you could take the Eagle option and call it Rat. Ultimately this is a question of story. If you want to highlight your tie to a single spirit and it makes sense, just change the names. But there’s nothing wrong with having a totem menagerie! 

---

!!!Shifter names
Shifters have no language of their own and often live in blended communities. Their names typically overlap with the names of other cultures in their region. Many shifters prefer to keep their personal names for their friends and use "wandering names" with strangers. These are usually tied to a physical or personality trait. 

''Shifter Names:'' Badger, Bear, Cat, Fang, Grace, Grim, Moon, Rain, Red, Scar, Stripe, Swift, Talon, Wolf 
<<<
— Могла ли я думать, что где-то на свете есть подобная красота!.. — тихо выговорила Золотая Луна. Дневной переход выдался нелёгким, зато награда, ожидавшая в конце, превосходила всякое вероятие. С высокого утёса взглядам путников открылся овеянный легендами город Квалиност. 

По углам города возносились, подобно сверкающим веретёнам, четыре высоких тонких шпиля, сложенных из белого камня, отделанного серебром. От шпиля к шпилю тянулись невесомые арки. Их некогда выковали искуснейшие мастера-гномы; каждая способна была выдержать вес марширующих армий, но казалось — сядет птица, и они рухнут. Арки обозначали границу города; Квалиност не прятался за стеной, но, наоборот, с любовью распахивал объятия лесу. 

— Маргарет Уэйс и Трейси Хикмэн, //Драконы осенних сумерек //
<<<

Эльфы это волшебный народ, обладающий неземным изяществом, живущий в мире, но не являющийся его частью. Они живут в местах, наполненных воздушной красотой, в глубинах древних лесов или в серебряных жилищах, увенчанных сверкающими шпилями и переливающихся волшебным светом. Там лёгкие дуновения ветра разносят обрывки тихих мелодий и нежные ароматы. Эльфы любят природу и магию, музыку и поэзию, и всё прекрасное, что есть в мире.

---

!!!Стройные и изящные
Обладая неземным изяществом и тонкими чертами, эльфы кажутся людям и представителям других рас чересчур красивыми. В среднем, они немного ниже людей, их рост колеблется от 150 до 185 см. Они стройнее людей, и весят от 45 до 65 кг. Мужчины и женщины почти одинакового роста, и мужчины весят лишь незначительно больше.

Цвета кожи у эльфов включают в себя все человеческие оттенки, а также цвета с медным, бронзовым и голубовато-белым отливом. Волосы помимо человеческих цветов могут быть зелёными или синими, а глаза приобретать цвет жидкого золота или серебра. У эльфов не растут волосы на лице, и почти отсутствуют волосы на теле. Они предпочитают элегантную одежду ярких цветов и простые, но красивые украшения.

---

!!!Неподвластный времени взгляд
Эльфы способны жить более 700 лет, что даёт им более широкий взгляд на проблемы, беспокоящие короткоживущие расы. События чаще кажутся им забавными, чем волнующими, и ими чаще движет любопытство, чем жадность. В случае мелких происшествий они чаще проявляют равнодушие и остаются в стороне. В случае же преследования цели, выполнения задания или изучения нового навыка эльфы остаются собранными и целеустремлёнными. Они не торопятся заводить друзей или врагов, а прощают ещё медленнее. На мелкие оскорбления они отвечают пренебрежением, на крупные же — местью.

Подобно молодым ветвям дерева эльфы проявляют гибкость перед лицом опасности. Они верят в дипломатию и предпочитают с помощью компромисса уладить разногласие прежде чем оно перешло в насилие. Они способны отступить перед лицом вторжения вглубь своих лесов, уверенные, что просто смогут подождать, пока захватчики уйдут. Но если придёт нужда, эльфы способны проявить свою воинскую сторону, продемонстрировав владение мечом, луком и стратегией.

---

!!!Скрытые лесные королевства
Большинство эльфов живёт в маленьких лесных деревнях, спрятанных среди деревьев. Эльфы охотятся на дичь, собирают пищу и растят овощи. Их навыки и магия позволяют им прокормить себя без вырубки леса и вспахивания земли. Они талантливы в ремёслах, изготавливают качественную одежду и предметы искусства. Их контакты с другими народами обычно ограничены, но некоторые эльфы всё же преуспели в торговле,выменивая свои товары на металлы, которые эльфы не любят добывать сами.

Эльфы, встречающиеся за пределами родных земель, чаще всего оказываются путешествующими менестрелями, артистами или мудрецами. Людские дворяне соревнуются за услуги эльфа-наставника, способного обучить их детей фехтованию или магии.

---

!!!Исследования и приключения
Эльфы берутся за приключения из страсти к путешествиям. Благодаря большому сроку жизни, они могут посвятить столетия изучению и исследованию. Им не нравится темп человеческого общества, упорядоченный изо дня в день, но полностью меняющийся за десятилетие, и они предпочитают найти себе занятие, позволяющее им часто путешествовать, устанавливая свой собственный темп жизни. Эльфам также нравится оттачивать своё воинское мастерство, или добиваться ве ликой волшебной мощи, и приключения способствуют этому. Некоторые могут присоединиться к повстанцам, борющимся против угнетателей, а другие становятся борцами за моральные ценности.

---

!!!Эльфийские имена
Эльфы считаются детьми, пока они не объявят себя взрослыми, где-то вскоре после сотого дня рождения. До этого времени их называют детским именем.

Достигая зрелости, эльф выбирает себе новое, взрослое имя, хотя те, кто знал его под детским именем, могут продолжать пользоваться им. Имя каждого взрослого эльфа уникально, хотя может отражать имена уважаемых личностей или членов семьи. Мужские и женские имена различаются лишь незначительно, и чёткой границы тут нет. Также каждый эльф носит фамилию, обычно это сочетание нескольких эльфийских слов. Некоторые эльфы, путешествующие среди людей, переводят фамилию на Общий, другие сохраняют эльфийскую версию.

''Детские имена:'' Ара, Брин, Валь, Дель, Иннил, Лаэль, Мелла, Наиль, Наэрис, Раэль, Ринн, Сай, Силлин, Тиа, Фанн, Фаэн, Эрин

''Мужские взрослые имена:'' Адран, Арамиль, Араннис, Ауст, Аэлар, Бейро, Берриан, Варис, Галинндан, Ивеллиос, Иммераль, Каррик, Куарион, Лаусиан, Миндартис, Паэлиас, Перен, Риардон, Ролен, Совелисс, Тамиорн, Таривол, Терен, Хадарай, Химо, Хэйян, Эниалис, Эрдан, Эреван

''Женские взрослые имена:'' Адрие, Альтеа, Анастри- анна, Андрасте, Антинуа, Бетринна, Бирель, Вадания, Валанте, Джеленетт, Друсилиа, Йелениа, Каэлинн, Квеленна, Квиласи, Кейлет, Ксанафия, Лешанна, Лиа, Миали, Мэриэль, Найвара, Сариэль, Силакви, Теирастра, Тиа, Фелосиаль, Шава, Шанайра, Энна

''Фамилии (перевод на Общий):'' Амакиир (Сверкающий Цветок), Амастасия (Звёздный Цветок), Галанодель (Лунный Шёпот), Ильфелкиир (Сверкающий Бутон), Ксилосент (Золотой Лепесток), Лиадон (Серебряный Лист), Найло (Ночной Бриз), Сианодель (Лунный Ручей), Холимион (Алмазная Роса)

---

!!!Больше об эльфах
Том Морденкайнена о врагах, Глава 2: Эльфы, с. 35
* Ваша скорость равна 0, и вы не получаете выгоды ни от каких бонусов к скорости.
* Броски атаки по вам совершаются с преимуществом.
* Вы совершаете броски атаки с помехой.
* Вы совершаете спасброски Ловкости с помехой .
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
<<tabs "[tag[Орден кровавых охотников]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
<<<
Дух орла превращает вас в хищника, с лёгкостью кружащегося по полю боя.
<<<
Пока вы пребываете в ярости и не носите тяжёлых доспехов, вы можете совершать Рывок бонусным действием, а другие существа совершают провоцированные атаки по вам с помехой.
[img width=500 class="centerme" [https://i.imgur.com/x08ZfId.png]]

<<tabs "[tag[Орк - описание]]" "Описание орков" "$:/state/tab1">>
Распространённое в мирах D&D оружие обладает широким разнообразием форм и размеров и сгруппировано в несколько изолированных друг от друга категорий.

---

!!!Таблицы оружия

[[Актуальные таблицы оружия|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=1786877311]]

---

!!!Виды оружия

<<tabs "[tag[Виды оружия]]" "По владению" "$:/state/tab1">>

---

!!!Характеристики оружия 

<<tabs "[tag[Характеристики оружия]]" "Основные параметры" "$:/state/tab1">>

---

!!!Импровизированное оружие
Иногда при персонажах нет оружия, и им приходится атаковать тем, что окажется под рукой. В импровизированное оружие входят все предметы, которые можно держать одной или двумя руками, такие как разбитая бутылка, ножка от стола, сковорода, колесо от телеги, или мёртвый гоблин.

Во многих случаях импровизированное оружие подобно настоящему оружию, и потому может использоваться как оно. Например, ножка от стола похожа на дубинку. Если Мастер позволит, персонаж, владеющий оружием, может использовать похожий предмет как это оружие и потому использовать бонус мастерства.

Предмет, не похожий на оружие, причиняет урон 1к4 (Мастер назначает вид урона в зависимости от используемого предмета). Если персонаж использует метательное или стрелковое оружие для совершения рукопашной атаки или метает рукопашное оружие, у которого не указана дальность, оно причиняет урон 1к4. У импровизированного метательного оружия дальность равна 4 м.
* Вы ничего не видите.
* Вы автоматически проваливаете все проверки характеристик, связанные со зрением.
* Броски атаки по вам совершаются с преимуществом.
* Вы совершаете броски атаки с помехой.
* Ваша скорость уменьшается вдвое.
!!!Отсутствие D&D > Плохое D&D
"""
Игра в D&D представляет собой совместное ролевое повествование. Не всем это дается легко, особенно совместная часть. 
Если вы, находясь за игровым столом, по какой-либо причине не получаете удовольствие от игры, то вы зря тратите свое время, время других Игроков и Мастера, и занимаете место, на которое претендуют другие желающие поиграть. Из этой ситуации есть три выхода: прекратить играть, сменить группу или обратиться к Мастеру, который поможет прийти к общему решению, либо посоветует прибегнуть к первым двум вариантам.
То же относится и к тем, кто не интересуется вовлечением в игровой процесс, а убивает время за столом по иной причине.
"""

---

!!!В чужой монастырь… 
"""
Другие Мастера в своих играх не обязаны следовать моим правилам. Большинство Мастеров не будут против обсудить введение / изменение правил между сессиями, как и я не буду против вашего желания поделиться с ними этим документом.
"""

---

!!!Несоблюдение правил 
"""
Отказ соблюдать правила равноценен отказу принимать участие в кампании (это не означает, что правила неоспоримы).
Многочисленные нарушения могут караться: унизительным предупреждением, разъяснительной беседой, киком из кампании, баном на все последующие кампании.
"""

---

!!!Спорные ситуации
"""
Правила не высечены на камне и не написаны кровью, они динамичны и могут меняться на ходу. Правила являются не законом, а инструментом, используемым Мастером для ускорения решения спорных ситуаций. 
Каждое правило оспоримо, как и решения, принимаемые Игроками или Мастером.
При возникновении какой-либо проблемы, спорной ситуации или вопроса стоит в первую очередь обратиться к Мастеру. 
//''Цена''//. Стоимость оружия в серебряных (см) или медных монетах (мм). Цена одинакова для Маленьких или Средних версий оружия. Большая версия стоит в два раза больше приведенной цены.

---

//''Урон''//. Кость урона оружия и тип наносимого им урона: ''«Д»'' для дробящего, ''«К»'' для колющего, или ''«Р»'' для рубящего. Некоторое оружие наносит повреждение разных типов. В ситуации, где важен тип повреждения, владелец может выбрать тип наносимого этим оружием повреждения

Если оружие наносит два типа повреждения, то оно не делится пополам между ними; все повреждение принадлежит обоим типам. Следовательно, существо должно иметь иммунитет к обоим типам повреждения, чтобы проигнорировать повреждение, наносимое этим оружием. 

---

//''Критический диапазон''//. Указывает диапазон значений на кости атаки, при выпадении которых атаки этим оружием совершают критическое попадание. Если значения не указано, то атака оружием совершает критическое попадание только при выпадении «20».

---

//''Дальность.''// Подразумевает под собой эффективную (нормальную) дальность стрельбы. Максимальная дальность метательного оружия равна утроенному значению дальности. Стрелковое оружие может стрелять на расстояние равное пятикратному значению дальности.

Бросок дальнобойной атаки на дистанцию превышающую эффективную дальность совершается с помехой. Атаки, совершённые по цели, находящейся за пределами максимальной дальности оружия, автоматически промахиваются.

Если у оружия ближнего боя (т.е. не являющегося метательным или стрелковым) указана дальность, это означает, что им можно совершать дальнобойные атаки, метая его. Вы используете для бросков атаки и урона тот же модификатор характеристики, что и при совершении рукопашной атаки этим оружием.

---

//''Вес''//. Вес Средней версии оружия. Уменьшите это число вдвое для Маленького оружия и удвойте для Большого.
<div class="tc-table-of-contents">
<<toc-selective-expandable "Основные правила">>
</div>
У вас, как у ааракокры, есть некоторые общие особенности с вашим народом. Начиная с 1 уровня вы можете летать, что исключительно эффективно при одних обстоятельствах и чрезвычайно опасно при других. Игра за ааракокра требует специального разрешения от Мастера. 

|!Особенность |!Описание |
|^Возраст |^Ааракокры достигают зрелости к 15 годам. Обычно ааракокры не живут дольше 60 лет. |
|^Мировоззрение |^Большая часть ааракокр добрая, но они редко выбирают между Законом и Хаосом. Вожди племени и воители могут быть законными, а исследователи и искатели приключений, скорее всего, будут хаотичными.  |
|^Размер |^Рост ааракокр около 1.5 м. Их тела стройные и лёгкие, а вес может быть в диапазоне от 35 до 45 кг. Ваш размер — Средний.  |
|^Скорость |^Ваша базовая скорость перемещения — 5 метров. |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 2. |
|^Житель Плана Воздуха  |^Ваше тело адаптировалось к сильным и порывистым ветрам Стихийного Плана Воздуха. Пока вы находитесь на Плане Воздуха, скорость полёта, которую вы получаете от особенности "Крылья", удваивается. |
|^Когти  |^Ваши когти – природное оружие, которое вы можете использовать, нанося безоружный удары. Если вы совершаете атаку ими, вы наносите рубящий урон, равный 1d4 + ваш мод. Силы, вместо дробящего урона, обычного для безоружного удара.  |
|^Крылья  |^Ваши крылья достаточно сильны для того, чтобы поддерживать вас в воздухе.  Вы можете летать со скоростью 6 м. Чтобы использовать эту скорость, вы не должны носить средние или тяжёлые доспехи и щиты. Силы ваших крыльев достаточно только для подъёма одного существа размером меньше вашего. Ваши доспехи должны быть специально подогнаны под ваши крылья. Подгонка доспеха требует четырёх часов работы опытного ремесленника и оплату в размере половины стоимости доспеха.  |
|^Обитатель пиков  |^Вы акклиматизированы к большой высоте, включая высоту более 5 км. Вы также адаптированы к сильному ветру, как описано в 5 главе //Руководства Мастера.//  |
|^Языки |^Вы разговариваете, читаете и пишете на Общем, Ауране и языке Ааракокр. |

!!!Разновидности
Ааракокра условно разделяют на два вида, основываясь на том, каким образом они были ёвзращены в своём племени. Храбрые сердцем ааракокра выступают защитниками племени, в то время как воплощающие мудрость ааракокра занимают роли шаманов и охотников. Выберите один из этих видов.

<<tabs "[tag[Разновидности ааракокр]]" "Воплощающий мудрость ааракокра" "$:/state/tab1">>
Ваш персонаж аасимар обладает следующими расовыми особенностями.

|!Особенность |!Описание |
|^Возраст |^Аасимары взрослеют как и люди, но они могут прожить до 160 лет. |
|^Мировоззрение |^Наполненные небесной силой, аасимары в большинстве своем добрые. Но изгои чаще всего нейтральные или даже злые. |
|^Размер |^У аасимаров такие же рост и вес, как и у людей. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Харизмы увеличивается на 2. |
|^Исцеляющие руки |^В качестве действия вы можете коснуться существа и восстановить ему количество хитов, равное вашему уровню. Вы не сможете вновь воспользоваться этой особенностью, пока не завершите продолжительный отдых. |
|^Небесное сопротивление |^У вас есть сопротивление некротическому урону и урону излучением. |
|^Несущий свет |^Вам известен заговор //свет//. Базовой характеристикой для его использования является Харизма. |
|^Сумеречное зрение |^Благословленное светлым духом, ваше зрение может легко адаптироваться к нехватке света. На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
|^Языки |^Вы можете разговаривать, читать и писать на Общем и Небесном языках. |

!!!Разновидности

Существует три разновидности аасимаров: аасимар–защитник, аасимар–каратель и падший аасимар. Выберите одну из них для своего персонажа.

<<tabs "[tag[Разновидности аасимаров]]" "Аасимар-защитник" "$:/state/tab1">>
Ваш персонаж гит обладает рядом врождённых способностей, являющихся частью его природы.

|!Особенность |!Описание |
|^Возраст |^Гиты достигают совершеннолетия в позднем подростковом возрасте и живут около века. |
|^Размер |^Гиты выше и стройнее людей, их рост может достигать 190 см. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашего Интеллекта увеличивается на 1. |
|^Псионика |^Вы знаете заговор //волшебная рука//, при этом рука невидима, когда вы используете заговор от данной особенности. При достижении 3 уровня вы можете один раз использовать заклинание //прыжок//. Вы должны завершить продолжительный отдых, чтобы сотворить это заклинание с помощью данной особенности ещё раз. Базовой характеристикой для этих заклинаний является Интеллект. Заклинания, сотворяемые с помощью данной особенности, не требуют материальных компонентов.  |
|^Языки |^Вы можете разговаривать, читать и писать на Общем и Гитском языках. |

!!!Разновидности

Гиты делятся на два вида: гитцераи и гитъянки. Выберите один из них.

<<tabs "[tag[Разновидности гитов]]" "Гитцераи" "$:/state/tab1">>
Ваш персонаж гном обладает следующими особенностями, общими для всех гномов.

|!Особенность |!Описание |
|^Возраст |^Гномы взрослеют с той же скоростью, что и люди, и вероятнее всего к 40 годам переходят к спокойной взрослой жизни. Они способны прожить от 350 до почти 500 лет. |
|^Мировоззрение |^Гномы чаще всего добры. Стремящиеся к порядку обычно становятся мудрецами, инженерами, исследователями, учёными или изобретателями. Те, кто больше склонны к хаосу, становятся менестрелями, мошенниками, путешественниками или искусными ювелирами. Гномы добросердечны, и даже мошенники из них получаются скорее шутливые, чем злобные. |
|^Размер |^Рост гномов варьируется между 90 и 120 см, а средний вес составляет 20 кг. Ваш размер — Маленький. |
|^Скорость |^Ваша базовая скорость перемещения — 5 метров. |
|^Увеличение характеристик |^Значение вашего Интеллекта увеличивается на 2. |
|^Гномьи изобретения |^Вы владеете экзотическим "гномьим" оружием, если владеете воинским оружием того же вида.|
|^Гномья хитрость |^Вы совершаете с преимуществом спасброски Интеллекта, Мудрости и Харизмы против магии. |
|^Пронырливость |^Вы можете проходить сквозь пространство, занятое существами, чей размер больше вашего. |
|^Сумеречное зрение |^Привыкнув к жизни под землёй, вы обладаете превосходным зрением при тусклом освещении. На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
|^Языки |^Вы можете говорить, читать и писать на Общем и Гномьем языках. Гномий язык, использующий дварфский алфавит, хорошо известен благодаря техническим трактатам и каталогам знаний об окружающем мире. |

!!!Разновидности

В мирах D&D встречаются три вида гномов — скальные, лесные и глубинные гномы. Выберите один из этих видов.

<<tabs "[tag[Разновидности гномов]]" "Глубинный гном" "$:/state/tab1">>
Ваш персонаж гоблин обладает следующими расовыми особенностями.

|!Особенность |!Описание |
|^Возраст |^Гоблины достигают зрелости к 8 годам, и живут до 60 лет. |
|^Мировоззрение |^Гоблины обычно нейтрально злые, поскольку они заботятся только о собственных потребностях. Некоторые гоблины могут склоняться к добру или нейтральности, но это редкость. |
|^Размер |^Рост гоблинов варьируется между 90 и 120 см, а вес от 20 до 40 кг. Ваш размер — Маленький. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 2, а значение Телосложения увеличивается на 1. |
|^Пронырливость |^Вы можете проходить сквозь пространство, занятое существами, чей размер больше вашего. |
|^Разъяренная мелкота |^Когда вы наносите существу урон атакой или заклинанием, и размер существа больше чем ваш, вы можете этой атакой или заклинанием нанести существу дополнительный урон, равный вашему уровню. Использовав эту особенность, вы не можете использовать её повторно, пока не завершите короткий или продолжительный отдых.  |
|^Сумеречное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
|^Шустрый побег |^Вы можете использовать действие Отход или Засада в качестве бонусного действия в каждый ваш ход. |
|^Языки |^Вы можете разговаривать, читать и писать на Общем и Гоблинском языках. |

Голиафы разделяют несколько общих особенностей.

|!Особенность |!Описание |
|^Возраст |^Продолжительность жизни голиафов сопоставима с человеческой. Они достигают зрелости во второй половине своего второго десятка, и обычно живут меньше века. |
|^Мировоззрение |^У общества голиафа, с его ясными ролями и задачами, есть сильная склонность к законному мировоззрению. Чувство справедливости голиафов, в сочетании с акцентом на самодостаточность и личную ответственность, склоняет их к нейтралитету. |
|^Размер |^Голиафы ростом от 210 до 250 см и весят от 120 до 180 кг. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Силы увеличивается на 2, а значение Телосложения увеличивается на 1. |
|^Выносливость камня |^Вы можете сосредоточиться, чтобы иногда не обращать внимание на рану. Когда вы получаете урон, вы можете реакцией совершить бросок к12. Добавьте ваш модификатор Телосложения к выпавшему числу и уменьшите общее количество урона на получившийся результат. После того, как вы используете эту особенность, вы не можете использовать её снова, пока не завершите короткий или продолжительный отдых. |
|^Мощное телосложение |^Вы считаетесь на один размер больше, когда определяется ваша грузоподъемность и вес, который вы можете толкать, тянуть или отрывать от земли, а также при совершении вами [[особых атак|Атака]] и [[Пробегания|Пробегание *]]. Кроме того, вы совершаете проверки и спасброски Силы против немагических эффектов, делающих вас [[схваченным|Схваченный]], [[опутанным|Опутанный]] или [[сбитым с ног|Сбитый с ног / Лежащий ничком]], с преимуществом.  |
|^Прирождённый атлет |^Вы владеете навыком Атлетика. |
|^Рожденный в горах |^Вы привычны к большой высоте, включая высоту больше 5 км. Вы также естественным образом приспособлены к холодному климату. |
|^Языки |^Вы можете разговаривать, читать и писать на Общем и Гигантском языках. |

Ваш персонаж дварф обладает рядом врождённых способностей, являющихся частью его природы.

|!Особенность |!Описание |
|^Возраст |^Дварфы взрослеют с той же скоростью, что и люди, но считаются юными, пока не достигнут пятидесятилетнего возраста. В среднем, они живут свыше 350 лет. |
|^Мировоззрение |^Большинство дварфов законопослушные, твёрдо верящие в преимущества хорошо организованного общества. Они также стремятся к добру, обладают развитым чувством справедливости и верят, что все заслуживают пользования преимуществами закона и порядка. |
|^Размер |^Рост дварфов находится между 120 и 150 см, и весят они около 70 кг. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 5 метров. |
|^Увеличение характеристик |^Значение вашего Телосложения увеличивается на 2. |
|^Владение инструментами |^Вы владеете одним видом ремесленных инструментов на ваш выбор: инструменты кузнеца, пивовара или каменщика. |
|^Дварфская боевая тренировка |^Вы владеете простым и воинским дробящим оружием и топорами, а также экзотическим "дварфским" оружием, если владеете воинским оружием того же вида. |
|^Дварфская выносливость |^Вы владеете навыком Выносливость. |
|^Дварфская устойчивость |^Вы совершаете с преимуществом спасброски от яда и получаете сопротивление к урону ядом. |
|^Знание камня |^Если вы совершаете проверку Интеллекта (История), связанную с происхождением работы по камню, вы считаетесь владеющим навыком История, и добавляете к проверке удвоенный бонус мастерства вместо обычного. |
|^Сумеречное зрение |^Привыкнув к жизни под землёй, вы отлично видите в условиях слабого освещения. На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
|^Языки |^Вы разговариваете, читаете и пишете на Общем и Дварфском языках. Дварфский язык состоит из твёрдых согласных и гортанных звуков, и этот акцент будет присутствовать в любом языке, на котором дварф будет говорить. |

!!!Разновидности

Три основных вида дварфов населяют миры D&D: горные дварфы, холмовые дварфы и дуэргары. Выберите один из этих видов.

<<tabs "[tag[Разновидности дварфов]]" "Горный дварф" "$:/state/tab1">>
Ваш персонаж дженази обладает следующими особенностями, общими для всех дженази.

|!Особенность |!Описание |
|^Возраст |^Дженази взрослеют приблизительно с той же скоростью, как и люди, и достигают зрелости в позднем подростковом возрасте. Они живут несколько дольше людей — около 150 лет. Когда дженази умирает, его тело разлагается с той же скоростью, что и человеческое, но при этом оно распадается на элементы, связанные с происхождением дженази. Дженази воздуха расстворяются в воздухе, дженази земли рассыпаются в виде грязи и камней, дженази огня обращаются в пепел и гарь, а дженази воды растекаются лужицами воды.  |
|^Мировоззрение |^Независимые и самостоятельные дженази имеют склонность к нейтральному мировоззрению. Некоторыми из них движут сильные побуждения окружать себя другими существами, особенно теми, кто восхищается их стихийным мастерством.  |
|^Размер |^Дженази столь же разнообразны, как и их смертные родители, но, как правило, имеют людское строение: рост от 150 до 180 см. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Харизмы увеличивается на 2. |
|^Языки |^Вы можете говорить, читать и писать на Общем и Первичном языках. Первичный — гортанный язык, заполненный резкими слогами и твёрдыми согласными. |

!!!Разновидности

В мирах D&D встречаются четыре вида дженази — дженази воды, дженази воздуха, дженази земли и дженази огня. Выберите один из этих видов.

<<tabs "[tag[Разновидности дженази]]" "Дженази воды" "$:/state/tab1">>
Ваше драконье наследие проявляется в ряде особенностей, общих для всех драконорождённых.

|!Особенность |!Описание |
|^Возраст |^Юные драконорождённые растут быстро. Они начинают ходить через час после вылупления, к трём годам достигают роста и сложения 10-летнего человека, и становятся взрослыми в 15. Живут они примерно до 80 лет.  |
|^Мировоззрение |^Драконорождённые склонны к крайностям, сознательно выбирая ту или иную сторону во вселенской борьбе добра и зла. Большинство драконорождённых добры, но те, кто принял сторону зла, могут быть чрезвычайно жестокими.  |
|^Размер |^Драконорождённые выше и тяжелее людей, их рост около 2 м и вес около 120 кг. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Силы увеличивается на 2, кроме того значение характеристики, соответствующей вашему драконьему наследию, увеличивается на 1. |
|^Драконье наследие |^Вы обладаете драконьим наследием. Выберите один вид дракона из таблицы "Драконье наследие". Ваше оружие дыхания (форма, дистанция и вид урона), сопротивление к урону, и увеличение характеристик определяется выбранным видом дракона. |
|^Зубы и когти |^На кончиках ваших пальцев есть втягивающиеся когти. Выпускание или втягивание когтей не требует действий. Эти когти являются природным оружием, которым вы можете совершать безоружные удары. Если вы совершаете атаку ими, вы наносите рубящий урон, равный 1к4 + ваш мод. Силы, вместо дробящего урона, обычного для безоружного удара. Вы также можете совершать укусы вашей зубастой пастью, атаки которой следуют тем же правилам, что и когти, но наносят колющий урон. |
|^Оружие дыхания |^Вы можете действием выдохнуть разрушительную энергию. Ваше драконье наследние определяет размер, форму и вид урона вашего выдоха. Когда вы используете оружие дыхания, все существа в зоне выдоха должны совершить спасбросок, вид которого определяется вашим наследием. Сложность этого спасброска равна 8 + ваш мод. Телосложения + ваш бонус мастерства. Существа получают урон, равный 2к6 + ваш мод. Телосложения, в случае проваленного спасброска, или половину этого урона, если спасбросок был успешен. Кость урона оружия дыхания увеличивается на 1к6, когда вы достигаете 5 уровня (3к6), 8 уровня (4к6), 11 уровня (5к6) и 17 уровня (6к6). После использования оружия дыхания вы не можете использовать его повторно, пока не завершите короткий или продолжительный отдых. |
|^Сопротивление урону |^Вы получаете сопротивление к урону того вида, который указан в вашем драконьем наследии. Кроме того, зелёные драконорождённые совершают спасброски от яда с преимуществом. |
|^Языки |^Вы можете говорить, читать и писать на Общем и Драконьем языках. Драконий язык считается одним из старейших и часто используется во время изучения магии. Этот язык звучит грубо для большинства других существ, и содержит много твёрдых согласных и шипящих звуков. |

!!!Драконье наследие
|^!Дракон |^!Вид урона |^!Оружие дыхания |^!Характеристика |
|^Белый |^Холод |^3-метровый конус (спас ТЕЛ) |^Телосложение |
|^Бронзовый |^Электричество |^Линия 6 на 1 м (спас ЛОВ) |^Харизма |
|^Зелёный |^Яд |^3-метровый конус (спас ТЕЛ) |^Интеллект |
|^Золотой |^Огонь |^3-метровый конус (спас ЛОВ) |^Мудрость |
|^Красный |^Огонь |^3-метровый конус (спас ЛОВ) |^Телосложение |
|^Латунный |^Огонь |^Линия 6 на 1 м (спас ЛОВ) |^Харизма |
|^Медный |^Кислота |^Линия 6 на 1 м (спас ЛОВ) |^Харизма |
|^Серебряный |^Холод |^3-метровый конус (спас ТЕЛ) |^Интеллект |
|^Синий |^Электричество |^Линия 6 на 1 м (спас ЛОВ) |^Телосложение |
|^Чёрный |^Кислота |^Линия 6 на 1 м (спас ЛОВ) |^Телосложение |

!!!Разновидности

В мирах D&D встречаются четыре вида драконорождённых — закалённые драконорождённые, мглистые драконорождённые, странствующие драконорождённые и устрашающие драконорождённые. Выберите один из этих видов.

<<tabs "[tag[Разновидности драконорождённых]]" "Закалённый драконорождённый" "$:/state/tab1">>
Ваш персонаж кенку обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Кенку имеют более короткую жизнь, чем люди. Они достигают зрелости к 12 годам, и могут дожить до 60 лет.  |
|^Мировоззрение |^Кенку – хаотичные существа, редко берущие на себя длительные обязательства, и они заботятся главным образом о собственной шкуре. Они, как правило, хаотично–нейтрального мировоззрения. |
|^Размер |^Кенку примерно 150 см в высоту и весят от 40 до 60 кг. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значения вашей Ловкости и Мудрости увеличиваются на 1. |
|^Имитирование |^Вы можете подражать звукам, которые вы слышали, включая голоса. Существо, которое слышит звуки, которые вы издаете, может определить что это имитация при успешной проверке Мудрости (Проницательность), против вашей проверки Харизмы (Обман).  |
|^Языки |^Вы можете читать и писать на Общем и Ауране (воздушный диалект Первичного), но вы можете говорить только используя способность Имитирование. |


!!!Разновидности

В мирах D&D встречаются три вида кенку — кенку покражи, кенку савана и кенку страды. Выберите один из этих видов.

<<tabs "[tag[Разновидности кенку]]" "Кенку покражи" "$:/state/tab1">>
Ваш персонаж кобольд обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Кобольды достигают зрелости к 6 годам, и могут дожить до 120 лет, но редко умирают от старости. |
|^Мировоззрение |^Кобольды по своему существу эгоистичны, что делает их склонными ко злу, но их опора на силу группы делает их склонными к законному мировоззрению.  |
|^Размер |^Рост кобольдов варьируется между 60 и 90 см, а вес от 12 до 20 кг. Ваш размер — Маленький. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 2, а значение Интеллекта или Харизмы на ваш выбор увеличивается на 1. |
|^Копатель |^Вы можете действием, удерживая кирку или лопату, наделить себя скоростью копания 3 м. С помощью этой скорости вы можете перемещаться сквозь немагическую и необработанную землю. Используяю эту скорость, вы оставляете за собой туннель, достаточный для беспрепятственного перемещения Маленьких или меньших существ. |
|^Мимолётная отвага |^Когда вы успешно совершаете спасбросок, ваш следующий спасброск или атака до конца вашего следующего хода совершается с преимуществом. |
|^Ночное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение, и в темноте так, как будто это тусклое освещение. В темноте вы не можете различать цвета, только оттенки серого. |
|^Опытный ловчий |^Вы владеете воровскими инструментами. Если вы совершаете проверку, связанную с установкой ловушки, вы добавляете к проверке удвоенный бонус мастерства вместо обычного. |
|^Пронырливость |^Вы можете проходить сквозь пространство, занятое существами, чей размер больше вашего. |
|^Центр внимания |^Действием вы можете отвлечь находящихся поблизости противников. Это может быть осуществлено мольбами о пощади, яростным визжанием, заносчивым бахвальством или другими подобными способами. До конца вашего следующего хода ваши союзники совершают свои броски атаки с преимуществом по враждебным существам, которые находятся в пределах 2 м от вас и могут видеть и слышать вас. Вы можете использовать эту особенность повторно, только после завершения короткого или продолжительного отдыха. |
|^Чувствительность к солнечному свету |^Вы совершаете броски атаки и проверки Мудрости (Внимательность), которые полагаются на зрение, с помехой, когда вы, цель вашей атаки или то, что вы пытаетесь увидеть, находится под прямым солнечным светом. |
|^Языки |^Вы можете говорить, читать и писать на Общем и Драконьем языках. Драконий язык считается одним из старейших и часто используется во время изучения магии. Этот язык звучит грубо для большинства других существ, и содержит много твёрдых согласных и шипящих звуков. |

Ваш персонаж кованый обладает следующими расовыми особенностями.

|!Особенность |!Описание |
|^Возраст |^Типичному кованому от 2 до 30 лет. Максимальный срок жизни кованого остаётся загадкой; пока что кованые не показывали признаков износа с возрастом. |
|^Мировоззрение |^Большинство кованых находит комфорт в порядке и дисциплине, придерживаясь закона и нейтралитета. Но некоторые из них переняли мораль, или её отсутствие, тех, кому они служили. |
|^Размер |^Рост кованых колеблется от 180 до 210 см, а вес от 125 до 150 кг. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашего Телосложения увеличивается на 2, а значение другой характеристики на ваш выбор увеличивается на 1. |
|^Искусственная устойчивость |^Создатель наделил вас выдающейся стойкостью, которая выражается в следующих преимуществах: |
|~|^• Вас не нужно есть, пить и дышать. |
|~|^• Вам не нужно спать, и вас невозможно усыпить. |
|~|^• Вы иммунны к магическому старению. |
|~|^• Вы имунны к болезням |
|~|^• Вы совершаете с преимуществом спасброски от яда и получаете сопротивление к урону ядом. |
|^Комплексная защита |^Ваше тело обладает встроенными уровнями защиты, которые можно улучшить с помощью доспехов: |
|~|^• Вы получаете бонус +1 к КД. |
|~|^• Вы можете надеть только те доспехи, которыми владеете. Чтобы надеть доспех, вы должны встроить его в своё тело, что занимает 1 час. Вы также должны потратить 1 час, если захотите снять его. Вы можете делать это частью отдыха. |
|~|^• Пока вы живы, ваш доспех нельзя снять с вас против вашей воли. |
|^Покой часового |^Во время ночлега, вы вместо сна должны провести не меньше шести часов в неактивном, неподвижном состоянии, вместо сна. В этом состоянии вы кажетесь безжизненным, но всё ещё находитесь в сознании и способны видеть и слышать. |
|^Языки |^Вы можете разговаривать, читать и писать на Общем языке. |

Ваш персонаж человек обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Люди становятся взрослыми в районе 20 лет, и живут менее столетия. |
|^Мировоззрение |^Люди не имеют склонности к определённому мировоззрению. Среди них встречаются как лучшие, так и худшие представители. |
|^Размер |^Люди сильно различаются по размерам. Некоторые с трудом достигают 150 см, тогда как другие имеют рост, превосходящий 195 см. Вне зависимости от роста, ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение одной вашей характеристики на ваш выбор увеличивается на 1. |
|^Решительность |^Когда вы совершаете атаку, спасбросок или проверку навыка, вы можете сделать это с преимуществом. Вы не можете использовать эту особенность повторно, пока не завершите короткий или продолжительный отдых. |
|^Языки |^Вы можете говорить, читать и писать на Общем и ещё одном языке на ваш выбор. |


!!!Разновидности

Сложно делать какие-либо обобщения относительно людей, также как и разделять их на виды. Условно людей принято различать по их складу ума и способности либо к разностороннему мышлению (человек-эрудит), либо к оттачиванию узкого набора навыков (человек-специалист). Кроме того, отдельно выделяют полулюдей - полудварфов, полуорков и полуэльфов. Калаштары же - прямые потомки людей, созданные из связи с духами с Плана Снов. Выберите один из этих видов.

<<tabs "[[Человек-специалист]][[Человек-эрудит]][[Полудварф]][[Полуорк]][[Полуэльф]][[Калаштар]]" "$:/state/tab1">>
Ваш персонаж людоящер обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Людоящеры достигают зрелости к 14 годам, и редко живут больше 60 лет.  |
|^Мировоззрение |^Большинство людоящеров нейтральны. Они рассматривают мир как место обитания хищников и добычи, где жизнь и смерть – естественные процессы. Они хотят только выжить, и предпочитают не связываться с делами других существ.|
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашего Телосложения увеличивается на 2. |
|^Природная броня |^Ваше тело покрыто жесткой чешуйчатой шкурой. Пока вы не носите доспехов, ваш КД равен 13 + ваш мод. Ловкости. Вы можете использовать КД своей природной брони, если доспехи, которые вы носите, дают вам более низкий КД. При использовании природной брони, эффект от щита применяется как обычно.|
|^Умелый ремесленник |^Частью короткого отдыха, вы можете собрать кости и шкуру убитого зверя, конструкта, дракона, монстра или растения размером от Маленького и больше, чтобы создать один из следующих предметов: средний щит, бумеранг, болас, дубинка, короткое копье, 1к4 дротиков, 2к4 стрел или игл для духовой трубки. Чтобы использовать эту черту, вам нужно лезвие, такое как кинжал, или подходящие инструменты ремесленника, такие как инструменты кожевника.  |
|^Языки |^Вы можете говорить, читать и писать на Общем и Драконьем языках. Драконий язык считается одним из старейших и часто используется во время изучения магии. Этот язык звучит грубо для большинства других существ, и содержит много твёрдых согласных и шипящих звуков. |


!!!Разновидности

В мирах D&D встречаются три вида людоящеров — людоящеры-аспиды, людоящеры-острозубы и людоящеры-чернобрюхи. Выберите один из этих видов.

<<tabs "[tag[Разновидности людоящеров]]" "Людоящер-аспид" "$:/state/tab1">>
Ваш персонаж медвежатник обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Медвежатники достигают зрелости к 16 годам, и живут до 80 лет. |
|^Мировоззрение |^Медвежатники ведут суровую жизнь, которая требует от каждого из них оставаться самодостаточным и независимым, даже за счет своих собратьев. Они склонны быть хаотично-злыми.  |
|^Размер |^Рост медвежатников варьируется между 180 и 240 см, а вес от 100 до 160 кг. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Силы увеличивается на 2, а значение Ловкости увеличивается на 1. |
|^Внезапное нападение |^Если вы застали врасплох существо и попали по нему атакой в свой первый ход в битве, атака дополнительно наносит ей 2к6 урона. Вы можете использовать это свойство только раз в битву. |
|^Длинные конечности |^Когда вы совершаете рукопашную атаку в свой ход, ваша досягаемость для неё на 1 м больше, чем обычно. |
|^Мощное телосложение |^Вы считаетесь на один размер больше, когда определяется ваша грузоподъемность и вес, который вы можете толкать, тянуть или отрывать от земли, а также при совершении вами [[особых атак|Атака]] и [[Пробегания|Пробегание *]]. Кроме того, вы совершаете проверки и спасброски Силы против немагических эффектов, делающих вас [[схваченным|Схваченный]], [[опутанным|Опутанный]] или [[сбитым с ног|Сбитый с ног / Лежащий ничком]], с преимуществом.  |
|^Скрытность |^Вы владеете навыком Скрытность. |
|^Сумеречное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
|^Языки |^Вы можете говорить, читать и писать на Общем и Гоблинском языках. |

Ваш персонаж орк обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Орки достигают зрелости к 12 годам, и живут до 50 лет. |
|^Мировоззрение |^Орки – злобные налетчики, которые полагают, что мир должен принадлежать им. Также они уважают силу больше всего остального и полагают, что сильные должны издеваться над слабыми, чтобы гарантировать, что слабость не распространится как болезнь. Они обычно хаотично-злые. |
|^Размер |^Рост орков варьируется между 180 и 210 см, а вес от 100 до 130 кг. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значения вашей Силы и Телосложения увеличиваются на 1. |
|^Агрессивный |^В качестве бонусного действия, вы можете совершить перемещение со своей полной скоростью к выбранному вами врагу, которого вы можете видеть или слышать. Вы должны закончить это перемещение ближе к врагу, чем начинали. |
|^Мощное телосложение |^Вы считаетесь на один размер больше, когда определяется ваша грузоподъемность и вес, который вы можете толкать, тянуть или отрывать от земли, а также при совершении вами [[особых атак|Атака]] и [[Пробегания|Пробегание *]]. Кроме того, вы совершаете проверки и спасброски Силы против немагических эффектов, делающих вас [[схваченным|Схваченный]], [[опутанным|Опутанный]] или [[сбитым с ног|Сбитый с ног / Лежащий ничком]], с преимуществом.  |
|^Сумеречное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
|^Угрожающий вид |^Вы владеете навыком Запугивание. |
|^Языки |^Вы можете говорить, читать и писать на Общем и Орочьем языках. |


!!!Разновидности

В мирах D&D встречаются два вида орков — горные орки и серые орки. Выберите один из этих видов.

<<tabs "[tag[Разновидности орков]]" "Горный орк" "$:/state/tab1">>
Ваш персонаж перевёртыш обладает следующими расовыми особенностями.

|!Особенность |!Описание |
|^Возраст |^Перевёртыши взрослеют немного быстрее людей, но живет примерно столько же - столетие или меньше. Хоть перевёртыши и способны скрывать свой возраст, меняя внешность, старение влияет на них также, как и на людей. |
|^Мировоззрение |^Перевёртыши склонны к прагматическому нейтралитету. |
|^Размер |^Рост перевёртышей колеблется от 155 до 185 см, а вес от 55 до 80 кг. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Харизмы увеличивается на 2, а значение другой характеристики на ваш выбор увеличивается на 1. |
|^Инстинкты перевёртыша |^Вы владеете на ваш выбор двумя из следующих навыков: Запугивание, Обман, Проницательность и Убеждение. |
|^Перевёртыш |^Вы можете действием изменить свою внешность и голос. Вы определяете характер изменений, включая ваш окрас, длину волос и пол. Вы также можете изменить свой рост и вес, но не настолько, чтобы это повлияло на вашу размерную категорию. Вы можете выглядеть представителем другой расы, но ваши игровые особенности не изменяются. Вы не можете копировать внешность существа, которого вы никогда не видели. Форма, которую вы принимаете, должна обладать таким же базовым расположением конечностей, что и вы. Ваша одежда и экипировка не изменяются этой особенностью. Вы остаётесь в новой форме, пока не используете действие, чтобы вернуться в свою истинную форму или пока не умрёте. |
|^Языки |^Вы можете разговаривать, читать и писать на Общем и двух других языках на ваш выбор. |

Ваш персонаж полурослик обладает следующими особенностями, общими для всех полуросликов.

|!Особенность |!Описание |
|^Возраст |^Полурослики достигают зрелости к 20 годам, и обычно живут до середины своего второго столетия. |
|^Мировоззрение |^Большинство полуросликов, как правило, они добросердечны и любезны, не выносят чужой боли и не терпят притеснения. Также они являются поборниками порядка и традиций, сильно полагаясь на общество и предпочитая проверенные пути. |
|^Размер |^Рост гномов варьируется между 90 и 120 см, а средний вес составляет 20 кг. Ваш размер — Маленький. |
|^Скорость |^Ваша базовая скорость перемещения — 5 метров. |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 2. |
|^Везение |^Если при броске атаки, проверке характеристики или спасброске у вас выпало «1», вы можете перебросить кость, и должны использовать новый результат. |
|^Прирождённый метатель |^Вы весьма недурно кидаете каштаны. Вы владеете пращой и экзотическим "полуросликовым" оружием, если владеете воинским оружием того же вида. Кроме того, вы считаетесь владеющим импровизированным оружием, если метаете его, а дальность его метания увеличивается вдвое. |
|^Пронырливость |^Вы можете проходить сквозь пространство, занятое существами, чей размер больше вашего.  |
|^Храбрость |^Вы совершаете с преимуществом спасброски от испуга. |
|^Языки |^Вы можете говорить, читать и писать на Общем и языке Полуросликов. |

!!!Разновидности

В мирах D&D встречаются четыре вида полуросликов — долговязые, легконогие, коренастые и призрачные полурослики. Выберите один из этих видов.

<<tabs "[tag[Разновидности полуросликов]]" "Долговязый полурослик" "$:/state/tab1">>
Ваш персонаж табакси обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Табакси имеют такую же продолжительность жизни, что и люди. |
|^Мировоззрение |^Табакси склонны к хаотическому мировоззрению, поскольку они позволяют своим порывам и увлечениям направлять их решения. Они редко являются злыми, большинство из них ведомы любопытством, а не жадностью или другими темными побуждениям.  |
|^Размер |^Табакси в среднем более высокие, чем люди, и относительно худощавые. Ваш размер – Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 2, а значение Харизмы увеличивается на 1. |
|^Кошачье проворство |^Ваши рефлексы и проворство позволяют вам двигаться с большой скоростью. Когда вы перемещаетесь в бою в свой ход, вы можете удвоить свою скорость до конца хода. Использовав эту особенность, вы не можете использовать ее снова, до тех пор пока вы не переместитесь на 0 м за один из ваших ходов.  |
|^Кошачьи когти |^Используя свои когти, вы можете карабкаться со скоростью равной вашей скорости ходьбы. Кроме того, ваши когти – природное оружие, которое вы можете использовать, нанося безоружный удары. Если вы совершаете атаку ими, вы наносите рубящий урон, равный 1d4 + ваш модификатор Силы, вместо дробящего урона, обычного для безоружного удара. |
|^Кошачьи таланты |^Вы владеете навыками Внимательность и Скрытность. |
|^Ночное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение, и в темноте так, как будто это тусклое освещение. В темноте вы не можете различать цвета, только оттенки серого. |
|^Языки |^Вы можете говорить, читать и писать на Общем и ещё одном языке на ваш выбор. |

Из-за своего дьявольского происхождения все тифлинги обладают некоторыми общими качествами.

|!Особенность |!Описание |
|^Возраст |^Тифлинги взрослеют тогда же, когда и люди, но живут немного дольше. |
|^Мировоззрение |^Может, у тифлингов и нет врождённой тяги к злу, однако многие из них в итоге склоняются к нему. Злые они или нет, но независимая природа определяет хаотичное мировоззрение большинства тифлингов. |
|^Размер |^Тифлинги по росту и телосложению схожи с людьми. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Харизмы увеличивается на 2. |
|^Адское сопротивление |^Вы получаете сопротивление к урону огнём. |
|^Ночное зрение |^Благодаря вашему дьявольскому наследию, вы отлично видите при тусклом свете и в темноте. На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение, и в темноте так, как будто это тусклое освещение. В темноте вы не можете различать цвета, только оттенки серого. |
|^Языки |^Вы разговариваете, читаете и пишете на Общем и Инфернальном. |

!!!Разновидности

Подраса тифлинга представляет его особую связь с одним из Лордов Девяти Преисподних. Выберите одну из приведённых ниже опций, которая наиболее соответствует инфернальному существу, связанному с семьёй тифлинга.

<<tabs "[tag[Разновидности тифлингов]]" "Тифлинг Асмодея" "$:/state/tab1">>
Ваш персонаж тортл получает следующие особенности, которые позволяют ему справляться с опасностями жестокого мира.

|!Особенность |!Описание |
|^Возраст |^Молодые тортлы в течение нескольких недель после рождения передвигаются ползком, прежде чем научиться ходить на двух ногах. Они достигают зрелости к 15 годам и живут в среднем 50 лет.  |
|^Мировоззрение |^Тортлы склонны жить размеренной, ритуализированной жизнью. Они вырабатывают привычки и обычаи, которые становятся более определенными с возрастом. Большинство из них законно-добрые. Некоторые могут быть эгоистичными и жадными, более склоняясь к злу, но это крайне странно для тортла отказаться от порядка в угоду хаоса. |
|^Размер |^Рост взрослых тортлов варьируется от 150 до 180 см, а весят они около 200 кг. Вес их панциря составляет примерно одну треть от их общей массы. Ваш размер - Средний.  |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Силы увеличивается на 2, а значение Мудрости увеличивается на 1. |
|^Задерживание дыхания |^Тортлы не являются естественными пловцами, но они могут оставаться под водой в течение некоторого времени, прежде чем всплыть на поверхность. Вы можете задержать свое дыхание на 1 час за раз.  |
|^Инстинкт выживания |^Вы владеете навыком Выживание. |
|^Когти |^Ваши когти – это природное оружие, которое вы можете использовать, чтобы совершить безоружный удар. Если вы наносите такой удар, вы причиняете рубящий урон, равный 1к4 + ваш модификатор Силы, вместо дробящего урона, обычного для безоружного удара.  |
|^Панцирная защита |^В качестве действия вы можете спрятаться в свой панцирь. Пока вы спрятаны, вы получаете бонус +4 к КД, а также преимущество на спасброски Силы и Телосложения. Пока вы находитесь в панцире, считается что вы лежите ничком, ваша скорость становится равной 0 и не может быть увеличена, у вас также помеха на спасброски Ловкости, вы не можете использовать реакции, а единственным действием, которое вы можете предпринять – использовать бонусное действие, чтобы выбраться из панциря. |
|^Природный доспех |^Из-за вашего панциря и формы тела вы не можете носить доспехи. Однако ваш панцирь обеспечивает достаточную защиту; он даёт вам базовый КД 17 (ваш модификатор Ловкости не влияет на это число). Вы не получаете никакой выгоды от ношения доспехов, но если вы используете щит, то вы можете применять бонус щита как обычно.  |
|^Языки |^Вы можете говорить, читать и писать на Общем и Акван. |

Ваш персонаж тритон обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Тритоны достигают зрелости к 15 годам, и могут дожить до 200 лет. |
|^Мировоззрение |^Тритоны склонны к законно–доброму мировоззрению. Как стражей самых темных морских глубин, их культура склоняет их к порядку и добродетельности. |
|^Размер |^Тритоны немного ниже чем люди, в среднем около 150-160 см в высоту. Ваш размер - Средний.  |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Силы, Телосложения и Харизмы  увеличивается на 1. |
|^Амфибия |^Вы можете дышать и на суше, и под водой, а ваша скорость плавания равна вашей скорости ходьбы. |
|^Ночное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение, и в темноте так, как будто это тусклое освещение. В темноте вы не можете различать цвета, только оттенки серого. |
|^Посланник моря |^Ваш народ особо близок к морским обитателям. Вы можете передавать простые идеи животным, которые могут дышать под водой. Они могут понимать значение ваших слов, хотя у вас нет никакой специальной способности понять их в ответ. |
|^Стражи глубин |^Приспособленность к даже самым экстремальным океанским глубинам дает вам сопротивление урону холодом и вы игнорируете любые негативные эффекты, вызванные глубиной и подводной окружающей средой.  |
|^Управление воздухом и водой |^Как дитя моря, вы можете воззвать к элементальной магии воздуха и воды. Вы можете один раз использовать заклинание //туманное облако//. При достижении 3 уровня вы можете один раз использовать заклинание //порыв ветра//. При достижении 5 уровня, вы также можете использовать //водяная стена//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Харизма. |
|^Языки |^Вы можете говорить, читать и писать на Общем и Первичном языках. |

Ваш персонаж фирболг обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Как у гуманоидов, родственных с феями, у фирболгов большая продолжительность жизни. Фирболги достигают зрелости приблизительно к 30 годам, самые старейшие из них доживали до 500 лет.  |
|^Мировоззрение |^Как народ, который подчиняется циклам природы и рассматривает себя как ее хранители, фирболги обычно нейтрально-добрые. Злые фирболги это редкость и обычно они являются заклятыми врагами остальной части их вида.  |
|^Размер |^Рост фирболгов варьируется между 200 и 240 см, а вес от 100 до 140 кг. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 2, а значение Силы увеличивается на 1. |
|^Магия фирболгов |^Вы можете использовать заклинания //маскировка// и //обнаружение магии//. Использовав одно из этих заклинаний, вы не можете использовать его повторно с помощью этой особенности, пока не завершите короткий или продолжительный отдых. Базовой характеристикой для их использования является Мудрость. Когда вы используете эту версию заклинания //маскировка//, вы можете казаться на 60 см короче, чем обычно, чтобы легче сливаться с людьми и эльфами. |
|^Мощное телосложение |^Вы считаетесь на один размер больше, когда определяется ваша грузоподъемность и вес, который вы можете толкать, тянуть или отрывать от земли, а также при совершении вами [[особых атак|Атака]] и [[Пробегания|Пробегание *]]. Кроме того, вы совершаете проверки и спасброски Силы против немагических эффектов, делающих вас [[схваченным|Схваченный]], [[опутанным|Опутанный]] или [[сбитым с ног|Сбитый с ног / Лежащий ничком]], с преимуществом.  |
|^Незримая поступь |^Бонусным действием, вы можете магически стать невидимыми до начала вашего следующего хода или пока вы не атакуете, не бросите кость урона, или не вынудите кого-то сделать спасбросок. Использовав эту особенность, вы не можете использовать её снова, пока не завершите короткий или продолжительный отдых.  |
|^Язык зверей и листвы |^У вас есть способность к ограниченному общению с животными и растениями. Они могут понимать значение ваших слов, хотя у вас нет никакой специальной способности понять их в ответ. Вы совершаете с преимуществом проверки Харизмы, чтобы повлиять на них.  |
|^Языки |^Вы можете говорить, читать и писать на Общем, Эльфийском и Гигантском языках. |
Ваш персонаж хобгоблин обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Хобгоблины взрослеют с той же скоростью, что и люди, и имеют примерно такую же продолжительность жизни. |
|^Мировоззрение |^Общество хобгоблинов основано на соблюдении жесткого, сурового кодекса. Как таковые, они склоняются к законно злому-мировоззрению. |
|^Размер |^Рост хобгоблинов варьируется между 160 и 185 см, а вес от 70 до 90 кг. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашего Телосложения увеличивается на 2, а значение Интеллекта увеличивается на 1. |
|^Боевая подготовка |^Вы владеете лёгкими доспехами и двумя видами воинского оружия на ваш выбор. |
|^Сохранение лица |^Хобгоблины стараются не показывать слабость перед своими союзниками, из страха потерять свой статус. Если вы провалили бросок атаки, проверку способности или спасбросок, вы можете получить бонус к броску, равный числу союзников, которых вы можете видеть в пределах 6 м от вас (максимум 5). Воспользовавшись этой особенностью, вы не можете использовать её снова, пока не завершите короткий или продолжительный отдых.  |
|^Сумеречное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
|^Языки |^Вы можете говорить, читать и писать на Общем и Гоблинском языках. |
Ваш персонаж чистокровный юань-ти обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Чистокровные юань-ти взрослеют как люди, и имеют такую же продолжительность жизни. |
|^Мировоззрение |^Чистокровные юань-ти лишены эмоций и рассматривают других как инструменты для манипулирования. Их мало заботят законность или хаос, они  обычно нейтрально-злые. |
|^Размер |^Чистокровные юань-ти по росту и телосложению схожи с людьми. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Харизмы увеличивается на 2, а значение Интеллекта увеличивается на 1. |
|^Адаптивное сопротивление |^Когда вы становитесь целью заклинания или магического эффекта, вы можете реакцией попытаться противостоять ему. Вы совершаете спасбросок против этого заклинания или магического эффекта с преимуществом. Вы можете использовать эту особенность количество раз равное вашему модификатору Харизмы. Вы восстанавливаете использования этой особенности после завершения продолжительного отдыха. |
|^Врождённая магия |^Вам известен заговор //ядовитые брызги//. При достижении 3 уровня вы можете один раз использовать заклинание //внушение//. Вы восстанавливаете способность накладывать это заклинание с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для использования этих заклинаний является Харизма. |
|^Змеиная устойчивость |^Вы совершаете с преимуществом спасброски от яда и получаете сопротивление к урону ядом. |
|^Родство со змеями |^Вы можете использовать заклинание //дружба с животными// неограниченное количество раз этим свойством, но только на змей. |
|^Сумеречное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
|^Языки |^Вы можете говорить, читать и писать на Общем, Драконьем и языке Бездны. |
Ваш персонаж шифтер обладает следующими расовыми особенностями.

|!Особенность |!Описание |
|^Возраст |^Шифтер быстро созревают как физически, так и эмоционально, достигая юношеского возраста в 10 лет. Они редко проживают больше 70 лет. |
|^Мировоззрение |^Шифтеры склонны к нейтралитету, уделяя больше внимания собственному выживанию, чем концепции добра и зла. Любовь к личной свободе может подтолкнуть шифтера к хаотичному мировоззрению.  |
|^Размер |^Рост шифтеров колеблется от 145 до 180 см, а вес от 45 до 70 кг. Ваш размер — Средний.  |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Ночное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение, и в темноте так, как будто это тусклое освещение. В темноте вы не можете различать цвета, только оттенки серого. |
|^Обращение  |^Вы можете бонусным действием частично принять более звериный облик. Это превращение длится 1 минуту, пока вы не умрёте, или пока вы не вернётесь к своему обычному облику бонусным действием. Когда вы обращаетесь, вы получаете временные хиты в количестве равном вашему уровню + мод. Телосложения (минимум 1). Вы также получаете дополнительные преимущества в зависимости от вашей подрасы. После использования обращения вы не можете использовать его повторно, пока не завершите короткий или продолжительный отдых.  |
|^Языки |^Вы можете говорить, читать и писать на Общем языке. |

!!!Разновидности
Внутренний зверь формирует каждого шифтера как физически, так и ментально. В мирах D&D встречаются четыре вида шифтеров — быстроногие, длиннозубые, остроглазые и толстошкурые шифтеры. Выберите один из этих видов.

<<tabs "[tag[Разновидности шифтеров]]" " " "$:/state/tab1">>
Ваш персонаж эльф обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Несмотря на то, что физически эльфы взрослеют в том же возрасте, что и люди, их понимание о взрослении выходит за рамки физического развития, и располагается в сфере житейского опыта. Обычно эльф получает статус взрослого и взрослое имя в возрасте 100 лет, и может прожить до 750 лет. |
|^Мировоззрение |^Эльфы любят свободу, разнообразие и самовыражение. Они ценят защиту чужой свободы так же как и своей, и чаще они скорее добры, чем нет. Исключением из этого правила являются дроу. Их изгнание в Подземье сделало их злобными и опасными. |
|^Размер |^Рост эльфов колеблется между 150 и 185 см, у них стройное телосложение. Ваш размер — Средний. |
|^Скорость |^Ваша базовая скорость перемещения — 6 метров. |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 2. |
|^Владение эльфийским оружием |^Вы владеете простым клинковым оружием, а также экзотическим "эльфийским" оружием, если владеете воинским оружием того же вида. |
|^Наследие фей |^Вы совершаете с преимуществом спасброски от очарования, и вас невозможно магически усыпить. |
|^Обострённые чувства |^Вы владеете навыком Внимательность. |
|^Сумеречное зрение |^Привыкнув к сумраку леса и ночному небу, вы отлично видите в условиях слабого освещения. На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
|^Транс |^Эльфы не спят. Вместо этого они погружаются в глубокую медитацию, находясь в полубессознательном состоянии до 4 часов в сутки (обычно такую медитацию называют трансом). Во время этой медитации вы можете грезить о разных вещах. Некоторые из этих грёз являются ментальными упражнениями, выработанными за годы тренировок. После такого отдыха вы получаете все преимущества, которые получает человек после 8 часов сна. |
|^Языки |^Вы можете говорить, читать и писать на Общем и Эльфийском языках. |


!!!Разновидности
Семь основных видов эльфов населяют миры D&D: бледные эльфы, высшие эльфы, лесные эльфы, морские эльфы, тёмные эльфы (которых обычно называют дроу), шадар-каи и эладрины. Выберите один из этих видов.

<<tabs "[tag[Разновидности эльфов]]" " "$:/state/tab1">>
Особые инструменты помогают делать что-то, что без них сделать нельзя, например, подделывать документы и вскрывать замки.

<<tabs "[tag[Особые инструменты]nsort[]]" "Воровские инструменты" "$:/state/tab1" "tc-vertical">>
Во время своих приключений вы можете наткнуться на и получить возможность использовать или создать экипировку из перечисленных в Базе Данных [[особых материалов|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=1830162596]].
Остроглазые шифтеры сообразительны и проницательны. Они постоянно начеку, настороженно ожидая возможные угрозы. Некоторые из них предпочитают доверять собственной интуции, не меньше чем прочим органам чувств. Остроглазые шифтеры - отличные охотники, а также они, как правило, становятся духовными лидерами сообществ шифтеров.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 2, а значение Ловкости увеличивается на 1. |
|^Ищейка |^Вы владеете навыком Выживание. |
|^Особенность обращения |^Пока вы обращены, вы совершаете все проверки Мудрости с преимуществом. Кроме того, ни одно существо в пределах 6 м от вас не может получить преимущество на бросок атаки, нацеленной на вас, пока вы дееспособны. |
Даже опытным приключенцам необходим отдых, чтобы перевести дыхание между сражениями, обработать раны и подготовиться к грядущим опасностям. Вы можете брать три [[передышки|Передышка]] и один [[короткий отдых|Короткий отдых]] в течении дня и [[ночлег |Ночлег и лагерь]] в конце каждого дня. 

//Успешное завершение ночлега предоставляет вам те же преимущества, что и// [[короткий отдых|Короткий отдых]].

Вы также можете провести неделю [[продолжительного отдыха|Продолжительный отдых]] в безопасном месте.
* Вы совершаете броски атаки и проверки характеристик с помехой.
Когда по вам попадает рукопашная атака, вы можете реакцией отступить на 1 м от атакующего существа и уменьшить полученный урон на 1к6 (минимум 1). Это перемещение не провоцирует атаку от этого существа, не должно тратить дополнительную скорость (труднопроходимая местность, карабканье, ползание и т.п.), а ваша скорость должна быть выше 0. 
Если вы совершаете действие Отход, то до конца текущего хода ваше перемещение не провоцирует атаки.
Вы значительную часть своей жизни прожили в уединении — либо в закрытой общине, такой как монастырь, либо вообще в одиночестве. Вдали от шумного общества вы нашли тишину, спокойствие, а возможно, и ответы на важные вопросы.

* ''Владение навыками:'' Медицина, Религия
* ''Владение инструментами:'' [[Набор травника|Набор травника]]
* ''Языки:'' Один на ваш выбор
* ''Экипировка:'' Контейнер для свитков, битком набитый вашими молитвами и изысканиями, тёплое одеяло, комплект одежды селянина, набор травника, 5 см

!!!Жизнь в уединении
Почему вы жили в изоляции, и из-за чего вы прервали своё уединение? Придумайте вместе с Мастером точную природу вашего уединения, либо определите её по таблице, случайным образом.

| !к8 |!Жизнь в уединении |
|  1  |Я искал духовное просветление. |
|  2  |Я жил в общине согласно предписаниям моей веры. |
|  3  |Я был изгнан за преступление, которого не совершал. |
|  4  |Я покинул общество после события, изменившего мою жизнь. |
|  5  |Мне нужно было тихое место для работы над картиной, книгой, музыкой или манифестом. |
|  6  |Мне нужна была община, близкая к природе, вдали от цивилизации. |
|  7  |Я был смотрителем древних руин или реликвии.  |
|  8  |Я был пилигримом, ищущим существо, место или реликвию. |


!!!Умение: Откровение
Тихое уединение в долгом отшельничестве дало вам доступ к великому откровению. Точная природа этого откровения зависит от характера вашего уединения. Это может быть истина о вселенной, божествах, влиятельных созданиях на внешних планах, или силах природы. Это может быть место, которое никто и никогда не видел. Вы могли обнаружить что-то, что давно было забыто, или найти реликвию прошлого, способную переписать историю. Это может быть информация, которая может причинить вред тем, кто изгнал вас, и тем самым ставшая причиной возвращения в общество.

Придумайте вместе с Мастером детали вашего откровения и его влияние на кампанию.

!!!Другие отшельники
Эта предыстория подразумевает созерцательное уединение в учениях и молитве. Если вы хотите играть жителем суровой дикой местности, избегающим других существ, попробуйте взять предысторию чужеземца. С другой стороны, если вам нужна более религиозная направленность, можете взять предысторию прислужника. Вы можете даже быть шарлатаном, выдающим себя за мудреца и святого, и дурачащим набожных глупцов.

!!!Персонализация
Некоторым отшельникам комфортно живётся в уединении, а другие жаждут вернуться в общество. Как бы вы ни относились к одиночеству, такая жизнь повлияла на вашу жизненную позицию и идеалы. Некоторые даже сходят с ума от долгих лет вдали от общества.

| !к8 |!Черта характера |
| 1 |Я так много прожил в изоляции, что редко говорю, предпочитая жесты и редкое мычание. |
| 2 |Я абсолютно безмятежен, даже в самых ужасных ситуациях. |
| 3 |У лидера моей общины были высказывания для любой ситуации, и я стремлюсь поделиться этой мудростью. |
| 4 |Я ужасно сопереживаю всем, кто страдает. |
| 5 |Мне чужд этикет и общественные ожидания. |
| 6 |Я связываю всё, что происходит со мной, с грандиозным замыслом космического масштаба. |
| 7 |Я часто погружаюсь в свои мысли, отвлекаясь от окружения. |
| 8 |Я работаю над великой философской теорией и люблю тех, кто разделяет мои идеи. |

| !к6 |!Идеал |
| 1 |''Всеобщее благо.'' Мои дары предназначены для всех, я не должен использовать их в одиночку. |
| 2 |''Логика.'' Эмоции не должны затмевать наше видение того, что истинно и справедливо, а также наше логическое мышление. |
| 3 |''Свободомыслие.'' Изыскания и любопытство — столпы прогресса. |
| 4 |''Сила.'' Уединение и созерцание — путь к мистической и магической силе. |
| 5 |''Сам живи и другим не мешай.'' Вмешиваясь в дела других, причиняешь одни лишь проблемы. |
| 6 |''Самопознание.'' Познаешь себя — познаешь всё вокруг. |

| !к6 |!Привязанность |
| 1 |Самое важное для меня — это другие отшельники, жившие рядом, или мой орден. |
| 2 |Я уединился, чтобы спрятаться от тех, кто мог охотиться за мной. Когда-нибудь я сам брошу им вызов. |
| 3 |Я всё ещё ищу просветление, которого не достиг в уединении, но оно по-прежнему ускользает от меня. |
| 4 |Я уединился, потому что влюбился в ту, с кем мне не суждено жить. |
| 5 |Если моё откровение сбудется, мир будет обречён на гибель. |
| 6 |Моя изоляция позволила познать великое зло, уничтожить которое могу один лишь я. |

| !к6 |!Слабость |
| 1 |Теперь, вернувшись в мир, я слишком сильно увлекаюсь его радостями. |
| 2 |Я скрываю тёмные, кровожадные мысли, не ушедшие ни после изоляции, ни после медитаций. |
| 3 |Я категоричен в мыслях и подходе к жизни. |
| 4 |Я позволяю жажде победить в споре становиться сильнее дружбы и гармонии. |
| 5 |Я слишком сильно рискую, стремясь найти утраченные частички знаний. |
| 6 |Мне нравится хранить тайны, и я ими ни с кем не делюсь. |
[img [https://i.imgur.com/lYaBvye.png]]
* Вы не можете атаковать того, кто вас очаровал, а также делать его целью умения или эффекта, причиняющего вред.
* Существо, очаровавшее вас, совершает с преимуществом все проверки характеристик при социальном взаимодействии с вами.
Очки героя позволяют вам получать разнообразные преимущества за хороший отыгрыш особенностей личности вашего персонажа.

Вы можете ''Заявить о неудаче'', чтобы получить Очко героя. Для этого вы должны озвучить своё намерение Мастеру и дать помеху на свой бросок атаки, спасбросок или проверку характеристик (у броска не должно быть помех от других источников), основанные на ваших особенностях личности (чертах характера, идеалах, привязанностях, слабостях и т.п.), либо принять решение, создающее для вас нежелательное препятствие.

Например: //"Я легко отвлекаюсь на блестящие предметы, поэтому мой взгляд прикован к груде сокровищ. Могу ли я Заявить о неудаче и получить помеху на спасбросок против огненного дыхания дракона?"// или //"Этот парень хочет помочь нам, но я не доверяю всем незнакомцам. Я собираюсь грубо отказать ему. Могу ли я Заявить о неудаче?"//

Вы не можете иметь больше 3 очков героя одновременно, и можете использовать их следующим образом:

* //''Героическое вдохновение.''// Вы можете бросить 1к6 добавить и добавить выпавшее число к своему броску атаки, спасброску или проверке характеристики. Вы можете принять решение об использовании очка героя после объявления результата броска к20. Вы не можете тратить больше одного очка героя на один бросок.
* //''"Даже не почувствовал!"''// Пока вы дееспособны, вы можете в свой ход потратить одну Кость Хитов, чтобы восстановить хиты. Совершите бросок кости, добавьте модификатор Телосложения и восстановите хиты в количестве, равном полученному значению (минимум 1).
* //''"Есть ещё порох!"''// Вы можете восстановить одно использование умения, которое обычно восстанавливается на коротком отдыхе.
* //''"Есть у меня одна вещица!"''// Вы можете с позволения Мастера добавить в свой инвентарь один предмет из списка снаряжения не дороже 25 см и не тяжелее 5 кг, уплатив указанную цену.
* //''"Погоди, костлявая!"''// Вы можете один раз перебросить третий проваленный спасбросок от смерти.
* //''"Слыхал я о таких!"''// Вы можете узнать у Мастера полезный факт об интересующем вас представителе Бестиария.
* //''"Я тут кое-кого знаю!"''// Вы можете узнать у Мастера расположение NPC, который может обладать важной для вас информацией или предоставить необходимую услугу.







* Вы [[недееспособны|Недееспособный]].
* Вы не способны перемещаться и говорите, запинаясь.
* Вы автоматически проваливаете спасброски Силы и Ловкости.
* Броски атаки по вам совершаются с преимуществом.
[img width=330 class="centerme" [https://i.imgur.com/b5sStCB.png]]

Аасимар, которого коснулись силы тьмы в юности или который обратился ко злу уже будучи взрослым, может стать одним из павших – группы аасимаров, внутрен- ний свет которых заменила тень. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Силы увеличивается на 1. |
|^Саван смерти |^Начиная с 3 уровня, Вы можете действием высвободить божественную энергию внутри себя, заставляя ваши глаза превратиться в бездну тьмы, а два призрачных, не способных взлететь скелета крыльев вырасти у вас за спиной. В момент вашего превращения, другие существа в пределах 2 м, которые могут вас видеть, должны преуспеть в Спасброске Харизмы (Сл 8 + Ваш бонус мастерства + Ваш модификатор Харизмы) или станут испуганным вами до конца вашего следующего хода. Ваше превращение длится 1 минуту или пока вы не закончите его бонусным действием. Во время превращения раз в ход вы можете нанести дополнительный некротический урон одной цели, когда вы наносите ей урон атакой или заклинанием. Дополнительный некротический урон равен вашему уровню. Использовав эту особенность, Вы не можете использовать её снова, пока не завершите продолжительный отдых.  |
Падение с большой высоты – это значительный риск для искателей приключений и их врагов. 

Когда вы падаете с большой высоты, то вы немедленно падаете на 150 м в этот ход. Если в следующий ход вы всё ещё падаете, то вы снова падаете на 150 м до конца хода. Это продолжается до тех пор, пока падение не завершится либо из-за того, что вы ударились оземь, либо потому, что падение прекратилось по иным причинам. 

В конце падения вы получаете 1к6 дробящего урона за каждые 2 м падения до максимума в 100к6. Вы также приземляетесь сбитым с ног, если только не смогли как-то избежать урона от падения. 

Если вы падаете в воду, снег или другую относительно мягкую субстанцию, прежде чем рассчитывать урон от падения, вычтете 4 м из высоты падения (или 6 м, если вы намеренно нырнули).

---

!!!Летающие существа и падение 

Летающие существа падают во время полёта, если они сбиты с ног, если их скорость падает до 0 м или если они иным способом теряют возможность двигаться, за исключением случаев, когда они могут парить или удерживаются на высоте за счёт магии, как, например, при заклинании //полёт//. 

Если летающее существо начинает любой свой следующий ход, всё ещё падая, и оно сбито с ног, оно может прекратить падение, потратив половину своей скорости полёта на то, чтобы окончить состояние сбитый с ног (как будто оно встало в воздухе). 

---

!!!Падение на существо
Когда одно существо падает в пространство, занимаемое другим существом, и ни одно из них не меньше Маленького, второе существо должно преуспеть в спасброске Ловкости Сл 15, иначе попадёт под удар падающего существа. В результате такого столкновения урон от падения разделяется поровну между обоими существами, а существо, попавшее под удар, [[сбивается с ног|Сбитый с ног / Лежащий ничком]], если оно не превышает размерами падающее существо как минимум на две категории.
//Стоимость перемещения:// 0 м.

Падение накладывает состояние [[Лежащий ничком|Сбитый с ног / Лежащий ничком]].

Для перемещения в положении лёжа нужно или ползти, или использовать магию, такую как телепортация.

[img width=460 class="centerme" [https://i.imgur.com/Ldm21On.png]]

<<tabs "[[Описание паладинов]] [[Классовые умения паладинов]] [[Священные клятвы]]" "" "$:/state/tab1">>
* Вы [[недееспособны|Недееспособный]].
* Вы не способны перемещаться и говорить.
* Вы автоматически проваливаете спасброски Силы и Ловкости.
* Вы не добавляете модификатор Ловкости и бонус от щита к своему КД.
* Броски атаки по вам совершаются с преимуществом.
* Любая атака, попавшая по вам, считается критическим попаданием, если нападающий находится в пределах 1 м от вас.
Вы можете действием оказать первую помощь ''умирающему'' существу, потратив одно использование //комплекта целителя// или //саквояжа хирурга//. Совершите проверку Мудрости (Медицина) со Сл 10, при успехе цель ''стабилизирована''. Если вы используете подручные средства вместо надлежащих инструментов, совершите проверку с помехой.

''Стабилизированное'' существо перестает быть ''умирающим'', но становится ''бессознательным'', пока не восстановит хотя бы 1 хит. Получив урон, существо снова становится ''умирающим''. ''Стабилизированное'' существо, не получившее лечения, восстанавливает 1 хит после 1к4 часов.
[img width=360 class="centerme" [https://i.imgur.com/pqzG39V.png]]

<<tabs "[tag[Перевёртыш - описание]]" "" "$:/state/tab1">>
<div class="tc-table-of-contents">
<<toc-selective-expandable "Передвижение">>
</div>
Передышка - это 5-минутный перерыв от напряженной активности. Вы не можете получить преимущества более чем от 3 передышек в сутки. Во время передышки вы можете:

* Потратить одну Кость Хитов.
* Утолить жажду и/или голод.
* Облегчить действие яда или излечить болезнь набором травника.
В бою персонажи и чудовища постоянно двигаются, используя перемещение и позиционирование для получения превосходства. 

Вы можете в свой ход переместиться на расстояние, не превышающее вашу скорость, используя приведённые здесь правила. 

Ваше перемещение может включать прыжки, лазание и плавание. Эти разные режимы перемещения можно объединять с ходьбой, либо всё перемещение может состоять из них. Как бы вы ни перемещались, вы вычитаете расстояние всех частей перемещения из скорости, пока не закончите перемещаться. 

---

!!!Особые виды перемещения

<<tabs "[tag[Особые виды перемещения]nsort[]]" "" "$:/state/tab1" "tc-vertical">>

---

!!!Прерывание перемещения
Вы можете прерывать перемещение в свой ход, совершая что-то между двумя перемещениями. Например, если у вас скорость 6 м, вы можете переместиться на 2 м, совершить действие, а затем переместиться на 4 м. 

Если вы совершаете действие, включающее более одной атаки оружием, вы можете дополнительно прерывать перемещение этими атаками.

---

!!!Использование разных скоростей
Если у вас есть несколько скоростей, например, скорость ходьбы и скорость полёта, вы можете переключаться между ними во время перемещения. При каждом переключении вычитайте уже пройдённое расстояние из новой скорости. Разница покажет, на сколько ещё вы можете переместиться. Если результат равен 0 или меньше, вы не можете использовать эту новую скорость во время текущего перемещения. 

Например, если у вас есть скорость ходьбы 6 м и скорость полёта 12 м за счёт заклинания //полёт//, вы можете пролететь 4 м, потом пройти 6 - 4 = 2 м, Затем вновь подняться в воздух и пролететь ещё 12 - 4 - 2 = 6  м. 

---

!!!Перемещение по сетке
''Клетки''. Каждая клетка поля изображает площадь 1 × 1 м. 

''Вход в клетку''. Для того, чтобы войти в клетку, вы должны потратить как минимум 1 м перемещения. Если клетка стоит дополнительного перемещения, например, из-за труднопроходимой местности, у вас должно хватать перемещения, чтобы войти в эту клетку. 

''Диагонали''. При подсчете расстояния или перемещения по диагонали каждая вторая диагональная клетка считается за 2 м.

''Углы''. Диагональное перемещение не может пересекать углы стен, больших деревьев и прочих особенностей местности, заполняющих всю свою клетку. 

''Расстояния''. Для определения на сетке расстояния между двумя существами или предметами начните подсчёт с клетки, смежной с одним из них и считайте кратчайшим маршрутом до клетки, в которой находится другой, включительно. 

---

!!!Перемещение и другие существа
Вы можете проходить сквозь пространство невраждебных существ. Сквозь пространство враждебного существа можно пройти только если его размер как минимум на две категории больше или меньше вашего. Помните, что пространство других существ является для вас труднопроходимой местностью. 

Вне зависимости от того, дружественное существо или нет, вы не можете добровольно закончить перемещение в его пространстве. 

Если вы во время перемещения покидаете досягаемость враждебного существа, вы, как обычно, провоцируете атаку. 
//Стоимость перемещения:// +1 м за 1 м.

Это правило действует даже если на одно и то же место действуют сразу несколько эффектов, делающих его труднопроходимым, таких как подлесок, крутые ступени, снег или мелкое болото. 

Пространство другого существа, как враждебного, так и нет, тоже считается труднопроходимой местностью. 
Когда видимое вами существо попадает атакой по цели, которая находится в пределах 1 м от вас, вы можете реакцией уменшить количество урона, получаемого целью, на 1к10 + ваш бонус мастерства. Вы должны держать щит или рукопашное оружие, чтобы использовать эту реакцию.
[img [https://i.imgur.com/lYaBvye.png]]
Скорость плавания большинства персонажей равна половине их скорости ходьбы (округление вниз). 

Без помощи магии персонажи не могут плыть по 10 часов в день. После каждого часа плавания персонаж должен преуспеть в проверке Телосложения (Выносливость) со Сл 10 + 1 за каждый час плавания, иначе получит одну степень [[истощения|Истощённый]]. 

Перемещение в неспокойных водах (бурные течения, штормовые волны и т.п.) требует успешной проверки Силы (Атлетика), кроме тех случаев когда у персонажа есть врождённая или магическая скорость плавания. Ношение средних или тяжёлых доспехов накладывает помеху на проверки, связанные с плаванием.

Существо, обладающее скоростью плавания может без штрафов плыть весь день, используя обычные правила [[путешествия|Путешествие]]. Плавание глубоко под водой подобно путешествию на большой высоте, из-за большого давле- ния и низкой температуры. Для существа без скорости плавания, каждый час плавания на глубине более 30 метров считается за 2 часа при определении истощения. Плавание на глубине более 100 м считается за 4 часа.


Если персонаж проваливает три проверки плавания подряд, он начинает захлёбываться и тонуть. См. [[Удушье|Удушье]].

!!!Видимость под водой
Видимость под водой зависит от чистоты воды и освещения. Если у персонажей нет источника света, используйте таблицу ниже для определения дальности видимости.

|!Условия | !Дальность видимости |
|Прозрачная вода, яркий свет | 12 м |
|Прозрачная вода, тусклый свет | 6 м |
|Мутная вода или свет отсутствует | 2 м |

[img width=385 class="centerme" [https://i.imgur.com/OAmSfoB.png]]

<<tabs "[[Описание плутов]] [[Классовые умения плутов]] [[Архетипы плута]]" "" "$:/state/tab1">>


Ваша раса, класс и черты дают владение конкретными видами и целыми категориями оружия. Категорий три:

//''Простое оружие.''// Простым оружием могут пользоваться многие. В это оружие входят дубинки, булавы и прочее оружие, доступное обывателям. 

//''Воинское оружие.''// Воинское оружие включает мечи, боевые топоры и другое оружие, требующее для эффективного использования особых тренировок. Многие воители используют воинское оружие, потому что оно позволяет максимально использовать их стиль и обучение.

//''Экзотическое оружие.''// Экзотическое оружие встречается редко, как и мастера, им владеющие. Такое оружие не всегда лучше простого или воинского, но, при этом, требует углубленного изучения техник обращения с ним. Вы можете получить владение таким оружием от вашей расы (например, дварфы владеют всем "дварфским" экзотическим оружием), либо приобретя его за очки навыков.

---

Все персонажи владеют безоружными ударами и любым природным оружием, которое они получают от своей расы.

Владение оружием позволяет вам добавлять бонус мастерства к броскам атаки всех атак, совершённых этим оружием, а также предоставляет уникальные свойства для определенных категорий оружия ([[см. оружие по принципу действия|По принципу действия]])
//''Древковое оружие.''// Оружие, характеризующееся наличием протяженной рукояти (древка). Копья, алебарды, посохи. 

Владение древковым оружием позволяет совершать провоцированную атаку этим оружием по существу, входящему в пределы вашей досягаемости.

---

//''Дробящее оружие.''// Оружие, бьющая часть которого жестко закреплена на рукояти и предназначена для поражения мягких тканей и дробления костей в бою. Дубинки, булавы, молоты. 

Владение дробящим оружием позволяет совершать бросок по таблице ранений с преимуществом при нанесении ранения критическим ударом этим оружием.

---

//''Клинковое оружие.''// Оружие, имеющее боевую часть в виде клинка, прочно и неподвижно соединённого с рукоятью. Ножи, кинжалы, мечи.

Владение клинковым оружием позволяет бонусным действием совершить одну рукопашную атаку этим оружием, если вы в этом ходу совершили действие Уклонение. Эта атака совершается с помехой.

---

//''Контактное оружие.''// Оружие, предназначенное для сражения на особо близкой дистанции и концентрирующее силу удара кулаком на небольшой площади. Кастеты, щиты.

Все контактное оружие обладает свойством "закреплённое".

Владение контактным оружием позволяет считать занятую им руку свободной для совершения других действий, но атаки другим оружием и прочие действия, требующие точности, этой рукой совершаются с помехой.

---

//''Метательное оружие.''// Оружие дальнего боя сбалансированное для совершения точных бросков. Дротики, метательные ножи и топоры.

Рукопашные атаки, совершаемые метательным оружием, считаются импровизированными.

Владение метательным оруием позволяет извлечь другое оружие частью атаки этим оружием.

---

//''Стрелковое оружие.''// Оружие дальнего боя, предназначенное для стрельбы стрелами, болтами, иглами, пулями и прочими боеприпасами.

Для совершения дальнобойной атаки стрелковым оружием необходимы боеприпасы. Вынимается боеприпас из колчана или другого контейнера частью атаки. В конце сражения вы восстанавливаете половину использованных боеприпасов, потратив минуту на поиски на поле боя.

Атакуя стрелковым оружием, вы используете модификатор Ловкости при совершении бросков атаки и урона (за исключением оружия со свойством «''механическое''»).

Рукопашные атаки стрелковым оружием считаются импровизированными.

Атаки одноручным стрелковым оружием совершаются с помехой, для перезарядки лёгкого и одноручного стрелкового оружия все еще нужна вторая рука.

Владение стрелковым оружием позволяет вам в начале своего хода, если ваша скорость не равна нулю, снизить её до нуля и получить преимущество на первую в этот ход дальнобойную атаку этим оружием.

---

//''Топоры.''// Рубящее оружие обычно представленное в виде тонкого и лёгкого лезвия на коротком древке. Топоры и топоры побольше.

Все топоры обладают свойством "летальное".

Владение топорами позволяет бонусным действием совершить особую атаку Толкание против существа, по которому вы в этом ходу попали рукопашной атакой этим оружием.

---

//''Цепы.''// Ударное оружие на гибкой сцепке в виде верёвки или цепи. Кистени, цепы, гасила.

Все цепы обладают свойством "внезапное".

Владение цепами позволяет вам вместо броска одной из костей урона при критическом попадании брать ее максимальное значение.
Показатель тяжести не говорит о конкретном весе оружия, а указывает на то, является ли оружие (той же размерной категории, что и персонаж владеющий им) лёгким, одноручным или же двуручным.

---

//''Лёгкое оружие.''// Под лёгким понимается оружие обладающие небольшими размерами и весом, что позволяет эффективно использовать его в обеих руках и при тесном контакте с противником. Особенности лёгкого оружия:

* Используется одной рукой. 
* При совершении атаки вы сами выбираете, какой модификатор использовать при совершении бросков атаки и урона - модификатор Силы или Ловкости. Для обоих бросков должен использоваться один и тот же модификатор. Оружие со свойством "''грубое''" или "''стрелковое''" не подчиняется этому правилу.
* Атаки, наносимые по схваченным целям, совершаются с преимуществом.
* Вы не добавляете модификатор характеристики к урону от атаки, совершенной неосновной рукой.
* Два лёгких оружия могуть быть извлечены/убраны в ножны частью одного действия, при условии, что задействованы обе руки.

---

//''Одноручное оружие.''// Длина и вес одноручного оружия, как правило, не позволяют наносить точные удары неосновной рукой без особых тренировок. Но рукояти большей части такого оружия позволяют использовать его с двуручным хватом для нанесения сокрушительных атак. Особенности одноручного оружия:

* Используется одной или, иногда, двумя руками. 
* Если в столбце "Урон" указано значение в скобках, значит этим оружием можно совершать атаки двумя руками. Кость урона при этом изменяется на указанную в скобках. 
* При совершении атаки одной рукой вы сами выбираете, какой модификатор использовать при совершении бросков атаки и урона - модификатор Силы или Ловкости. Для обоих бросков должен использоваться один и тот же модификатор. Атакуя двумя руками, вы используете модификатор Силы при совершении бросков атаки и урона. Стрелковое оружие и оружие со свойством "''грубое''" не подчиняется этому правилу.
* Атаки, наносимые неосновной рукой, совершаются с помехой.
* Вы не добавляете модификатор характеристики к урону от атаки, совершенной неосновной рукой.

---

//''Двуручное оружие.''// Оружие масса и баланс которого не допускает одноручный хват, что компенсируется внушительной длиной и уроном. Особенности двуручного оружия:

* Используется только двумя руками. Атаки таким оружием одной рукой считаются импровизированными.
* При совершении атаки вы используете модификатор Силы при совершении бросков атаки и урона. Стрелковое оружие не подчиняется этому правилу.
* Требует как минимум одну свободную руку для переноса, если не является "стрелковым" (не имеет возможности ношения в ножнах или быть другим образом закреплено на персонаже).
[img[https://i.imgur.com/5Byk9Q1.png]]

!!!Правило 2 минут

* На обсуждение правила / спорного вопроса во время сессии отводится 2 минуты. После этого Мастер принимает решение, а дальнейшее обсуждение откладывается на время между сессиями.
* Во время боевого энкаунтера игроку дается 2 минуты на совершение своего хода.
* Отсутствующем игроку дается 2 минуты на то, чтобы вернуться или сообщить причину и время отсутствия.

!!!Метагейм 

Под метагеймом подразумевается использование в игре того, что относится к игрокам, а не к их персонажам. Обычно речь идет о метаигровой информации.

* Чтение модуля, по которому ведется кампания, является одним из самых страшных нарушений правил.
* Персонаж не должен совершать действия или принимать решения, основываясь на информации, которой он не владеет.
* Персонаж не должен взаимодействовать с другими персонажами или окружающим миром в тайне от других персонажей без ведома Мастера.
*  Игрок не должен давать метаигровую информацию (подсказывать) чужому персонажу, если его персонаж не присутствует в сцене. Этим вы крадете чужой момент и провоцируете другого Игрока на возможный метагейм.
* Спорные вопросы о том, является ли информация метаигровой для персонажа или нет, могут быть решены проверкой Интеллекта. В любом случае, последнее слово остается за Мастером.

Метагейм не всегда плох, вот примеры ситуаций, в которых поощряется использование метаигровой информации:

* метагейм позволяет персонажу отказаться от действий против группы:

//Персонаж Игрока знает, что ему не составит труда обокрасть группу, пока все спят, уйти в закат и жить богато до конца своих дней, но Игрок решает этого не делать, чтобы не портить игру;//

//Игроки знают, что новое знакомство их группы - новый Персонаж Игрока, и позволяют ему вступить в группу;//

* метагейм ускоряет решение игровых вопросов:

//Игрок знает, что его Бросок Атаки достаточно высок, чтобы попасть по противнику и не тратит время на вопрос Мастеру: “24. Я попал?”;//

* метагейм помогает не нарушать темп проведения сессии:

//Игроки знают, что до конца сессии осталось немного времени, и пытаются ускорить события, чтобы не закончить посреди неразрешенной сцены.//

---

!!! [img[3.png]] Первородный спутник
Вы магическим образом призываете первородного зверя, который черпает свою силу из вашей связи с природой. Зверь подчиняется вашим командами и дружелюбен к вам и вашим союзникам. 

Выберите его блок характеристик: Зверь Земли, Зверь Моря или Зверь Неба. Блок характеристик использует ваш бонус мастерства для определения некоторых значений. Вы также определяете вид подходящего к блоку животного, который принимает зверь. Независимо от выбранного вами вида в облике зверя присутствуют первородные отметины, указывающие на его магическое происхождение.

Во время сражения зверь действует в ваш ход. Он может перемещаться и использовать реакции самостоятельно, но действием может совершать только [[Уклонение]], если только вы своим бонусным действием не отдадите ему приказ совершить другое действие. Этим действием может как одно из действий, указанных в блоке характеристик зверя, так и любое другое [[действие|Действия]]. Вы также можете заменить одну из своих атак, совершаемых действием [[Атака|Атака]], командой зверю совершить действие [[Атака]]. Если вы [[недееспособны|Недееспособный]], зверь может совершать любое действие по своему выбору.

Если зверь мёртв не дольше 1 часа, вы можете действием коснуться его и потратить ячейку заклинаний любого уровня. Зверь возвращается к жизни через 1 минуту с максимумом хитов. 

После завершения продолжительного отдыха, вы можете призвать другого зверя. Новый зверь появляется в в незанятом пространстве в пределах 1 м от вас, а вы выбираете его блок характеристик и облик. Если у вас уже есть зверь от этого умения, он исчезает, когда новый зверь появляется. Зверь исчезает при вашей смерти.

---

[img [https://i.imgur.com/lYaBvye.png]]
Для погони требуется преследуемый и как минимум один преследователь. Погоня проводится в виде [[испытания навыков|Испытания навыков]]. Целью преследователей становится накопление определенного количества успешных проверок, до того, как они провалят три из них. Успешные проверки означают, что преследователи сокращают дистанцию до преследуемого. Проваленные проверки означают, что преследователи отстают от преследуемого. Сложность каждой проверки определяется броском преследуемого. Каждый раунд преследуемый совершает свою проверку, после него преследователи совершают свои.


---

!!!Проведение погони
# ''Определите сложность погони. ''Сложность погони выражается в количестве успехов необходимых для поимки преследуемого. Сложность может быть от трёх до пяти и выше.
# ''Определите преимущество и помеху, основываясь на скорости участников. ''Если скорость преследователя ниже скорости преследуемого, преследователь совершает все проверки с помехой. Если выше, то у преследователя есть преимущество. Если скорости равны, проверки совершаются как обычно.
# ''Определите осложнение и подходящую проверку.'' Осложнения могут быть предопределены или выбраны из таблиц.
# ''Определите сложность проверки для преследователя. ''Сложность проверки преследователя определяется результатом проверки преследуемого.
# ''Совершите проверку преследователя. ''Преследователь совершает ту же проверку, против сложности, определенной преследуемым.
# ''Повторяйте до завершения погони. ''Погоня завершается, когда преследователь совершает необходимое количество успешных проверок. Каждый отдельный преследователь покидает погоню, если проваливает три проверки.

---

!!!Заклинания и атаки
Преследователи могут совершать атаки, сотворять заклинания и использовать классовые умения и особенности вместо совершения проверки погони, проверка при этом проваливается. Если эффект останавливает преследуемого, все остальные преследователи автоматически преуспевают в проверке. По усмотрению Мастера уместно примененный эффект, может предоставить союзнику преимущество на проверку или даже автоматический успех.

---

!!!Определение дистанции
Если персонаж хочет использовать требующий касания эффект на союзника, у них должно быть одинаковое количество успехов. Если персонаж хочет использовать дальнобойный эффект на союзника, они должны быть в одном успехе друг от друга. Если преследователь хочет использовать дальнобойный эффект на преследуемого, он должен быть в одном успехе от завершения погони.

---

!!!Сражение
Даже если преследователи настигли преследуемого, это не означает, что все пройдет тихо. Если по завершению погони начинается сражение, все участники совершают проверку инициативы как обычно. Преследователи, которые не набрали необходимое количество успехов вступают в сражение во втором раунде.

---

!!!Осложнения погони
|!к10|!Тип|!Осложнение|
| 1 |Опасность запутывания |Спасбросок Силы |
| 2 |Опасность падения |Спасбросок Ловкости |
| 3 |Затрудненное дыхание |Спасбросок Телосложения |
| 4 |Узкое пространство |Проверка Силы |
| 5 |Неровная поверхность |Проверка Ловкости |
| 6 |Ограждение |Проверка Силы (Атлетика) |
| 7 |Препятствие |Проверка Ловкости (Акробатика) |
| 8 |Открытая местность |Проверка Телосложения (Выносливость) |
| 9 |Короткий путь |Проверка Интеллекта (Анализ) |
| 10 |Плохая видимость |Проверка Мудрости (Внимательность) |



Вы можете можете подготовить свое действие и отложить его, пока не произойдёт определённое событие. Для этого вы совершаете в свой ход действие Подготовка, чтобы реакцией подействовать позже.

Во-первых, определите, какое воспринимаемое событие вызовет вашу реакцию. Затем выберите действие, либо перемещение, которое будет совершено. Примеры: «Если культист наступит на люк, я дёрну рычаг и открою его», «Если передо мной встанет гоблин, я отойду прочь».

Когда срабатывает условие, вы можете либо совершить свою реакцию до окончания действия, вызвавшего срабатывание, либо игнорировать срабатывание условия. Подготовленное действие можно совершить только до начала вашего следующего хода. Помните, что вы можете совершить только одну реакцию в раунд.

Если вы подготовили заклинание, вы накладываете его как обычно, но удерживаете энергию, пока не сработает условие. Для того чтобы заклинание можно было подготовить, у него должно быть время накладывания «1 действие», а удерживание магии требует концентрации. Если концентрация прервана, заклинание тратится без всякого эффекта. Например, если вы концентрируетесь на заклинании //паутина //и подготавливаете //волшебную стрелу//, заклинание //паутина //заканчивается, и если вы получите урон до накладывания //волшебной стрелы// реакцией, ваша концентрация рискует прерваться.
Если вы используете средний или тяжёлый щит, а другое существо попадает по вам атакой или использует против вас эффект, требующий совершения спасброска Ловкости, вы можете реакцией поднять щит, предоставив себе укрытие на половину (+2 к КД и спасброскам Ловкости) от этой атаки или эффекта.
Совершив действие Поиск, вы уделяете внимание поиску чего-то. В зависимости от характера ваших поисков, Мастер может призвать к проверке Мудрости (Внимательность) или Интеллекта (Анализ).
Чтобы приобрести магический предмет, нужно найти людей, желающих его продать, и связаться с ними, а это в свою очередь требует времени и денег. И даже в этом случае нет гарантии, что у продавца есть нужный персонажу предмет. 

''//Ресурсы//''. Поиск магических предметов занимает минимум одну неделю и требует минимум 100 см на расходы. Увеличение затрат времени и серебра повышает шанс найти более редкий предмет. 

''//Определение результата//''. Персонаж, который хочет купить магический предмет, должен совершить проверку Харизмы (Убеждение), чтобы определить статус найденного продавца. Персонаж получает бонус к проверке +1 за каждую потраченную неделю после первой, и +1 за каждые дополнительно потраченные 100 см, вплоть до максимального значения бонуса +10. Потраченные деньги включают в себя цену богатого образа жизни, поскольку покупатель должен произвести впечатление на потенциальных деловых партнёров. 

По таблице «Покупка магических предметов», исходя из результата проверки, Мастер решает, какая из таблиц, приведённых в //Руководстве Мастера// будет определять предметы в наличии.  Мастер можете применить штраф -10 для слабомагической кампании или бонус +10 для сильномагической кампании и удвоить стоимость магических предметов, если кампании слабомагическая. 

Цена доступных предемтов определяется согласно документу [[Sane Magical Prices|https://drive.google.com/file/d/1HfQXzt7rorLpuNIWbEuTV0TEs_P5KQhD/view?usp=sharing]].

Решающее слово в вопросах ассортимента имеющихся в продаже предметов и их конечной стоимости остаётся за Мастером. Если персонажи ищут конкретный магический предмет, Мастер может включить этот предмет в список предметов на продажу при результате броска 10 или выше – если предмет обычный, 15 или выше – если необычный, 20 или выше – если редкий, 25 или выше – если очень редкий, и 30 или выше – если легендарный. 

| !Результат |!Предметы в наличии |
| 1-5 |Совершите 1к6 бросков по таблице А магических предметов. |
| 6-10 |Совершите 1к4 бросков по таблице B магических предметов. |
| 11-15 |Совершите 1к4 бросков по таблице C магических предметов. |
| 16-20  |Совершите 1к4 бросков по таблице D магических предметов. |
| 21-25 |Совершите 1к4 бросков по таблице E магических предметов. |
| 26-30 |Совершите 1к4 бросков по таблице F магических предметов. |
| 31-35 |Совершите 1к4 бросков по таблице G магических предметов. |
| 36-40 |Совершите 1к4 бросков по таблице H магических предметов. |
| 41+ |Совершите 1к4 бросков по таблице I магических предметов. |

//''Осложнения''//. Торговля магическими предметами – дело опасное. Сила предметов и доход с их продажи притягивают воров, мошенников и других злодеев. Согласно правилам, персонаж может получить осложнение с вероятностью 10% после каждой покупки. 

| !к12 |!Осложнение |
| 1 |Предмет — подделка, подкинутая недоброжелателем. |
| 2 |Предмет украден врагами группы. |
| 3 |Предмет проклят богом. |
| 4 |Первоначальный владелец предмета готов убить, чтобы вернуть его, а противники группы распространяют новости о его продаже. |
| 5 |Предмет является ключевым элементом тёмного пророчества. |
| 6 |Перед сделкой продавец был убит. |
| 7 |Продавец – это дьявол, желающий заключить сделку. |
| 8 |Предмет служит ключом к освобождению злой сущности. |
| 9 |Третья сторона также хочет купить предмет и готова заплатить двойную стоимость. |
| 10 |Предмет является порабощённым разумным существом. |
| 11 |Предмет связан с культом. |
| 12 |Враги группы распространяют слухи о том, что предмет – артефакт злых сил. |
//Стоимость перемещения:// 2 м за 1 м.

Во время ползания вы [[лежите ничком|Сбитый с ног / Лежащий ничком]].
[img width=310 class="centerme" [https://i.imgur.com/QO1UOuN.png]]

Полудварфы разделяют особенности характерные как для дварфов, так и для людей.

|!Особенность |!Описание |
|^Возраст |^Полудварфы живут дольше, чем обычные люди, и могут дожить до 200 лет. |
|^Увеличение характеристик |^Значение вашего Телосложения увеличивается на 2. |
|^Дварфская выносливость |^Вы владеете навыком Выносливость. |
|^Дварфская устойчивость |^Вы совершаете с преимуществом спасброски от яда и получаете сопротивление к урону ядом. |
|^Дварфское оружие |^Вы владеете простым дробящим оружием и топорами, а также экзотическим "дварфским" оружием, если владеете воинским оружием того же вида. |
|^Прирождённый ремесленник |^Вы владеете одним видом ремесленных инструментов на ваш выбор. |
|^Сумеречное зрение |^Благодаря дварфской крови вы отлично видите в условиях слабого освещения. На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
Полудварфы редки и почти всегда несут в себе кровь холмовых дварфов: закрытые сообщества горных дварфов мало взаимодействуют с людьми, а дуэргары и вовсе их практически никогда не встречают.

---

!!!Дварфские традиции
Полудварфы часто наследуют лучшие особенности обоих своих родителей. Подобно дварфам, они обладают развитым чувством справедливости и непоколебимой лояльностью. Хоть они и не являются полноценными членами клана своего родителя, полудварфы сделают всё, чтобы не опозорить его (ещё больше). 

Когда клан вынужден разобраться с нечистыми делами, эту работу обычно взваливают на полудварфов, чтобы возможные последствия не повредили клану. Полудварфы редко отказываются от подобных заданий, чтобы заслужить одобрение своих дварфских родственников. Семья и клан для них ценнее чем что-либо другое, а учитывая их частично человеческое происхождение, им приходится работать за двоих, чтобы заслужить себе клановое имя.

---

!!!Человеческое новаторство
Человеческая часть полудварфов одарила их тягой к новшествам и самореализации. Они обладают куда более развитой индивидуальностью, чем их дварфские родственники. Занимаясь дварфским ремеслом они не бояться радикально улучшать его, перенбрегая традициями своих мастеров.

Хотя большинство людей не признает этого, полудварфы часто оказываются лучшими в своей области дейстельности. Будь то кузнечное или ювелирное дело, пивоварение или сельское хозяйство - от продуктов полудварфов всегда можно ожидать отличного качества. Тем не менее, большинство полудварфов никогда не принимают в дварфские гильдии.

---

!!!Имена полудварфов
Полудварфам обычно дают дварфские имена, но, вместо кланового имени, они берут либо фамилию своего человеческого родителя, либо вынуждены взять принятую среди дварфских бастардов фамилию Штейн ("камень"). Получение настоящего кланового имения для полудварфа считается величайшей честью.
[img width=260 class="centerme" [https://i.imgur.com/uYPk8yz.png]]

Благодаря орочьему происхождению, ваш персонаж полуорк обладает следующими особенностями.

|!Особенность |!Описание |
|^Возраст |^Полуорки взрослеют немного быстрее обычных людей, достигая зрелости к 14 годам. Стареют они заметно быстрее, и редко живут дольше 75 лет. |
|^Увеличение характеристик |^Значения вашей Силы и Телосложения увеличиваются на 1. |
|^Непоколебимая стойкость |^Если ваши хиты опустились до нуля, но вы при этом не убиты, ваши хиты вместо этого опускаются до 1. Вы не можете использовать эту способность снова, пока не завершите продолжительный отдых. |
|^Свирепые атаки |^Если вы совершили критическое попадание рукопашной атакой оружием, вы можете добавить к урону ещё одну кость урона оружия. |
|^Сумеречное зрение |^Благодаря орочьей крови вы отлично видите в условиях слабого освещения. На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
|^Угрожающий вид |^Вы владеете навыком Запугивание. |
<<<
Вождь Муррен поднялся с мехов , на которых он лежал со своими женщинами, и натянул короткую кольчугу из тяжёлых стальных колец на свой мощный мускулистый торс. Обычно он вставал раньше своих воинов, так как в нём была сильна примесь человеческих кровей, и он лучше переносил дневной свет. У Кровавых Черепов о воине судили по его силе, бесстрашию и уму. Человеческое происхождение - не недостаток для воина, при условии, что он был таким же сильным, выносливым и кровожадным, как его чистокровные собратья. Полуорки, которые были слабее, чем их собратья, недолго прожили бы среди Кровавых Черепов, как и в любом другом орочьем племени. Но часто оказывалось, что человеческая кровь давала воину правильное сочетание хитрости, амбиций и самодисциплины, чтобы добиться многого, как это сделал Муррен. Он был хозяином племени, которое могло насчитать две тысячи копий, и имело сильнейшего вождя в Таре. 

— Ричард Бейкер, //Маг меча //
<<<

Находясь ли под предводительством могучего колдуна, или стараясь установить мир после многолетнего конфликта, орки и племена людей иногда заключали союзы, объединяя силы в огромные орды, терроризирующие более цивилизованные государства по соседству. Когда такие союзы скреплялись узами брака, появлялись полуорки. Некоторые полуорки возвышались, становясь гордыми вождями племён. Их человечья кровь давала им преимущество над их чистокровными соперниками. Другие отправлялись в мир, чтоб доказать своё превосходство над представителями более цивилизованных народов. Многие из них становились искателями приключений, достигая величия благодаря своим могучим свершениям, и дурной славы, благодаря варварским нравам и дикарской ярости.

---

!!!Крепкие и покрытые шрамами
Серый цвет кожи, плоский лоб, выступающая челюсть, торчащие клыки и могучее телосложение не оставляет сомнений в орочьем происхождении для любого, кто смотрит на полуорка. Рост полуорков обычно колеблется между 180 и 215 см, а вес между 80 и 120 кг.

Орки гордятся своими боевыми шрамами, а узоры, составленные из шрамов, украшают их тела. Другие шрамы могут отмечать бывшего раба или изгнанника. Все полуорки, живущие с орками, или поблизости от них, имеют шрамы, следы унижений и поводы для гордости, отмечающие их победы и ранения. Живущие же среди людей полуорки могут как выставлять свои шрамы на обозрение с гордостью, так и со стыдом прятать их.

---

!!!Орочье наследие
Полуорки, хотя их человеческая кровь и снижает воздействие орочьего наследия, не могут полностью избежать его влияния. Некоторые полуорки слышат шёпот в своих снах, взывающий высвободить ярость, что вскипает в них. Полуорки по природе своей не являются злыми, но зло скрывается в них, принимают ли они его или сопротивляются ему.

В ярости полуорки чувствуют сильное возбуждение. Ярость не только ускоряет их пульс, она заставляет их тела пылать. Колкие оскорбления действуют на них как яд, и печаль истощает их силы. Но когда они смеются, то делают это громко и от души, и простые физические наслаждения — пиры, выпивка, борьба, барабанный бой и дикие пляски — наполняют их сердца радостью. Они, как правило, вспыльчивы, иногда угрюмы, более склонны к действию, чем к созерцанию и к борьбе, чем к спору. Наиболее культурными полуорками являются те, у кого достаточно самоконтроля, чтобы проживать в цивилизованных землях.

---

!!!Племена и трущобы
Полуорки наиболее часто живут среди орков. Среди других рас люди наиболее терпимопринимают полуорков, поэтому полуорки, которые не живут среди орков, чаще всего живут среди людей. Заслуживая ли признание среди жестоких варварских племен, или борясь за выживание в трущобах крупных городов, полуорки достигают всего своей физической мощью, выносливостью и решительностью.

---

!!!Неприязненное отношение
Принято считать, что полуорки агрессивны и легко впадают в ярость, так что люди ведут себя осторожно в присутствии незнакомого полуорка. Торговцы могут тайком прятать наиболее ценные или хрупкие товары при появлении полуорка, и люди потихоньку покидают таверны, опасаясь возможной драки.

Каждый полуорк находит способ, как добиться признания тех, кто ненавидит орков. Некоторые из них скрытны, и стараются не привлекать к себе никакого внимания. Некоторые из них демонстрируют благочестие и добросердечность настолько публично, насколько это возможно (независимо от того, насколько искренни эти демонстрации). А некоторые просто стараются быть настолько жестокими, что остальные просто избегают их.

---

!!!Имена полуорков
Полуорки обычно имеют имена, соответствующие культуре, в которой они были выращены. Полуорк, который хочет находиться среди людей, может поменять орочье имя на человеческое. Некоторые полуорки с человеческими именами решают принять гортанное орочье имя, потому что считают, что это сделает их более устрашающими.
[img width=380 class="centerme" [https://i.imgur.com/3cAMg4t.png]]

<<tabs "[tag[Полурослик - описание]]" "Описание полуросликов" "$:/state/tab1">>
[img width=300 class="centerme" [https://i.imgur.com/9TAZR6i.png]]

Ваш персонаж-полуэльф обладает некоторыми качествами, обычными для эльфов, и некоторыми, присущими только полуэльфам.

|!Особенность |!Описание |
|^Возраст |^Полуэльфы живут гораздо дольше обычных людей, часто пересекая рубеж в 180 лет. |
|^Увеличение характеристик |^Значения вашей Харизмы и одной другой характеристики на ваш выбор увеличиваются на 1. |
|^Наследие фей |^Вы совершаете с преимуществом спасброски от очарования, и вас невозможно магически усыпить. |
|^Сумеречное зрение |^Благодаря эльфийской крови вы отлично видите в условиях слабого освещения. На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение. |
|^Универсальность навыков |^Вы получаете владение двумя навыками на ваш выбор. |
|^Эльфийское наследие |^Вы можете говорить, читать и писать на Эльфийском. |


<<<
Флинт щурился , вглядываясь против света. Он увидел человека, шедшего к нему по склону. Поднявшись, Флинт отступил в тень высокой сосны, чтобы свет не так бил в глаза. Походка человека была упругой и лёгкой - на эльфийский лад, подумалось Флинту, - но тело выглядело мускулистым и крепким, - черта не вполне эльфийская. Зелёный капюшон мешал разглядеть лицо. Флинт видел только загорелые щёки и рыжевато-русую бороду, какие у эльфов не растут никогда. При бедре у человека висел меч, а на плече - длинный лук. На нём была одежда из мягкой кожи с тиснёным узором. Узор был эльфийским. Но борода? Погодите-ка... 

— Танис? — окликнул Флинт неуверенно. 

— А кто же ещё! — Бородатая физиономия расплылась в широченной улыбке. Танис сгрёб гнома в охапку, оторвав его от земли. Флинт ответил объятием на объятие, но тут же вспомнил о своём достоинстве и высвободился из рук полуэльфа. 

— Маргарет Уэйс и Трейси Хикмэн, //Драконы осенних сумерек //
<<<

Бродящие по двум мирам, но в действительности, не принадлежащие ни одному из них. Полуэльфы сочетают в себе, как некоторые говорят, лучшие качества обеих рас: человеческие любознательность, изобретательность и амбиции, приправленные изысканными чувствами, любовью к природе и ощущением прекрасного, свойственными эльфам. Некоторые полуэльфы живут среди людей, отгороженные эмоциональными и физическими различиями, наблюдая за старением друзей и возлюбленных, лишь слегка тронутые временем. Другие живут с эльфами в неподвластных времени эльфийских королевствах. Они стремительно растут, и достигают зрелости, пока их сверстники ещё остаются детьми. Многие полуэльфы не способны ужиться ни в одном обществе, и выбирают жизнь одиноких странников или объединяются с другими изгнанниками и неудачниками, чтобы отправиться к приключениям.

---

!!!Меж двух миров
Для людей полуэльфы выглядят эльфами, а для эльфов они люди. Их рост примерно посередине между людьми и эльфами, и составляет от 155 до 180 см. Полуэльфы не такие стройные, как эльфы, но и не такие широкоплечие как люди. Их вес колеблется между 45 и 80 кг, и мужчины лишь немного превосходят женщин в росте и весе. У мужчин полуэльфов на лицах растут волосы, и некоторые отращивают бороды, чтобы скрыть своё эльфийское происхождение. Цвет волос и кожи у них примерно посередине между их людскими и эльфийскими родителями, и таким образом разнообразие даже выше, чем у исходных рас. Цвет глаз они обычно наследуют у эльфийских родителей.

---

!!!Дипломаты или странники
Полуэльфы не имеют собственных государств, но их радушно принимают в людских городах, и чуть менее радушно в эльфийских лесах. В крупных городах, в регионах, где люди и эльфы живут рядом, численность полуэльфов иногда возрастает настолько, что они организовывают свои собственные маленькие коммуны. Они рады обществу других полуэльфов, единственных существ, которые по-настоящему понимают, каково это, жить меж двух миров.

Впрочем, в большей части мира полуэльфы настолько редки, что могут годами не встречаться друг с другом. Некоторые полуэльфы предпочитают вообще избегать компании, и живут на природе как охотники, лесники или искатели приключений, посещая цивилизованные места лишь изредка. Как и эльфы, благодаря своему долголетию они движимы тягой к перемене мест и нигде не остаются подолгу. Другие же наоборот, бросаются в гущу социальной жизни, используя свою харизму и социальные навыки на поприще дипломата или мошенника.

---

!!!Превосходные послы
Несмотря на то, что большинство людей никогда не видели полуэльфа, каждый знает, что они существуют. Появление незнакомого полуэльфа скорее сопровождается перешёптыванием и бросаемыми исподтишка взглядами, чем открытой заинтересованностью или враждебностью.

Многие полуэльфы учатся ещё в раннем возрасте преодолевать враждебность и находить со всеми общий язык. Как раса они обладают эльфийской грацией без эльфийской отчуждённости, и человеческой энергичностью без человеческой грубости. Из них часто выходят превосходные послы и посредники (за исключением переговоров между людьми и эльфами, так как каждая сторона подозревает полуэльфа в приверженности другой).

---

!!!Имена полуэльфов
Полуэльфы используют и человеческие и эльфийские имена. Как бы подчёркивая, что они в действительности не принадлежат ни одному из этих обществ, полуэльфы, выросшие среди людей, получают эльфийские имена, а те, кто вырос среди эльфов, наоборот — берут человеческие.

Вы можете оказать помощь другому существу. Если вы совершаете действие Помощь, существо, которому вы помогаете, совершит свою следующую проверку характеристики для выполнения задачи с преимуществом, если она будет совершена до начала вашего следующего хода.

В качестве альтернативы, вы можете помочь дружественному существу атаковать другое существо, находящееся в пределах 1 м от вас. Вы совершаете финт, отвлекаете цель или каким-то другим образом делаете атаку союзника более эффективной. Если ваш союзник атакует цель до начала вашего следующего хода, первый бросок атаки совершается с преимуществом.
Вы - один из сотен местных рыбаков, которые каждое утро доставляют выловленное на рынки своего портового города. Вы провели бесчисленное количество дней, плавая на веслах в окрестных водах, и знаете их и других рыбаков, рабочих и жителей порта лучше, чем кто-либо другой. Хотя вы оставили ту жизнь позади, вы всё равно время от времени навещаете их.

* ''Владение навыками:'' Атлетика, Ловкость рук
* ''Владение инструментами:'' Один [[игровой набор|Игровой набор]] и [[водный транспорт |Наземный и водный транспорт]]
* ''Снаряжение:'' Комплект для рыбалки, игровой набор, которым вы владеете, комплект одежды селянина, шлюпка и кошель с 5 см 

!!!Умение: Житель порта
Вы выросли в доках и водах родной гавани. Портовые жители помнят вас и до сих пор относятся к вам как к одному из них. Они рады вам и вашим спутникам. Хотя они могут взять с вас плату, они всегда предложат еду и кров, которые у них есть; они даже спрячут вас, если за вами охотится городская стража.

!!!Персонализация

| !к8 |!Черта характера |
| 1 |Я любопытен. Я хочу знать, почему все происходит так, как происходит, и почему люди делают то, что они делают. |
| 2 |Я не умею петь, но это никогда не мешает мне делать это громко. Все любят хорошие морские песни! |
| 3 |Я думаю, что местное правительство делает потрясающую работу, а вы? |
| 4 |Я очень рад, что местная церковь, восстанавливается. Я ревностно поклоняюсь этому божеству. |
| 5 |Я очень суеверен. Я вижу предзнаменования в повседневных событиях. |
| 6 |Я ненавижу богачей и люблю срывать их планы и портить им удовольствие по мелочам. |
| 7 |У меня есть морская история на все случаи жизни. |
| 8 |Я рыбак, но втайне ненавижу есть рыбу. Я сделаю все, чтобы избежать этого. |

| !к6 |!Идеал |
| 1 |''Спокойствие. ''Для всех вещей существует прилив и отлив. Я отправляюсь в плавание, когда нужно, и чиню свои сети, когда нет. |
| 2 |''Ветренность.'' Я плыву туда, куда дуют ветры. Никто не указывают мне, куда и когда плыть. |
| 3 |''Стремление.'' Я добьюсь благосклонности вышестоящего покровителя! |
| 4 |''Непроистойность. ''Я хочу, чтобы люди смотрели на меня как на эксперта по местным борделям. |
| 5 |''Самоотверженность.'' Мы все дети моря. Я помогаю всем, кто находится в опасности на плаву и на берегу.  |
| 6 |''Эгоизм. ''Я отказываюсь рисковать своей шкурой, чтобы помочь другим. Они бы не помогли мне, если бы мы поменялись местами. |

| !к6 |!Привязанность |
| 1 |Жители родных рудников - моя семья. Я сделаю все, чтобы защитить их. |
| 2 |Житель Подземья спас мне жизнь, когда я был ранен и одинок. Я в большом долгу перед его народом. |
| 3 |Я должен созерцать и сохранять естественную красоту мест под землей. |
| 4 |Драгоценные камни привлекают меня больше, чем золото, земля, магия или сила. |
| 5 |Я хочу исследовать новые глубины и покорять новые вершины. |
| 6 |Когда-нибудь я найду золотую жилу и проведу остаток жизни в роскоши. |

| !к6 |!Слабость |
| 1 |Однажды я потерял всё, кроме своей гребной лодки. Я сделаю всё, чтобы защитить ее. |
| 2 |Мой брат служил в армии, но его убили. Я очень уважаю мужчин и женщин, которые служат. |
| 3 |Власти казнили моего друга за колдовство. Когда-нибудь я отомщу им. |
| 4 |Люди храма помогли мне, когда я был ранен, и ничего не попросили взамен. Я обязан им жизнью. |
| 5 |Однажды меня ограбили в трущобах. Этого больше не повторится. |
| 6 |Я сделаю все, чтобы защитить других портовых жителей. Они - моя семья.|
Обычно боевая сцена это схватка двух сторон, яростные выпады оружия, финты, парирование, маневрирование и накладывание заклинаний. Игра организовывает этот хаос в циклы раундов и ходов. ''Раунд'' представляет примерно 6 секунд, прошедших в игровом мире. Во время раунда все участники сражения совершают ''ходы''. Порядок ходов определяется в начале боевой сцены, когда все совершают проверку инициативы. Когда все совершат свои ходы, начинается новый раунд, если одна сторона пока не победила другую.

---

!!!Шаг 1: определение неожиданности
Отряд искателей приключений прокрадывается в лагерь разбойников и выскакивает из-за деревьев. Студенистый куб скользит по коридору и поглощает одного из персонажей. В этих ситуациях одна из сторон сражения застаёт другую врасплох.

То, кто захвачен врасплох, определяет Мастер. Если ни одна из сторон не старалась вести себя тихо, группы автоматически замечают друг друга. В противном случае Мастер сравнивает проверки Ловкости (Скрытность) тех, кто прячется, с пассивным значением Мудрости (Внимательность) противоположной стороны. Все персонажи и чудовища, не заметившие угрозы, в начале сцены захвачены врасплох.

Если вы захвачены врасплох, вы не можете перемещаться и совершать действия в первом ходу сражения, и пока этот ход не окончится, вы не можете совершать реакции. Член отряда может быть захваченным врасплох, даже если остальные члены отряда не захвачены.

---

!!!Шаг 2: определение позиций
В зависимости от походного строя и заявленных позиций Мастер определяет, где стоят все персонажи и чудовища, как далеко и где именно они находятся.  

---

!!!Шаг 3: определение инициативы
Инициатива определяет порядок совершения ходов во время сражения. Когда сражение начинается, все участники совершают проверки Ловкости или Интеллекта, в зависимости от того какой из модификаторов этих характеристик выше, чтобы определить свою позицию в порядке инициативы. Мастер совершает один бросок для целой группы одинаковых существ, чтобы все они действовали одновременно.

Мастер располагает участников сражения в порядке от обладателя наивысшего результата до обладателя наименьшего результата. Это порядок (называемый порядком инициативы), в котором они действуют в раунде. Порядок инициативы остаётся одним и тем же каждый раунд.

В случае ничьей Мастер определяет порядок среди соперничающих существ, управляемых им, а игроки определяют порядок среди своих персонажей. Если ничья возникает между чудовищем и персонажем игрока, порядок определяет Мастер. В качестве альтернативы, Мастер может бросить за всех соперничающих к20, чтобы определить порядок среди тех, у кого выпала ничья.

---

!!!Шаг 4: совершение ходов
В свой ход вы можете переместиться на расстояние, не превышающее вашу скорость, и совершить одно действие и одно бонусное действие. После окончания вашего хода он передается следующему существу в порядке инициативы. Многое может случится во время вашего хода помимо ваших действий, ход обычно делится на три части.

* ''Начало хода.'' Многие вещи случаются автоматически в начале вашего хода - это типичная точка отсчета для эффектов длящихся несколько раундов. В начале вашего хода совершите следующие шаги в произвольном порядке:
** Если вы создали эффект длящийся несколько раундов, уменьшите количество раундов на 1. Когда количество раундов достигает 0, эффект оканчивается.
** Совершите спасброски против действующих на вас эффектов, в описании которых указано, что они позволяют вам окончить их действие таким образом.
** Разрешите все прочие действующие на вас эффекты, в которых указано, что они происходят в начале вашего хода.
** Восстановите свои действия и реакцию. Действия и реакции, не потраченный в прошлый ход, теряются, вы не можете "сохранять" их из хода в ход. Вы не восстанавливаете действия и реакцию, если вы //недееспособны//. Некоторые эффекты и состояния могут изменить то, какие действия вы восстанавливаете и восстанавливаете ли вы реакцию. Если вы теряете и получаете дополнительные действия, решите какие из них вы теряете.

* ''Действия и перемещение.'' Вы можете перемещаться и совершать действия в любом порядке, но вы должны завершить одно действие прежде чем совершать другое. 
** В разделе «[[Перемещение в бою|Перемещение в бою]]» приводятся правила по перемещению. 
** Самые распространённые действия описаны в разделе «[[Действия|Действия]]». Многие классовые умения предоставляют дополнительные варианты действий. 
** Разнообразные классовые умения, заклинания и прочие эффекты позволяют вам совершать в ход дополнительное действие, называемое ''бонусным действием''. 
*** Бонусное действие можно совершать только если особое умение или заклинание напрямую разрешает делать что-то бонусным действием. В противном случае бонусное действие совершать нельзя. 
*** В свой ход вы можете совершить только одно бонусное действие, так что если у вас есть несколько вариантов, вы должны выбрать, какое бонусное действие совершить. 
*** Вы сами выбираете, в какой момент хода совершить бонусное действие, если только его описание не указывает чёткие условия его применения. 
*** Все эффекты, запрещающие вам совершать действия, запрещают также совершать бонусные действия.
** В свой ход с помощью ''свободного действия'' вы можете взаимодействовать с ''двумя'' предметами или особенностями местности во время другого действия. Например, вы можете расстегнуть и открыть рюкзак, и извлечь из него предмет, достать из кармана ключ и открыть дверь во время перемещения, или вынуть меч и кинжал из ножен частью того же действия, которым совершаете атаку.
*** Если вы хотите взаимодействовать с третьим предметом, вам нужно потратить на это действие. Некоторые магические и другие особые предметы всегда используются действием, что указывается в их описании.
*** Мастер может потребовать, чтобы вы потратили действие на такую деятельность, если предмет требует особого обращения или вам мешают необычные обстоятельства. Например, Мастер может резонно решить, что нужно потратить действие, чтобы открыть заклинившую дверь или повернуть ворот для опускания моста.
** Некоторые особые умения, заклинания и ситуации позволяют совершать особые действия, называемые ''реакциями''. Реакция — это мгновенный ответ на срабатывание некоего условия, который может происходить как в ваш, так и в чужой ход. Провоцированная атака - самый распространённый пример реакции.
*** Если вы совершили реакцию, вы не сможете совершить вторую реакцию до начала своего следующего хода. 
*** Если реакция прерывала ход другого существа, это существо может продолжить свой ход после реакции.
*** Если трудно правильно оценить очерёдность реакций, то в первую очередь смотрите на описание реакции. Например, в описании провоцированной атаки и заклинания //щит// чётко указано, что они прерывают действие, которое вызвало их срабатывание. Если в описании реакции ничего не сказано про очерёдность, или оно размыто, реакция произойдёт после того, как закончится вызвавшее её срабатывание условие, как в случае действия [[Подготовка|Подготовка]].
** Вы можете общаться любыми доступными вам средствами, короткими фразами и жестами, не тратя на это действий.
** Вы можете в свой ход отказаться от перемещения и совершения действий. Если не можете решить, что делать, попробуйте совершить [[Уклонение|Уклонение]] или [[Подготовку|Подготовка]].

* ''Конец хода.'' Когда вы заканчиваете с совершением действий и перемещением, вы достигаете конца своего хода. В конце вашего хода совершите следующие шаги в произвольном порядке:
** Окончите действие всех эффектов, которые длятся до конца вашего хода.
** Совершите спасброски против действующих на вас эффектов, в описании которых указано, что они позволяют вам окончить их действие таким образом.
** Разрешите все действующие на вас эффекты, в которых указано, что они происходят в конце вашего хода.
//Стоимость перемещения:// половина вашей скорости.

Один раз во время перемещения вы можете сесть в седло существа, находящегося в пределах 1 м от вас или наоборот, спешиться. Вы не можете сесть в седло, если у вас недостаточно перемещения или если скорость равна 0. 

Если некий эффект перемещает вашего скакуна против его воли, пока вы находитесь на нём, вы должны преуспеть в спасброске Ловкости со Сл 10, иначе вы упадёте со скакуна, падая ничком в пространстве в пределах 1 м от него. Если вас собьют с ног, пока вы находитесь верхом, вы должны совершить этот же спасбросок. 

Если ваш скакун сбивается с ног, вы можете реакцией спешиться и приземлиться на ноги. В противном случае вы спешиваетесь и падаете ничком в пространстве в пределах 1 м от скакуна.
Вы можете потратить 1 очко ци в свой ход, чтобы совершить бонусным действием Отход или Рывок. В этот ход дальность ваших прыжков удваивается.
Вы можете использовать атаку оружием, чтобы заставить противника попятиться.

Цель этой атаки должна быть не больше вас, и она должна находиться в пределах вашей досягаемости. Вы совершаете проверку Харизмы (Запугивание), противопоставленную пассивной проницательности цели. При успехе цель отходит от вас на 1 м, а вы можете переместиться на 1 м к цели частью этой атаки. При провале вы провоцируете атаку от цели, а она может реакцией совершить эту особую атаку по вам.
Ваша фамилия вызывает страх и восхищение в сердцах простых людей, но это не имеет к вам никакого отношения. Широко известны песни и рассказы о приключенческих подвигах вашего знаменитого родителя. Дети по всей стране росли, желая быть вами. Но в жизни ребёнка известного авантюриста есть и много минусов. 

Вы редко видели своих родителей-знаменитостей-приключенцев, и когда они были рядом, все говорили только о них и об убийстве того демона, или победе над тем драконом. Слишком часто вы просыпались под крики за окнами вашего дома о новой угрозе для города, региона или мира. 

В конце концов, всё, что у вас есть, - это ваше имя. Большая часть денег семьи ушла на расходные материалы, от //зелий лечения// и //свитков заклинаний// до невероятных объёмов дварфского эля. И все ожидают, что вы будете размахивать мечом или метать заклинания, как ваш знаменитый предок, что вдвойне усложняет ваши попытки проявить себя.

* ''Владение навыками:'' Внимательность, Выступление
* ''Владение инструментами:'' [[Набор для грима]]
* ''Языки:'' Один на ваш выбор
* ''Экипировка:'' Набор для грима, комплект одежды исследователя и кошель с 30 см

!!!Умение: Отголоски победы
Вы вызвали восхищение зрителей, коллег-спортсменов и тренеров в регионе, где проходили ваши прошлые спортивные победы. При посещении любого поселения в пределах 100 км от того места, где вы выросли, есть 50-процентная вероятность, что вы найдете там кого-то, кто восхищается вами и готов предоставить информацию или временное убежище.

!!!Персонализация
Потомки знаменитых приключенцев имеют дело с чужой славой, незаработанным богатством и ожиданиями, которые они никогда не смогут оправдать. Эти трудности могут иметь неблагоприятные последствия, но те, кто с ними справляется, могут заработать достойное отношение и рациональную точку зрения по отношению к себе. Те, кто терпит неудачу, становятся ожесточенными или даже хуже.


| !к8 |!Черта характера |
| 1 |Я никогда не выйду из тени моего знаменитого родителя, и никто другой никогда не поймет этого бремени. |
| 2 |Я достаточно налюбовался приключенческой жизнью, чтобы иметь реалистичные ожидания и сочувствие к своим сверстникам. |
| 3 |Жить в соответствии с моим наследием будет сложно, но я собираюсь это сделать. |
| 4 |Я привык к самому лучшему в жизни, и от этой привычки трудно избавиться. |
| 5 |Мой родитель научил меня чувству долга. Я стремлюсь придерживаться ему, даже когда шансы против меня. |
| 6 |Никто не может так поддельно улыбаться, жать руки или заинтересованно кивать, как это могу я. |
| 7 |Я был частью приключенческой жизни с тех пор, как научился ходить. Позвольте мне объяснить вам несколько вещей. |
| 8 |Любой риск оправдан ради победы над моими врагами ... и присвоения их вещей. |

| !к6 |!Идеал |
| 1 |''Власть.'' Единственный способ продвинуться вперёд в этом мире - достичь власти и удержать её всеми силами. |
| 2 |''Мир.'' У тех, кто способен найти или примириться с хаотическим миром вокруг себя, есть все. |
| 3 |''Слава. ''Я видел, что может принести слава. И я сделаю все, чтобы получить все это для себя.|
| 4 |''Обучение.'' Тяжёлый труд, жертвы и тренировки приводят к успеху и, в конечном итоге, к совершенству. |
| 5 |''Анонимность.'' Я хочу добиться успеха. Самостоятельно. С толстенной стеной между мной и всеми остальными в мире. |
| 6 |''Мудрость.'' Материальное богатство - это иллюзия. Мудрость - настоящее сокровище. |

| !к6 |!Привязанность |
| 1 |Пока мой родитель был в приключениях, меня вырастил слуга, и я забочусь об этом человеке больше, чем кто-либо. |
| 2 |Я считаю каждого члена бывшей приключенческой группы моих родителей своей семьёй. |
| 3 |Несмотря на их отсутствие, мои знаменитые родители были добрыми и щедрыми. Я люблю их и хочу, чтобы они гордились мной. |
| 4 |Однажды мои родители принесли домой проклятый магический предмет. Я одержим им. |
| 5 |Дом моего детства хранит в себе все мои лучшие воспоминания, и моя главная забота - поддержание его в надлежащем состоянии. |
| 6 |Когда я рос, у меня был воображаемый друг, на которого я всегда мог рассчитывать. Этот друг все еще со мной. |

| !к6 |!Слабость |
| 1 |Вы не знаете, через что я прохожу. Вы никогда не поймёте. |
| 2 |Ты. Принеси мой плащ. И помассируй ноги.  |
| 3 |Мои товарищи храбры, но я должен победить эту угрозу в одиночку, чтобы доказать свою ценность. |
| 4 |Ах да, это заклинание? Названное в честь лучшего друга моих родителей. Позвольте мне рассказать вам о нём. |
| 5 |Мои лучшие дни остались позади. Впереди только тяжёлый труд, боль и смерть. |
| 6 |Вы должны заботиться о себе. Кроме вас никто не будет этого делать. |
<<tabs "[tag[Потусторонний покровитель]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
[img [https://i.imgur.com/lYaBvye.png]]
!!! [img[3.png]] Путь кенсэя
Выберите два оружия из таблицы ниже, они становятся для вас монашеским оружием. Когда вы достигаете 6, 11 и 17 уровня в этом классе, вы можете выбрать ещё одно оружие из той же таблицы.

''Оружие кенсея:''

|!Древковое |!Дробящее |!Клинковое |!Контактное |
|Глефа |—  |Катана |—  |
|—  |—  |Катар   |—  |
|—  |—  |Фальшион |—  |
|—  |—  |—   |—  |
|!Метательное |!Стрелковое |!Топоры |!Цепы |
|—  |Длинный лук |Полэкс  |Боевой цеп |
|—  |Композитный лук |—   |Кнут |
|—  |Короткий лук  |—   |—  |
|—  |Легкий арбалет |—   |—  |
|—  |Легкий многозарядный арбалет |—   |—  |
|—  |Ручной арбалет |—   |—  |
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
При сотворении заклинания, наносящего урон звуком, кислотой, огнём, холодом, электричеством или ядом, вы можете потратить 1 очко чародейства и изменить его вид урона на другой из выше перечисленных.
Вы можете перестать концентрироваться на заклинании в любое время без затраты действия.
Вас преследует нечто столь ужасное, что вы не отваживаетесь даже говорить об этом. Вы пытались похоронить это и сбежать от него, но все попытки были тщетны. Чем бы оно ни было, то, что преследует вас нельзя убить мечом или изгнано заклятиями. Оно может являться к вам в виде тени на стене, кровавым кошмаром, воспоминанием, которое отказывается умирать или дьявольским шёпотом во тьме. Ноша берёт своё, изолируя вас от большинства людей и заставляя сомневаться в здравии вашего рассудка. Вы должны найти способ, победить это прежде, чем оно уничтожит вас.

* ''Владение навыками:'' Два на ваш выбор из следующих: Анализ, Выживание, Магия или Религия
* ''Языки:'' Два на ваш выбор, один из которых должен быть экзотическим
* ''Экипировка:'' Набор охотника на чудовищ, набор одежды селянина, одна безделушка, имеющая особое значение, и 1 см

!!!Переломное событие
Прежде чем стать искателем приключений, ваш жизненный путь определял один тёмный момент, одно судьбоносное решение или одна трагедия. Теперь вы чувствуете как тьма грозит поглотить вас и вы боитесь, что надежды на спасение больше нет. Выберите переломное событие, которое преследует вас или сделайте бросок по таблице ниже. 

| !к10 |!Переломное событие |
| 1 |Монстр, убивший дюжины невинных людей сохранил вам жизнь и вы не знаете почему. |
| 2 |Вы были рождены под тёмной звездой. Вы чувствуете, как она наблюдает за вами, холодно и отстранённо. Иногда она взывает к вам в чернейшие ночи. |
| 3 |Призрак, преследовавший вашу семью поколениями теперь преследует вас. Вы не знаете, чего он хочет, но знаете, что он не оставит вас в покое. |
| 4 |В вашей семейной истории есть практиковавшие тёмное искусство. Однажды, играя вы почувствовали хватку чего-то ужасного на вашей душе, после чего вы сбежали. |
| 5 |Они забрал вашего родного брата или сестру одной холодной, тёмной ночью и вы были не в силах ему помешать. |
| 6 |Вы были прокляты ликантропией, но позже исцелились. Теперь вас преследуют невинные, убитые вами. |
| 7 |Карга похитила и вырастила вас. Вы сбежали, но карга всё ещё имеет магически связанна с вами и наполняет ваш разум злыми мыслями. |
| 8 |Вы открыли мистический том и увидели вещи, не укладывающиеся в здравый рассудок. Вы сожгли ту книгу, но слова и картинки из неё навсегда въелись в вашу психику. |
| 9 |Демон овладел вами в детстве. Вас держали под замком, но вы сбежали. Демон всё ещё внутри вас, но вы пытаетесь держать его взаперти. |
| 10 |Вы творили ужасные вещи, чтобы отомстить за убийство возлюбленного. Вы стали монстром и это преследует вас в кошмарах. |

!!!Умение: Сердце тьмы 
Те, кто взглянет вам в глаза, сможет увидеть, что вы встречались с невообразимым ужасом и что вам не чужда тьма. Хотя они могут бояться вас, обыватели будут вежливы и сделают всё, чтобы помочь вам. Если вы не выказали признаков угрозы для них, они даже могут взяться за оружие, чтобы драться вместе с вами, если вы окажетесь лицом к лицу с врагом в одиночестве. 

!!!Персонализация
Вы научились жить с ужасом, который вас преследует. Вы привыкли выживать и яро оберегать тех, кто привносит свет в вашу тёмную жизнь.

| !к12 |!Черта характера |
| 1 |У меня была встреча, которая, как я считаю, дает мне особое родство со сверхъестественным существом или событием. |
| 2 |Особенная одежда или необычное оружие служат отражением того, кто я есть. |
| 3 |Я никогда не признаю, что я не в своей тарелке. |
| 4 |Я должен знать разгадку каждой тайны. В моем присутствии ни одна дверь не остается незакрытой. |
| 5 |Я позволяю людям недооценивать меня, открывая всю свою компетентность только близким людям.|
| 6 |Я навязчиво стремлюсь собирать трофеи своих путешествий и побед. |
| 7 |Неважно, что весь мир против меня. Я всегда буду делать то, что считаю правильным. |
| 8 |У меня нездоровые интересы и мрачная внешность. |
| 9 |У меня есть личный ритуал, мантра или метод релаксации, который я использую для борьбы со стрессом. |
| 10 |Нет ничего важнее жизни, и я никогда не оставляю никого в опасности. |
| 11 |Я быстро перехожу к экстремальным решениям. Зачем рисковать тем, что меньший вариант не сработает? |
| 12 |Меня легко испугать, но я не трус. |

| !к12 |!Идеал |
| 1 |''Адреналин. ''Я испытал такие странности, что теперь чувствую себя живым только в экстремальных ситуациях. |
| 2 |''Баланс.'' Я стремлюсь противостоять поступкам того, за кого чувствую ответственность. |
| 3 |''Привязанность.'' Я причинил кому-то зло и должен исполнить его волю, чтобы избежать его проклятия. |
| 4 |''Бегство.'' Я верю, что есть что-то за пределами известного мне мира, и мне нужно это найти. |
| 5 |''Наследие.'' Я должен совершить что-то великое, чтобы меня запомнили, а мое время на исходе. |
| 6 |''Заблуждение.'' Я прилагаю все усилия, чтобы другие не узнали о моих недостатках или проступках. |
| 7 |''Одержимость.'' Я живу таким образом настолько долго, что не могу представить себе другого пути. |
| 8 |''Обязательство.'' Я обязан перед своим народом, верой, семьей или учителем продолжать унаследованное дело. |
| 9 |''Обещание.'' Моя жизнь больше не принадлежит мне. Я должен исполнить мечту того, кого уже нет. |
| 10 |''Откровение.'' Мне нужно знать, что лежит за пределами тайн смерти, мира или Тумана. |
| 11 |''Убежище.'' Я знаю, какие силы действуют в мире, и стремлюсь создать островок в стороне от них. |
| 12 |''Истина.'' Истина для меня превыше всего, даже если она никому не приносит пользы. |

| !к12 |!Привязанность |
| 1 |Мне отчаянно нужно вернуться к кому-то или куда-то, но я потерял их в тумане. |
| 2 |Все, что я делаю, служит могущественному хозяину, которого я должен держать в секрете от всех. |
| 3 |Я многим обязан своему исчезнувшему наставнику. Я стремлюсь продолжить их дело, даже когда ищу их самих. |
| 4 |Я видел великую тьму, и я намерен быть светом против нее - светом всех светов. |
| 5 |Кто-то, кого я люблю, стал монстром, убийцей или другой угрозой. Я должен спасти его. |
| 6 |Мир был убежден в ужасной лжи. Я должен открыть правду. |
| 7 |Я сильно скучаю по кому-то и быстро принимаю людей, которые напоминают мне о нем. |
| 8 |Во мне живет великое зло. Я буду бороться с ним и другими пороками мира до тех пор, пока смогу. |
| 9 |Я отчаянно ищу лекарство от недуга или проклятия, либо для кого-то из моих близких, либо для себя. |
| 10 |Духи притягиваются ко мне. Я делаю все возможное, чтобы помочь им обрести покой. |
| 11 |Я использую свой хитрый ум, чтобы разгадать тайны и добиться правосудия для тех, кого постигла несправедливость. |
| 12 |Я потерял близкого человека, но до сих пор вижу его в видениях, повторяющихся снах или в виде духа. |

| !к12 |!Слабость |
| 1 |Я верю, что рок преследует меня и что любого, кто приблизится ко мне, ждет трагический конец. |
| 2 |Я убежден, что что-то преследует меня, появляясь в зеркалах, снах и местах, где никто не мог бы появиться. |
| 3 |Я особенно суеверен и веду жизнь, стараясь избежать невезения, злых духов или тумана. |
| 4 |Я совершил невыразимое зло и сделаю все, чтобы об этом не узнали другие. |
| 5 |Я исключительно доверчив и сразу верю любой истории или легенде. |
| 6 |Я скептик и не верю в силу ритуалов, религии, суеверий или духов. |
| 7 |Я знаю, что мое будущее предопределено и что любой мой поступок приведет к предначертанному пророчеством концу. |
| 8 |Я должен находить лучшее во всех и во всем, даже если это означает отрицание очевидной злобы. |
| 9 |Я видел зло в каком-то месте, например, в лесу, городе или на кладбище, и не хочу туда идти. |
| 10 |Я исключительно осторожен, тщательно планирую и разрабатываю бесчисленные запасные варианты. |
| 11 |У меня репутация человека, победившего великое зло, но это ложь, и злая сила знает об этом. |
| 12 |Я знаю, что цель всегда оправдывает средства, и быстро иду на жертвы ради достижения своих целей. |
Если вы промахиваетесь атакой заклинанием, вы можете потратить 2 очка чародейства, чтобы перебросить бросок атаки. Вы должны использовать новое выпавшее значение.

Вы можете использовать вариант «Преследующее заклинание», даже если вы уже использовали другой вариант Метамагии при сотворении этого заклинания.
| !к8 |!Преступление |
| 1 |Убийство |
| 2 |Кража |
| 3 |Грабёж |
| 4 |Нападение |
| 5 |Контрабанда |
| 6 |Похищение |
| 7 |Вымогательство |
| 8 |Подделка |
Иногда «быть плохим» означает получить прибыль. Этот вид деятельности даёт персонажу шанс полу- чить денег, но с риском заключения. 

//''Ресурсы''//. Перед преступлением персонаж должен потратить одну рабочую неделю и не менее 25 см на сбор информации о потенциальных целях. 

//''Определение результата''//. Персонаж должен совершить серию проверок, сложность которых выбирается персонажем, исходя из прибыли, которую он хочет получить. 

Выбранной сложностью может быть 10, 15, 20 или 25. Успешное завершение преступления приносит количество золотых монет, указанное в таблице ниже. 

Чтобы совершить преступление, персонаж должен пройти три проверки: Ловкость (Скрытность), Ловкость (Воровские инструменты) и одна из следующих на выбор игрока: Интеллект (Анализ), Мудрость (Восприятие) или Харизма (Обман). 

Если все проверки провалены, персонаж пойман и отправляется в тюрьму. Персонаж должен оплатить стоимость возможной добычи, а также отсидеть в тюрьме одну рабочую неделю за каждые 25 серебряных возможной добычи. 

Если одна проверка была успешна, то преступление сорвалось, но персонажа не поймали. Если две проверки были успешны, то преступление частично удалось, и персонаж получает половину добычи. Если же все три проверки были успешны, персонаж получает всю добычу. 

| !Сл |!Добыча|
| 10 |50 см, ограбление бедного торговца|
| 15 |100 см, ограбление богатого торговца|
| 20 |200 см, ограбление аристократа|
| 25 |1000 см, ограбление одного из богатейших людей города|

//''Осложнения''//. Криминальная жизнь чревата осложнениями. Совершите бросок по таблице, если персонаж проходит только одну проверку. Если соперник персонажа входит в криминальные круги или служит закону, осложнение происходит, даже если персонаж прошёл две проверки. 

| !к8 |!Осложнение |
| 1 |За информацию о вашем преступлении обещано вознаграждение в размере вашей добычи.|
| 2 |Неизвестный связывается с вами, угрожая сообщить о вашем преступлении, если вы не окажете ему услугу.|
| 3 |Из-за вашего преступления жертва разорена. |
| 4 |Кто-то, кто знает о вашем преступлении, арестован по другому делу. |
| 5 |Ваша добыча это один единственный, легко опознаваемый предмет, который не удастся сбыть в здешних краях. |
| 6 |Вы ограбили кого-то, кто был под защитой местного криминального авторитета, который теперь хочет отомстить. |
| 7 |Ваша жертва хорошо знакома со стражей, что удваивает усилия по вашей поимке. |
| 8 |Ваша жертва просит одного из ваших сотоварищей по приключениям помочь раскрыть преступление. |
Вы опытный преступник с большим послужным списком. Вы провели много времени, вращаясь в преступных кругах, и до сих пор имеете связи с подпольным миром. В отличие от обычных людей вы близко познакомились с убийствами, воровством и жестокостью, что пропитывают низшие слои общества. Вы научились выживать, пренебрегая правилами и ограничениями, которым подчиняются другие.

* ''Владение навыками:'' Обман, Скрытность
* ''Владение инструментами:'' [[Воровские инструменты|Воровские инструменты]], один [[игровой набор|Игровой набор]]
* ''Экипировка:'' Ломик, комплект одежды взломщика, кошель с 15 см

!!!Преступная направленность
Существует много разновидностей преступников: в воровской гильдии или другой похожей организации отдельные члены занимаются различным промыслом и играют разные роли. И даже преступники-одиночки обычно занимаются чем-то конкретным.

| !к8 |!Направленность | !к8 |!Направленность |
|  1  |Взломщик       | 5  |Контрабандист    |
|  2  |Вымогатель        | 6  |Наёмный убийца      |
|  3  |Грабитель с большой дороги       | 7  |Скупщик краденого     |
|  4  |Карманник       | 8  |Шантажист     |


!!!Умение: Криминальные связи
У вас есть надёжное доверенное лицо, которое выступает в роли вашего связного в криминальных кругах. Вы умеете получать и отправлять сведения связному, даже через большие расстояния: например, вы знаете местных посыльных, продажных караванщиков и нечистых на руку матросов, которые могут доставить сообщение для вас.

---

!!!Разновидность преступника: Заключённый
Будь то эмоциональная привязанность или стремление к богатству, вы приняли решение, которое повлияет на всю вашу дальнейшую жизнь. Вы были хороши в своем деле и считали себя неуязвимым. Все изменилось, когда вас схватили. Вас заперли в тюремной камере. Первые недели вы надеялись, что останетесь в живых. Когда недели превратились в месяцы, а допросы продолжались, вы стали мечтать о смерти.

Вы владеете навыком Внимательность вместо навыка Скрытность, и можете выбрать умение Бывший узник вместо умения Криминальные связи.

<<<
!!!Альтернативное умение: Бывший узник
Знания, полученные во время заключения, позволяют вам получить сведения о местных стражниках и тюремщиках. Вы знаете, кто из них будет брать взятки или смотреть на вас сквозь пальцы. Вы также можете искать убежище от властей у других преступников в этом районе.
<<<

---

!!!Разновидность преступника: Контрабандист
На шаткой барже вы провезли сотню длинных мечей в бочках из-под рыбы прямо мимо забывчивых лакеев начальника дока. Под взором луны вы перегоняли речное судно, наполненное краденым эльфийским вином, а утром продавали его вдвое дороже. В более милосердные времена вы вывозили невинных из зон военных действий или помогали вывести стада животных в безопасное место на берегу горящей реки. 

Если вы жили бытом контрабандиста, вы владеете навыком Атлетика вместо навыка Скрытность, водным транспортом вместо воровских инструментов, и можете выбрать умение Залечь на дно вместо умения Криминальные связи.

<<<
!!!Альтернативное умение: Залечь на дно 
Вы связаны с сетью контрабандистов, готовых помочь вам выбраться из затруднительных ситуаций. Находясь в определённом городе, посёлке или другом подобном населенном пункте (на усмотрение Мастера), вы и ваши спутники можете бесплатно остановиться в убежище. БУбежищаа обеспечивают бедный образ жизни. Находясь в убежище, вы можете сохранить свое присутствие (и присутствие ваших спутников) в секрете.
<<<

---

!!!Разновидность преступника: Шпион
Несмотря на то, что ваши способности не слишком отличаются от способностей взломщика или контрабандиста, вы научились применять их в другом ключе: в качестве специалиста по шпионажу. Вполне возможно, что вы — официально уполномоченный агент короны, или же вы просто продаёте добытые сведения тому, кто больше заплатит.

---

!!!Персонализация
Преступники на первый взгляд могут выглядеть злодеями, и многие из них действительно злы. Но у некоторых есть такие черты, за которые их можно и простить. Даже среди воров есть честь, но преступники редко относятся с уважением к властям и их представителям.

| !к8 |!Черта характера |
| 1 |У меня всегда есть план на случай, если всё пойдёт не так как задумано. |
| 2 |Я всегда хладнокровен, несмотря ни на что. Я никогда не повышаю голоса и не позволяю эмоциям управлять мной. |
| 3 |На новом месте я первым делом подмечаю, где находятся различные ценности — или места, где они могут быть спрятаны. |
| 4 |Я предпочту обзавестись ещё один другом, нежели ещё одним врагом. |
| 5 |У меня проблемы с доверием. Те, кто выглядят самыми порядочными, зачастую скрывают множество грязных секретов. |
| 6 |Наилучший способ заставить меня сделать что-то — сказать мне этого не делать. |
| 7 |Мне наплевать на риск. Никогда не говорите мне о возможных последствиях. |
| 8 |Я срываюсь даже от малейшего оскорбления. |

| !к6 |!Идеал |
| 1 |''Честь.'' Я не краду у своих «коллег». |
| 2 |''Свобода.'' Любые оковы должны быть сломлены, как и те, кто их выковал. |
| 3 |''Милосердие.'' Я краду у богачей, чтобы помочь людям в беде. |
| 4 |''Жадность.'' Я сделаю всё что угодно, лишь бы разбогатеть. |
| 5 |''Друзья.'' Я верен не каким-то там идеалам, но своим друзьям. А все остальные могут катиться к чертям. |
| 6 |''Искупление.'' В каждом есть что-то хорошее. |

| !к6 |!Привязанность |
| 1 |Я пытаюсь оплатить старый долг одному щедрому благодетелю. |
| 2 |Свои нечестно заработанные деньги я трачу на помощь своей семье. |
| 3 |У меня забрали нечто важное, и я намереваюсь выкрасть это обратно. |
| 4 |Я стану величайшим вором из всех, когда-либо живших. |
| 5 |Я виновен в ужасающем преступлении. Надеюсь, я смогу простить себя за это. |
| 6 |Близкий человек погиб из-за ошибки, которую я совершил. Это не повториться вновь. |

| !к6 |!Слабость |
| 1 |Когда я вижу что-то ценное, я не могу думать ни о чём другом, кроме мыслей о том, как это украсть. |
| 2 |Когда я становлюсь перед выбором между друзьями и деньгами, я обычно выбираю деньги. |
| 3 |Если есть какой-то план, я его наверняка забуду. А если не забуду, то попросту проигнорирую. |
| 4 |У меня есть привычка, которая выдаёт меня, когда я вру. |
| 5 |Я поджимаю хвост и убегаю, когда всё складывается плохо. |
| 6 |Невинный человек находится в тюрьме из-за преступления, что я совершил. Меня это не беспокоит. |
[img width=300 class="centerme" [https://i.imgur.com/yrls1C4.png]]

Эти, казалось бы, одичалые нецивилизованные полурослики не называют себя каким-то определённым образом -  "призрачными" их начали называть чужаки. Большинство из них обитают в районах, почти полностью отрезанных от внешнего мира, объединяясь в закрытые и тесные коммуны. Те немногие, что покидают свои кланы, всегда носят с собой знак символизирующий какую-либо особенность местности, на которой обитает их клан, например, гладкий камень или флакон воды из ручья. Потеря такого знака считается грехов и требует акта искупления, назначаемого лидером клана.

Из-за того, что их народ имеет закрытую, клановую культуру, недоверчивую ко всему чужому, призрачные полурослики в качестве искателей приключений встречаются редко. Спросите своего Мастера, можете ли вы играть представителем этой подрасы. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 1. |
|^Бесшумная речь |^Вы можете общаться телепатически с любым существом в пределах 6 м от вас. Существо должно знать язык, на котором вы говорите. Вы можете одновременно общаться телепатически только с одним существом.  |
|^Призрачные видения |^Вы можете видеть призраков и монстров из других миров. Ваше зрение в радиусе 10 м от вас распространяется на Эфирный План, Страну Фей и Царство Теней. Вы можете легко различать эти планы, так как объекты и существа, находящиеся на них, выглядят для вас прозрачными. Кроме того вы можете взаимодействовать с объектом или существом с плана, который вы можете видеть, в течении одной минуты. Эта особенность не позволяет вам перемещаться или перемещать что-либо между планами, и вы не можете использовать её снова, пока не завершите продолжительный отдых.  |

| !_к100_ |!Результат  |
| 1-10 |Вы были на волоске от смерти. Ваше тело уродуют скверные шрамы, и вам недостаёт уха, 1к3 пальцев рук или 1к4 пальцев ног.  |
| 11-20 |Вы получили тяжёлую травму. Хотя рана зажила, она всё равно время от времени даёт о себе знать.  |
| 21-30 |Вы были ранены, но со временем полностью выздоровели.  |
| 31-40 |Вы заразились какой-то болезнью, шастая по нечистотам. Вы излечились от неё, но теперь у вас постоянный кашель, оспины на коже или не по возрасту седые волосы.  |
| 41-50 |Вы были отравлены ловушкой или монстром. Вы восстановились, но в следующий раз, когда вам придётся проходить спасбросок против яда, вы получите помеху на этот спасбросок.  |
| 51-60 |Вы потеряли что-то сентиментально важное для вас во время вашего приключения. Уберите одну безделушку из ваших вещей.  |
| 61-70 |Вас ужасно испугало нечто, с чем вы столкнулись, после чего вы сбежали, бросив ваших товарищей на произвол судьбы.  |
| 71-80 |Вы многому научились во время своих приключений. В следующий раз, когда вы будете совершать проверку характеристики или спасбросок, вы получите преимущество на этот бросок.  |
| 81-90 |Вы обнаружили небольшое сокровище во время вашего приключения. У вас осталось 2к6 cм от вашей доли.  |
| 91-99 |Вы нашли большое сокровище во время вашего приключения. У вас осталось 1к20+50 cм от вашей доли.  |
| 00 |Вы обнаружили обычный магический предмет (по выбору Мастера). |
Вы провели свою жизнь, служа в храме, посвящённому какому-то конкретному богу или же пантеону богов. Вы — посредник между царством небесным и миром живых. Вы совершали священные ритуалы и приносили жертвоприношения для того чтобы молящиеся могли предстать пред ликом богов. Вы не обязательно жрец — совершение священных обрядов не то же самое, что направление божественной силы.

Выберите божество, пантеон богов или полубожественную сущность из тех, что предложены Мастером, и продумайте вместе с Мастером природу вашего религиозного служения.

* ''Владение навыками:'' Проницательность, Религия
* ''Языки:'' Два на ваш выбор
* ''Экипировка:'' Священный символ (подаренный вам в момент принятия священного сана), молитвенник или молитвенный барабан, 5 палочек благовоний, облачение, комплект одежды священнослужителя, кошель с 15 см

!!!Умение: Приют для верующих
Вы и ваши спутники можете рассчитывать на бесплатное лечение и уход в храмах, святынях и других подобных местах, посвящённых вашей вере. Вам придётся предоставить материальные компоненты для заклинаний, если таковые понадобятся. Те, кто разделяют вашу веру, могут обеспечить вам (но только вам) скромное существование.

У вас также могут быть связи с каким-то конкретным храмом, посвящённым вашему божеству или пантеону, в котором у вас есть жилая комната. Пока вы находитесь с этим храмом в хороших отношениях, находясь неподалёку от него, вы можете попросить у его служителей помощи, если она не подвергнет их опасности.

!!!Персонализация
Прислужники изучают историю и догматы своей веры, и на их привычки и идеалы влияет их отношение к храмам, святыням и иерархиям. Их слабостью может быть лицемерие или еретическая идея, либо идеал или привязанность, возведённая до гротеска.

| !к8 |!Черта характера |
| 1 |Я идеализирую конкретного героя своей веры и постоянно ссылаюсь на его поступки и свершения. |
| 2 |Я могу найти общую позицию даже у самых яростных врагов, сопереживая им, и всегда стремясь к примирению. |
| 3 |Я вижу знамения в каждом событии и поступке. Боги пытаются говорить с нами, нужно лишь прислушаться. |
| 4 |Ничто не может поколебать мой оптимизм. |
| 5 |При любой оказии я цитирую (или перевираю) священные тексты и притчи. |
| 6 |Я терпим (или нетерпим) к другим верованиям, и уважаю (или порицаю) поклонение другим богам. |
| 7 |Я люблю хорошую еду, выпивку и высокое общество представителей своего храма. Жизнь вдали от этого меня раздражает. |
| 8 |Я пробыл в храме слишком долго, и мне недостаёт опыта взаимодействия с людьми за его пределами. |

| !к6 |!Идеал |
| 1 |''Традиции.'' Мы должны сохранить и защитить древние традиции богослужения и совершения священных  таинств. |
| 2 |''Милосердие.'' Несмотря на затраченные усилия, я всегда пытаюсь помочь тем, кто в нужде. |
| 3 |''Перемены.'' Мы должны помогать привносить в мир перемены, которых наши божества постоянно жаждут. |
| 4 |''Власть.'' Я надеюсь однажды подняться на самую вершину своей религиозной иерархии. |
| 5 |''Вера.'' Я верю, что моё божество направляет меня. И что усердная работа всегда будет вознаграждена. |
| 6 |''Стремление.'' Я ищу шанс доказать, что я достоин благословления своего божества, совершая деяния в соответствии с его учениями. |

| !к6 |!Привязанность |
| 1 |Я не пощажу живота своего, лишь бы найти древнюю реликвию своей веры, что была потеряна давным-давно. |
| 2 |Однажды я отомщу развращённым представителям верховной иерархии своего храма, что объявили меня еретиком. |
| 3 |Я обязан своей жизнью священнику, который позаботился обо мне, когда умерли родители. |
| 4 |Всё, что я делаю — для простых людей. |
| 5 |Я пойду на всё что угодно, дабы защитить свой храм. |
| 6 |Я пытаюсь сохранить священные тексты, которые мои враги считают еретическими и пытаются уничтожить. |

| !к6 |!Слабость |
| 1 |Я не проявляю снисходительности к другим, но к себе я ещё более суров. |
| 2 |Я слишком доверяю тем, кто обладает властью в моей церковной иерархии. |
| 3 |Моя набожность зачастую приводит к тому, что я слепо верю всем, кто исповедует мою религию. |
| 4 |Я непреклонен в своих убеждениях. |
| 5 |Я настороженно отношусь к незнакомцам и всегда жду от них худшего. |
| 6 |Однажды выбрав цель, я становлюсь одержимым ею в ущерб всему прочему в своей жизни. |
Вы может попытаться силой переместиться через пространство враждебного существа. 

Вы совершаете действием или бонусным действием проверку Силы (Атлетика), противопоставленную проверке Силы (Атлетика) цели. Вы совершает свою проверку с преимуществом, если вы больше цели, или с помехой, если вы меньше. 

При успехе, вы можете в этом ходу один раз переместиться сквозь пространство цели и не провоцируете от неё атаку, покидая её досягаемость. При провале, вы также можете один раз переместиться сквозь пространство цели, считая его труднопроходимой местностью, но это перемещение провоцирует атаку от цели.
Возможно, вы произошли из рода торговцев. Может быть, вы были предпринимателем. Как бы то ни было, ваши начинания плохо кончились. Было ли это из-за внешних влияний, неудачи или просто потому, что ваша деловая хватка была слабой, вы потеряли всё. Однако с неудачей приходит опыт. Вы свободны от этой старой жизни, сохранив некоторые связи и усвоив уроки. 

* ''Владение навыками:'' Анализ, Убеждение
* ''Владение инструментами:'' Один вид [[инструментов ремесленников|Инструменты ремесленников]]
* ''Языки:'' Один на ваш выбор
* ''Экипировка:'' Инструменты ремесленника, которыми вы владеете, комплект одежды ремесленника, торговые весы и кошель с 10 см

!!!Умение: Цепочка поставок
Вы сохранили свои прошлые связи с оптовыми торговцами, поставщиками и другими купцами и предпринимателями. Вы можете воспользоваться этими связями при поиске предметов или информации.

!!!Персонализация
Для того, чтобы стать торговцем, необходимо иметь представление о числах, сильную личность, способность заключать сделки с недружелюбными конкурентами, крепкую руку чтобы отбиваться от бандитов, и интуицию, чтобы знать, чего люди хотят и в чем нуждаются. Искусство ведения бизнеса - это искусство поиска наилучшего пути к прибыли, и этот путь может быть разным для каждой сделки. Чтобы добиться успеха, нужны сильный ум и крепкое нутро. Так почему ты потерпел неудачу?


| !к8 |!Черта характера |
| 1 |Мне не хватало жесткости, необходимой для достижения успеха. Я больше не совершу эту ошибку. |
| 2 |Даже мои конкуренты говорили, что я приветливый и талантливый. Эти качества должны мне хорошо послужить. |
| 3 |Чтобы процветать, вы должны всегда контролировать ситуацию. |
| 4 |Клиент всегда прав. |
| 5 |Я обходил правила и разрывал сделки, чтобы максимизировать прибыль. Вот почему я потерпел неудачу. |
| 6 |Когда у меня появляется идея, я целенаправленно воплощаю ее в жизнь, даже если это ужасная идея. |
| 7 |Если я cмогу быть другом каждого, у меня всегда будет поддержка. |
| 8 |У меня не лежала душа к торговле, поэтому я потерпел неудачу. Приключения меня тоже не очень-то привлекают, но мне нужны деньги. |

| !к6 |!Идеал |
| 1 |''Выживание. ''Там где есть жизнь, есть надежда. Если я останусь живым и гибким, я смогу добиться успеха. |
| 2 |''Щедрость. ''Люди помогали мне, когда я был на дне. Теперь, когда я снова на ногах, я расплачусь наперёд. |
| 3 |''Азарт.'' Осторожность ни к чему не привела в моем предыдущем деле. Я не позволю ей сдерживать меня сейчас. |
| 4 |''Богатство.'' Достаточное количество монет может купить комфорт, силу, знания и даже вечную жизнь. Ничто не встанет между мной и деньгами.|
| 5 |''Стабильность.'' Торговля была для меня слишком хаотичным делом. Мне нужна хорошая стабильная профессия, например, авантюрист. |
| 6 |''Искупление.'' Слишком многие считают меня неудачником. Поэтому мне нужно доказать, что они неправы. |

| !к6 |!Привязанность |
| 1 |Моя семья значит для меня всё. Я уже подвёл их однажды, и я не должен повторить этого. |
| 2 |Моя церковь обеспечивает связь с моим богом, поэтому я должен обеспечить ее защиту и финансирование. |
| 3 |Мой бывший партнер по бизнесу заболел, а потом наше дело рухнуло. Часть моего нового предприятия заключается в том, чтобы зарабатывать достаточно, чтобы позаботиться о его семье. |
| 4 |Если я забочусь о своем имуществе, оно позаботятся обо мне. Люди приходят и уходят, но на оружие или жезл всегда можно положиться. |
| 5 |Хотя мой бизнес потерпел неудачу, люди моей общины были добры ко мне. Я сделаю все, что в моих силах, чтобы защитить их. |
| 6 |Я должен опасным людям много денег. Пока они довольны, они закрывают глаза на мой долг. |

| !к6 |!Слабость |
| 1 |Зачем тратить серебрянный здесь, если то же самое можно купить за медяк в соседнем городе? |
| 2 |Я должен иметь всё самое лучшее. Прямо сейчас. |
| 3 |Вы не слышали обо мне? Я уверен, что это из-за вашего невежества и низкого происхождения. |
| 4 |Я потерпел неудачу, но я всё равно крут. Поэтому, когда кто-то другой добивается успеха, это должно быть из-за кумовства, жульничества или глупой удачи.|
| 5 |Я считаю, что большинство людей заслуживают доверия. Эй, а где мой кошель? |
| 6 |Ничто не встаyет между мной и опасностью, кроме моих товарищей по приключениям. Так что я обязательно их туда пихну. |
* Перед стартом новой кампании оглашаются Правила Кампании в виде отдельного документа или статьи. Если Правило Кампании противоречит Домашним, то решающим является Правило Кампании (частное превосходит общее).
* Перед подачей заявки на участие в кампании Игрок обязан полностью ознакомиться с этим документом и Правилами Кампании.
* Если Игрок знаком с содержанием модуля, по которому проводится кампания, он обязан сообщить об этом Мастеру.
* Сессии кампании проводятся в голосовом чате [[Discord’а группы DnDno|https://discordapp.com/invite/bFcky8a]]. 
* Энкаунтеры, требующие виртуальный игровой стол, проводятся в [[MapTool|https://www.rptools.net/toolbox/maptool/]].
* Листы Персонажей заполняются в [[Google Таблицах|https://docs.google.com/spreadsheets/d/17fQfYAswxVkJXvjfogjjWgpr-7Yf-ixyXjHp5vkvDVc/edit?usp=sharing]]. 
* Расписание и другая важная информация находятся в соответствующих каналах Discord’а.
* Даты и время игровых сессий, как правило, оглашаются задолго до. Если у вас нет возможности присутствовать на следующей сессии, оповестите об этом вашего Мастера.
* Сессия проводится при присутствии как минимум половины активных Игроков. Персонажи отсутствующих Игроков не принимают участия в игровом процессе, но продолжают получать уровни и опыт. Если персонаж отсутствующего Игрока важен для сюжетной линии, он будет отыгрываться Мастером.
* Если вы хотите по какой-либо причине прекратить участвовать в кампании, сообщите об этом Мастеру. Ваше решение никого не оскорбит и не обидит. Будет куда хуже, если вы молча исчезнете, либо прекратите играть по легко исправляемой причине. 
* Разговоры в голосовом чате должны быть ограничены актуальным игровым процессом. Для оффтопика или на данный момент не актуальных игровых вопросов используйте текстовый чат.
* Используйте Discord для отправки Мастеру личных сообщений. У меня отключены все прочие уведомления, поэтому не обижайтесь, что я не прочел что-то важное в Steam’е, ВК или ICQ.
* Перерывы и окончание сессии объявляются Мастером. Мастер может принять решение, основываясь на просьбе Игроков. Игроки могут самостоятельно прерываться и покидать сессию раньше времени, обозначив это в текстовом чате.
* Регулярные пропуски сессий, отлучения во время сессии, присутствие “вполуха” могут поставить под сомнение ваше участие в кампании. Если у вас нет 1-2 свободных вечеров в неделю, в которые вы можете уделить 4-6 часов этому занятию, то оно не для вас.
* Все броски костей, совершаемые Игроками, производятся в Discord’е с помощью бота “Avrae”. Основные команды:
** a!r d20+x - бросок к20;
** a!r d20+x adv - бросок к20 с преимуществом;
** a!r d20+x dis - бросок к20 с помехой;
** a!rr y d20+x - бросок к20 “y” раз;
** a!randchar - определение значений характеристик (бросок 4к6 6 раз с вычитанием наименьшего значения).
* Инициатива отслеживается с помощью [[Improved Initiative|http://improved-initiative.com]]. Мастер предоставляет ссылку на трекер в начале энкаунтера.
Проверка характеристики испытывает врождённые таланты и обучение персонажа или чудовища, пытающегося преодолеть какое-то препятствие. Мастер призывает совершить проверку характеристики, когда персонаж или чудовище пытается совершить действие (но не атаку), которое может не получиться. Если исход действия неясен, его помогает определить бросок кости. 

Вначале Мастер определяет, какая из шести характеристик связана с выполняемой задачей, и определяет трудность этой задачи, отражаемую Сложностью (Сл). Чем труднее задача, тем выше Сл. Приведённая таблица показывает примерную Сл задач. 

|!Трудность задачи| !Сл |
|Очень лёгкая| 5 |
|Лёгкая| 10 |
|Средняя| 15 |
|Сложная| 20 |
|Очень сложная| 25 |
|Практически невозможная| 30 |

Для совершения проверки характеристики бросьте к20 и добавьте модификатор соответствующей характеристики. Как и при других бросках к20 добавьте бонусы и штрафы, и сравните сумму со Сл. Если сумма равна Сл или превышает её, проверка успешна — существо выполняет поставленную задачу. В случае провала персонаж или чудовище не достигает успеха и сталкивается с последствиями, определяемыми Мастером. 

---

!!!Состязание
Иногда усилия одного персонажа или чудовища противостоят усилиям другого. Это может произойти если они пытаются сделать одно и то же, и преуспеть может только один, например, они пытаются схватить магическое кольцо, упавшее на пол. Такая же ситуация возникает, когда один пытается предотвратить действия другого — например, если чудовище пытается открыть дверь, которую удерживает персонаж. В таких ситуациях исход определяется особой проверкой характеристики, называемой состязанием. 

Оба участника состязания совершают проверки характеристик, связанные с их попытками. Они применяют все уместные бонусы и штрафы, но суммы сравнивают не со Сл, а с результатами друг друга. Участник с наибольшим результатом выигрывает состязание. Этот персонаж или чудовище либо добивается успеха, либо не даёт пре- успеть другому. 

Если состязание оканчивается ничьёй, ситуация остаётся такой же, как до состязания. Таким образом, один из участников может оказаться в более выгодном положении. Если двое пытались схватить кольцо, никто его не получает. Если чудовище пыталось распахнуть дверь, а искатель приключений пытался запереть дверь на засов, ничья означает, что дверь остаётся прикрытой. 

---

!!!Навыки
Характеристики покрывают широкий диапазон возможностей, включая навыки, которыми персонаж или чудовище может владеть. Навык отражает некий аспект характеристики, а владение навыком демонстрирует сосредоточенность на этом аспекте (владения навыками персонажа определяются при его создании, а владения навыками чудовища написаны в блоке его статистики). 

Например, Ловкость может отражать попытку персонажа выполнить акробатический трюк, стащить предмет, или остаться скрытым. У этих аспектов Ловкости есть три конкретных навыка: Акробатика, Ловкость рук и Скрытность, соответственно. Таким образом, персонаж, владеющий навыком Скрытность, особенно хорошо совершает проверки Ловкости, связанные с попытками вести себя тихо и оставаться незамеченным. Навыки, связанные с характеристиками, показаны в приведённой таблице. 

|!Характеристики |!Навыки |
|Сила |Атлетика |
|Ловкость |Акробатика, Ловкость рук, Скрытность |
|Телосложение |Выносливость |
|Интеллект |Анализ, История, Магия, Природа, Религия |
|Мудрость |Внимательность, Выживание, Медицина, Проницательность, Уход за животными |
|Харизма |Выступление, Запугивание, Обман, Убеждение |

Владение навыком означает, что существо может добавлять бонус мастерства к проверкам характеристик, касающихся этого навыка. Без владения навыком существо совершает обычные проверки характеристики. 

Например, если персонаж пытается забраться на крутой утёс, Мастер может попросить совершить проверку Силы (Атлетика). Если персонаж владеет Атлетикой, его бонус мастерства добавляется к проверке Силы. Если персонаж не владеет этим навыком, он совершает обычную проверку Силы.

В некоторых ситуациях ваше владение может применяться к другой проверке. Мастер может попросить совершить проверку, используя необычную комбинацию характеристики и навыка, или же вы можете попросить у Мастера разрешение применить бонус мастерства к другой проверке. Например, если варвар демонстрирует грубую силу, чтобы запугать врага, Мастер может попросить совершить проверку Силы (Запугивание), несмотря на то, что Запугивание связано с Харизмой.

---

!!!Пассивные проверки
Пассивная проверка — это особая проверка характеристики, в которой кости не кидаются. Такая проверка может отражать средний результат для задачи, выполняющейся с регулярной периодичностью, например, поиски потайных дверей. Мастер может использовать её для тайного определения без бросков костей того, преуспеют ли персонажи в чём-либо, например, заметят ли персонажи скрывшееся чудовище. 

Результат пассивной проверки персонажа определяется так: 10 + все модификаторы, обычно применимые к проверке 

Если персонаж совершает проверку с преимуществом, добавьте 5. В случае помехи вычтите 5. 

---

!!!Совместные попытки
Вы не можете совершать несколько проверок на одно и то же действие. Но вы можете работать вместе со своими союзниками, чтобы увеличить шансы этой единственной попытки. 

Персонаж может пытаться помочь, если он сам в одиночку мог бы попробовать выполнить эту задачу (в бою для этого требуется совершить действие Помощь). Например, вскрытие замка требует владения воровскими инструментами, поэтому персонаж, не владеющий ими, не может помогать выполнять эту задачу. Более того, персонаж может помогать только если усилия другого персонажа действительно могут помочь. Некоторые задачи, такие как вдевание нитки в иголку, от чужой помощи легче не станут.

Первый помощник дает вам преимущество на бросок (как при действии Помощь), а каждый следующий - бонус +1. В случае неудачи все участвующие несут ответственность за последствия.

---

!!!Групповые проверки
Если несколько существ пытаются выполнить что-то как единая группа, Мастер может попросить совершить групповую проверку характеристики. В такой ситуации умелые персонажи смогут прикрыть слабые стороны неумелых. 

Для совершения групповой проверки характеристики все в группе совершают проверку характеристики. Если как минимум половина группы достигла успеха, преуспевает вся группа. В противном случае вся группа проваливает проверку. 

Групповые проверки совершаются не очень часто, и они совершаются тогда, когда преуспеть нужно сразу всем персонажам. Например, если искатели приключений идут по болоту, Мастер может призвать совершить групповую проверку Мудрости (Выживание), чтобы увидеть, смогут ли персонажи обойти топи, трясины и прочие естественные опасности. Если преуспеет как минимум половина группы, успешные персонажи помогают тем, кто не обошёл опасные места. В противном случае вся группа попадает в одну из опасностей. 
Проводник следит за тем, чтобы группа следовала в правильном направлении. Если проводник провалится, вы заплутаете и путешествие займет больше времени.

Если вы взяли на себя роль проводника, совершите проверку Интеллекта (Сл броска установлена в приведенной таблице) в конце дня, чтобы проверить, не сбились ли вы с маршрута. Инструменты картографа, наличие достоверной карты местности или владение навыком Выживание позволят вам добавить бонус мастерства к броску.

''Успех''. Группа следует установленному маршруту. Вычтите сегодняшний прогресс из оставшейся продолжительности путешествия.

''Провал''. Вы отклонились от курса и заблудились. Добавьте полдня к оставшейся продолжительности путешествия.

| !Сл |!Местность |
| 2 |Обширная равнина; отчётливые ориентиры; прямая дорога |
| 5 |Высокие ориентиры; небольшие холмы |
| 10 |Лёгкий дождь или дымка; леса и холмы |
| 15 |Лунная ночь; сильный дождь или густая дымка; лес без отчётливых троп или обозначений |
| 20 |Туман; густой и тёмный лес; горы |
| 25 |Облачная ночь; непроглядный туман; лабиринт; магически опасная местность |
Вы можете совершить провоцированную атаку, если враждебное существо, которое вы видите, покидает вашу досягаемость. Для этого вы реакцией совершаете одну рукопашную атаку по спровоцировавшему существу. Эта атака прерывает перемещение спровоцировавшего существа, происходя как раз перед тем, как оно покинет пределы вашей досягаемости. 

Вы можете избежать провоцированной атаки, совершив действие Отход. Вы также не провоцируете атаки, если телепортируетесь, или кто-то (что-то) перемещает вас, не тратя ваше перемещение, действие и реакцию. Например, вы не провоцируете атаку, если взрыв выбросил вас из пределов досягаемости врага или сила тяжести заставила упасть мимо врага, стоящего на возвышении. 
Продажа магического предмета – непростая задача. Искусные мошенники и воры всегда ищут лёгкий заработок, и нет никакой гарантии, что добросовестный покупатель, если он будет найден, сможет хорошо заплатить персонажу. 

//''Ресурсы''//. Персонаж может найти покупателя на один магический предмет за одну неделю, потратив 25 см на распространение информации о продаже. Персонаж за раз может продать только один предмет. 

//''Определение результата''//. Персонаж, который хочет продать предмет, должен совершить проверку Харизмы (Убеждение), чтобы определить, сколько ему готовы заплатить. Персонаж может отказаться от продажи и потратить ещё одну неделю, чтобы повторить попытку. 

Базовая цена предемтов определяется согласно документу [[Sane Magical Prices|https://drive.google.com/file/d/1HfQXzt7rorLpuNIWbEuTV0TEs_P5KQhD/view?usp=sharing]].

| !Результат |!Предложение|
| 1-10 |50% базовой цены|
| 11-20 |100% базовой цены|
| 21+ |150% базовой цены|

//''Осложнения''//. Основной риск при продаже магического предмета заключается в привлечении внимания воров и иных желающих получить предмет, но не желающих за него платить. Некоторые могут попытаться сорвать сделку, чтобы укрепить свой соб- ственный бизнес, или попытаться дискредитировать персонажа как добросовестного продавца. 

Каждую неделю, которую персонаж пытается продать магический предмет, существует 10% шанс возникновения осложнений, примеры которых приведены в таблице ниже. 

| !к6 |!Осложнение |
| 1 |Ваш противник тайно организует покупку предмета, чтобы использовать его против вас.|
| 2 |Воровская гильдия, предупреждённая о сделке, пытается украсть ваш предмет.|
| 3 |Недоброжелатель распускает слухи о том, что предмет – подделка.|
| 4 |Чародей заявляет, что предмет принадлежит ему по праву рождения, и требует его отдать. |
| 5 |Предыдущий владелец предмета или его выжившие союзники клянутся вернуть предмет силой. |
| 6 |Перед сделкой покупатель был убит.|
При сотворении заклинания с длительностью 1 минута или более вы можете потратить 1 очко чародейства, чтобы удвоить его длительность, вплоть до максимального в 24 часа.
Продолжительный отдых - это период простоя, длящийся не менее 1 недели, который ваш персонаж проводит в безопасном месте, например, в деревне или в городе. Это периоды вашей жизни между приключениями - возможность сбавить темп, изучить окружение и пообщаться с неигровыми персонажами в относительной безопасности.

Выполните эти 6 действий за каждую неделю отдыха:

# ''Продайте добычу''. Торгуйте любыми скопившимися у вас сокровищами - самоцветами, картинами, изысканными кубками - раздобытыми во время ваших приключений.
# ''Выберите образ жизни''. Определитесь с качеством своего образа жизни на неделю - никудышный, нищенский, бедный, скромный, комфортный, богатый или аристократический. Заплатите за него вперед.
# ''Выберите основную деятельность''. Выберите вашу основную деятельность простоя и оплатите соответствующие расходы.
# ''Соберите слухи''. Пока вы отдыхаете, ваша группа узнает о трех слухах. Некоторые из них могут быть ложными, или только частично правдивыми - вам придется провести дополнительное расследование, чтобы проверить услышанное.
# ''Выберите второстепенную деятельность''. Вы можете выполнить два других небольших второстепенных вида деятельности - встретиться с кем-нибудь, пройтись по лавкам и т.д.
# ''Подведите итоги''. В конце недели получите результаты вашей основной деятельности, проверьте исцелились ли ваши раны и какие расовые и классовые особенности восстановились. Если у вас есть какие-либо непогашенные долги - рассчитайтесь.

---

<<tabs "[tag[Шаги продолжительного отдыха]]" "" "$:/state/tab1">>


!!!Лёгкое простое оружие

|!Дробящее |!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
|Боевое кропило |9 см |1к6 Д | - | - | 1 кг|Грубое, особое |
|Лёгкая булава |5 см |1к6 Д | - | - | 1 кг|Грубое |
|Походный чайник |5 см |1к6 Д | - | - | 1 кг|Грубое, особое |
|!Клинковое|!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
|Выкидной нож |32 см |1к4 К/Р | - | 4 м | 0.5 кг| |
|Кинжал |2 см |1к4 К/Р | 19-20 | 4 м | 0.5 кг| |
|Клинковая бритва |9 см |1к4 Р | - | - | 0.5 кг| |
|Нож |2 см |1к4 К/Р | - | 4 м | 0.5 кг| |
|Серп |5 см |1к4 К/Р | - | - | 1 кг| |
|Складной нож |9 см |1к4 К/Р | - | 4 м | 0.5 кг| |
|Тычковый нож |2 см |1к4 К | - | - | 0.5 кг| |
|!Контактное|!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
|Кастет |1 см |1к4 Д | - | - | 0.2 кг|Грубое  |
|Цестус |5 см |1к4 Д+К | - | - | 0.2 кг|Грубое  |
|!Метательное|!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
|Дротик |1 см |1к6 К | - | 15 м | 1 кг| |
|Метательная дубинка |1 см |1к4 Д | - | 4 м | 0.5 кг|Грубое |
|!Стрелковое|!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
|Праща | |1к4 Д | - | - | | |
|Ручной арбалет | |1к8 К | - | - | |Летальное |
|!Топоры |!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
|Ремённый топор | |1к6 Р | - | - | |Летальное |

!!!Одноручное простое оружие

|!Древковое |!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
|Короткое копье | |1к6 (1к8) К | - | - | | |
|!Дробящее |!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
|Дубинка | |1к6 (1к8) Д | - | - | |Грубое  |
|Моргенштерн | |1к8 (1к10) Д+К | - | - | |Грубое  |
|Тяжёлая булава |8 см |1к8(1к10) Д | - | - | 2.5 кг|Грубое |
|!Клинковое |!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
|Макуавитль | |1к8 (1к10) Д/Р | - | - | | |
|!Стрелковое|!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
|Лёгкий арбалет | |2к6 К | - | - | | |
|Пусковой арбалет | |1к4 Д | - | - | | |
|Пулевой арбалет | |1к10 Д | - | - | | |
|Духовая трубка | |1 К | - | - | | |
|!Топоры |!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
|Топор дровосека | |1к6 (1к8) Р | - | - | | |


!!!Двуручное простое оружие

|!Древковое |!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
|Боевой посох | |1к8 Д | - | - | | |
|Годендаг | |1к8 Д/К | - | - | | |
|Длинное копье | |1к8 К | - | - | |Длинное |
|Коса | |1к6 К/Р | - | - | |Длинное, летальное, подсекающее |
|Пастуший посох | |1к6 Д | - | - | |Длинное, подсекающее |
| | | | - | - | | |
| | | | - | - | | |
| | | | - | - | | |
| | | | - | - | | |
| | | | - | - | | |
| | | | - | - | | |
| | | | - | - | | |
| | | | - | - | | |
| | | | - | - | | |
| | | | - | - | | |
//Стоимость перемещения:// 1 м за 1 м.

Если вы совершаете прыжок в высоту, вы поднимаетесь в воздух на количество метров, равное (1 + модификатор Атлетики)/4, если непосредственно перед прыжком переместились минимум на 2 м.

Если вы совершаете прыжок в высоту без разбега, прыгнуть можно только на половину этой дистанции.

Руки можно вытянуть вверх на половину своего роста. Таким образом, вы дотягиваетесь до расстояния, равного высоте прыжка плюс полтора ваших роста.

В некоторых случаях Мастер может позволить совершить проверку Силы (Атлетика), чтобы прыгнуть выше, чем обычно. 
//Стоимость перемещения:// 1 м за 1 м.

Если вы совершаете прыжок в длину, вы покрываете количество метров, равное половине значения вашей пассивной Атлетики, если непосредственно перед прыжком переместились минимум на 2 м. 

Если вы совершаете прыжок в длину без разбега, прыгнуть можно только на половину этой дистанции. 

Это правило предполагает, что высота прыжка не имеет значения, как в случае перепрыгивания ручья или пропасти. 

Если Мастер решит, вы должны преуспеть в проверке Силы (Атлетика) со Сл 10, чтобы перепрыгнуть через препятствие (не выше четверти расстояния прыжка), такое как изгородь или невысокая стена. В противном случае вы ударяетесь об него. 

Если вы приземляетесь в труднопроходимую местность, вы должны преуспеть в спасброске Ловкости (Акробатика) со Сл 10, чтобы приземлиться на ноги. В противном случае вы падаете ничком. 
[img [https://i.imgur.com/lYaBvye.png]]
Дикая природа опасна, а путешествия за стены города редко обходятся без инцидентов. Многие приключенцы навсегда теряются в тёмных лесах. Другие погибают от нехватки продовольствия. Третьи становятся жертвами бандитов и монстров. Мир не делает поблажек неподготовленному путешественнику.

Путешествия на дальние расстояния проводятся в виде [[испытания навыков|Испытания навыков]]. Ниже перечислены особенности этого вида испытаний:

* Сложность испытания напрямую зависит от длительности и темпа путешествия, и высчитывается согласно таблице Темп перемещения.
* Правило трёх провалов не используется. Персонажи могут продолжать проходить испытание, пока не доберутся до цели, либо не пожелают прервать его.
* Последствием провала может быть случайная сцена (в т.ч. боевая).
* Сл проверок может расти при путешествии в ночное время.
* Прохождение заготовленной Мастером сцены (не случайной) считается успешной проверкой.
* Правило "[[Голод и жажда]]" не перестаёт действовать во время испытания. Учтите употреблённое количество пищи и воды после завершения испытания. Если запасы группы иссякли во время путешествия, совершайте проверки на истощение от голода и жажды после последней в день проверки испытания.

---

!!!Темп перемещения

Предполагается, что персонажи тратят на перемещение 10 часов в день. В учёт идут перерывы на отдых, отвлекающие факторы и паузы, требующиеся персонажу в течении дня. 

Во время перемещения группа искателей приключений может перемещаться в нормальном, быстром или медленном темпе, как показано в приведённой ниже таблице. В таблице указано расстояние, на которое может переместиться группа за день  и эффекты выбранного темпа, если они есть. 

| !Темп | !Скорость | !Расстояние в день | !Сложность | !Проверки |
| Медленный | 2 км/ч | 20 км  | 1 × день | Преимущество |
| Нормальный | 4 км/ч | 40 км  | 2 × день | - |
| Быстрый | 6 км/ч | 60 км  | 3 × день | Помеха |

''Труднопроходимая местность''

Скорость, указанная в таблице, подразумевает путешествие по относительно нормальной местности: дороги, открытые равнины или ровные коридоры подземелья. Однако приключенцы часто забредают в густые леса, глубокие болота, заваленные булыжниками руины, крутые горы и закованные в ледяной панцирь реки — всё это труднопроходимая местность.

По труднопроходимой местности вы перемещаетесь с вдвое меньшей скоростью и преодолевате вдвое меньшее расстояние за сутки.

''Форсированный марш''

Персонажи могут продлить день путешествия, рискуя своим здоровьем.

В конце каждого дополнительного часа путешествия сверх 10 часов персонаж должен преуспеть в проверке Телосложения (Выносливость) со Сл = 10 + 1 за каждый час сверх 10, иначе получит одну степень [[истощения|Истощённый]].

''Скакуны и транспорт''

Персонажи, перемещающиеся верхом на скакунах, скорость которых не меньше 10 м, преодолевают вдвое большее расстояние за сутки, чем при ходьбе.

В фургонах, каретах и прочем наземном транспорте персонажи преодолевают то же расстояние за сутки, что и при ходьбе. Основным плюсом такого метода перемещения является грузоподъёмность транспорта. 

Персонажи на водном транспорте ограничены скоростью судна, и они не получают ни штрафы за быстрый темп, ни преимущества от медленного темпа. В зависимости от
судна и размера экипажа, корабли могут перемещаться и по 24 часа в сутки.

|!Судно | !Скорость |
|Военный корабль | 4 км/ч |
|Воздушный корабль | 12 км/ч |
|Галера | 6 км/ч |
|Ладья | 4 км/ч |
|Лодка | 2 км/ч |
|Парусник | 4 км/ч |
|Шлюпка | 2 км/ч |

---

!!!Деятельность во время путешествия

[img [https://i.imgur.com/lYaBvye.png]]
<<tabs "[tag[Путь дикости]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
Для некоторых варваров ярость это способ достижения цели, и этой целью является насилие. Путь берсерка это путь, залитый кровью, путь безудержной ярости. Впадая в ярость берсерка, вы бросаете себя в хаос боя, не заботясь более о собственном здоровье.

---

!!! [img[3.png]] Бешенство
Пребывая в ярости, вы можете впасть в бешенство (действие не требуется). В этом случае, пока ваша ярость не прекратилась, вы можете в каждый свой последующий ход совершать бонусным действием одну рукопашную атаку оружием. После окончания бешенства, вы получаете одну степень [[истощения|Истощённый]].

---

!!! [img[6.png]] Бездумная ярость
Вы не можете быть [[испуганы|Испуганный]] или [[очарованы|Очарованный]], пока пребываете в ярости. Если вы были [[испуганы|Испуганный]] или [[очарованы|Очарованный]] до того, как впали в ярость, эти эффекты приостанавливаются до прекращения вашей ярости.

---

!!! [img[10.png]] Пугающее присутствие

<<<
Вы можете пугать других своим ужасающим видом. 
<<<

Действием выберите видимое вами существо в пределах 6 м от вас. Если оно может видеть или слышать вас, оно должно совершить успешный спасбросок Мудрости (Сл равна 8 + ваш бонус мастерства + ваш модификатор Харизмы), иначе станет [[испуганным|Испуганный]] вами до конца вашего следующего хода. В последующие ходы вы можете действием поддерживать этот эффект до конца своего следующего хода. Эффект оканчивается, если цель оказалась вне линии обзора, или далее чем в 12 м от вас. 

Если существо преуспело в спасброске, вы не можете использовать на нём это умение следующие 24 часа.

---

!!! [img[14.png]] Ответный удар
При получении урона от существа, находящегося в пределах 1 м от вас, вы можете реакцией совершить по нему рукопашную атаку оружием.
Все варвары утаивают свою ярость внутри. Их гнев даёт им их превосходную силу, выносливость и скорость. Варвары, следующие по Пути Буревестника, учатся трансформировать эту ярость в покров первобытной магии, который кружится вокруг них. Будучи в ярости, варвары этого пути используют силы природы для создания могущественных магических эффектов.

Буревестники – это обычно элитные чемпионы, тренирующиеся вместе с друидами, следопытами и другими поклявшимися защищать природу. Другие буревестники оттачивают свое мастерство в областях, сокрушаемых бурями, на ледяных вершинах на краю света или в глубинах самых горячих пустынь. 

---

!!! [img[3.png]] Аура бури
Пребывая в ярости, вы излучаете штормовую магическую ауру. Аура распространяется от вас на 2 м во всех направлениях, но не через полные укрытия. 

У вашей ауры есть эффект, который активируется когда вы впадаете в ярость, и вы можете активировать эффект снова бонусным действием в каждый свой последующий ход. 

Выберите //''пустыню''//, //''море''// или //''тундру''//. Ваш эффект ауры зависит от выбранной среды как описано ниже. Вы можете сменить выбор окружающей среды когда получаете уровень в этом классе. 

Если эффект вашей ауры требует спасброска, Сл равна 8 + ваш бонус мастерства + мод. Телосложения.

//''Пустыня.''// Когда этот эффект активируется, все остальные существа в вашей ауре получают 2 урона огнем. Урон увеличивается когда вы достигаете определенных уровней в этом классе - до 3 на 5 уровне, 4 на 10 уровне, 5 на 15 уровне и 6 на 20 уровне. 

//''Море.''// Когда этот эффект активируется, вы можете выбрать другое видимое вами существо внутри вашей ауры. Цель должна совершить спасбросок Ловкости. Цель получает 1к6 урона электричеством при провале или половину урона при успехе. Урон увеличивается когда вы достигаете определенных уровней в этом классе - до 2к6 на 10 уровне, 3к6 на 15 уровне, и 4к6 на 20 уровне. 

//''Тундра.''// Когда активируется этот эффект, каждое существо по вашему выбору внутри вашей ауры получает 2 временных хита, так как ледяные духи делают их менее чувствительными к страданиям. Количество временных хитов увеличивается, когда вы достигаете определенных уровней в этом классе - до 3 на 5 уровне, 4 на 10 уровне, 5 на 15 уровне и 6 на 20 уровне. 

---

!!! [img[6.png]] Душа бури 

<<<
Буря дает вам преимущества даже когда ваше аура не активна. 
<<<

Преимущества зависят от окружающей среды, которую вы выбрали для вашей Ауры бури. 

//''Пустыня.''// Вы получаете сопротивление урону огнем и не страдаете от эффектов невероятной жары. Более того, действием вы можете дотронуться до горючего объекта, который никто не носит или несёт, и поджечь его. 

//''Море.''// Вы получаете сопротивление урону электричеством и можете дышать под водой. Вы также получаете скорость плавания 6 м. 

//''Тундра.''// Вы получаете сопротивление урону холодом, и не страдаете от эффектов сильного холода. Более того, действием, вы можете дотронуться до 1 куб. метра воды и превратить её в лёд, который растает через 1 минуту. Действие провалено если в кубе находится существо. 

---

!!! [img[10.png]] Ограждающая буря 

<<<
Вы научились использовать свое мастерство бури, чтобы защищать других. 
<<<
Каждое существо по вашему выбору получает сопротивление урону, которое вы получили от умения Душа бури, пока существо находится внутри вашей Ауры бури. 

---

!!! [img[14.png]] Неистовство бури

<<<
Сила бури, которую вы призываете, становится могущественнее и обрушивается на ваших врагов. 
<<<

Эффект основан на окружающей среде, которую вы выбрали для вашей Ауры бури. 

//''Пустыня.''// Сразу же после того как существо в вашей ауре попадет по вам атакой, вы можете использовать вашу реакцию, чтобы заставить это существо совершить спасбросок Ловкости. При провале, существо получает урон огнем равный половине вашего уровня варвара.

//''Море.''// Когда вы попадаете по существу в вашей ауре атакой, вы можете использовать свою реакцию, чтобы заставить существо пройти спасбросок Силы. При провале существо сбивается с ног как будто ударом волны. 

//''Тундра.''// Когда эффект вашей Ауры бури активирован, вы можете выбрать одно видимое ваме существо в ауре. Это существо должно успешно пройти спасбросок Силы или его скорость уменьшается до 0 до начала вашего следующего хода, так как его покрывает магический мороз. 
Варвары, следующие Пути Бушующего в бою, берут своё начало у дварфских бойцов, поклоняющихся богам войны и именуемых "Калджарх" (буквально "идиот с топором" с дварфского). Они специализируются в использовании громоздких шипованных доспехов, которые помогают им использовать своё тело в качестве оружия, когда они, поддавшись ярости, бросаются в пекло битвы. 

---

!!! [img[3.png]] Доспех Бушующего в бою
Вы получаете владение [[инструментами кузнеца|Инструменты кузнеца]] и "//шипованными//" доспехами. Вы (или другой умелый кузнец) можете модифицировать немагический средний доспех, потратив 4 часа работы и сырьё (железо, сталь или другой подходящий металл) стоимостью 25 см, сделав его "//шипованным//". Модификация магического доспеха требует 8 часов работы и сырьё стоимостью 100 см. "//Шипованная//" версия доспеха весит на 2 кг больше стандартного.

Пока вы носите "//шипованные//" доспехи вы получаете следующие преимущества:

* Ваши безоружные атаки наносят 1к4 + мод. Силы колющего урона. Если ваш "//шипованный//" доспех является магическим, то и ваши безоружные атаки считаются магическими при определении преодоления сопротивления и иммунитета к немагическим атакам и урону.
* Пребывая в ярости, если в свой ход вы используете действие Атака, вы можете совершить одну безоружную атаку бонусным действием.
* Если вы успешно берёте в [[захват|Захват]] существо, или существо успешно берёт в [[захват|Захват]] вас, вы наносит ему урон вашей безоружной атаки.
* Ваше [[пробегание|Пробегание *]] через пространство существа наносит ему урон вашей безоружной атаки.

---

!!! [img[6.png]] Полное безрассудство
Пребывая в ярости, если вы атакуете безрассудно, вы получаете временные хиты в количестве равном вашему мод. Телосложения (минимум 1). Эти временные хиты пропадают, когда ваша ярость прекращается.

---

!!! [img[10.png]] Яростный налёт
Пребывая в ярости, вы можете совершить Рывок бонусным действием.

---

!!! [img[14.png]] Шипованное возмездие
Если существо, находящееся в 1 м от вас, попадает по вам рукопашной атакой, оно получает урон вашей безоружной атаки, пока вы пребываете в ярости, дееспособны и носите "//шипованные//" доспехи.
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
Некоторые варвары происходят из культур, где почитают своих предков. Эти племена учат своих воинов, что ушедшие остаются в этом мире в качестве могучих духов, которые могут направлять и защищать живущих. Когда варвары, следующие этому пути, впадают в ярость, они пересекают барьер между нашим миром и миром духов и взывают к таким духам-хранителям за помощью.

Варвары, которые призывают своих предков-хранителей, могут лучше защитить свое племя и своих союзников. Чтобы укрепить связь со своими предками-хранителями, варвары, которые следуют этому пути, покрывают себя детально проработанными татуировками, которые отмечают дела их предков. Эти татуировки несут в себе истории о победах над ужасными монстрами или другими страшными противниками. 

---

!!! [img[3.png]] Древние защитники

<<<
Призрачные воины появляются, когда вы впадаете в ярость. 
<<<

Пока вы пребываете в ярости, первое существо по которому вы попадаете атакой в свой ход, становится целью духов, которые мешают его атакам. До начала вашего следующего хода цель получает помеху на любой бросок атаки, целью которой не являетесь вы. Если цель попадает атакой по существу, отличному от вас, оно получает сопротивление к урону от этой атаки. Эффект на цели заканчивается раньше, если ваша ярость прекращается.

---

!!! [img[6.png]] Щит предков 

<<<
Духи-хранители, которые помогают вам, могут дать сверхъестественную защиту тем, кого вы пытаетесь уберечь.
<<<

Пока вы пребываете в ярости, и другое видимое вами существо в пределах 6 м от вас, получает урон, вы можете использовать свою реакцию, чтобы уменьшить этот урон на 2к6.

При достижении определенных уровней в этом классе, вы можете значительнее уменьшать урон: на 3к6 на 10 уровне и на 4к6 на 14 уровне. 

---

!!! [img[10.png]] Совет предков

<<<
Вы получаете способность советоваться с духами предков.
<<<

Вы можете сотворять заклинания //гадание// или //подсматривание// без траты ячеек заклинаний или материальных компонентов. Вместо создания сферического сенсора, подобное сотворение //подсматривания// призывает одного из ваших невидимых духов предков в выбранное место. Базовой характеристикой для использования этих заклинаний является Мудрость.

После того как вы сотворили любое из этих заклинаний с помощью этого умения, вы не можете использовать это умение повторно, пока не завершите короткий или продолжительный отдых. 

---

!!! [img[14.png]] Мстительные предки

<<<
Ваши духи предков становятся достаточно могущественными, чтобы давать отпор. 
<<<

Когда вы используете свой Щит предков, чтобы уменьшить урон от атаки, атакующий получает урон силовым полем в количестве, равном уменьшенному урону.
Путь Тотемного воина — духовный путь, в котором дух зверя становится для варвара наставником, защитником и вдохновителем. В бою тотемный дух дарует вам сверхъестественную мощь, наполняя вашу ярость магической силой.

Большинство варварских племён связывают свои кланы с конкретным тотемным духом, и это необычно для одного варвара иметь несколько тотемных духов, хотя такие исключения и встречаются.

---

!!! [img[3.png]] Искатель духов

<<<
Ваш путь, тесно связанный с дикой природой, даёт вам близость с животными. 
<<<

Вы получаете возможность сотворять заклинания //животные чувства// и //разговор с животными// в виде ритуалов.

---

!!! [img[3.png]] Тотемный дух

<<<
Встав на этот путь, вы выбираете своего тотемного духа, и получаете его умения. 
<<<

Вы должны сделать или приобрести тотем: физический предмет (амулет или похожее украшение), содержащий мех, кожу, перья, когти, зубы или кости тотемного животного. 

Если хотите, можете приобрести незначительные физические изменения, напоминающие ваше тотемное животное. Например, если вашим тотемным животным является //''медведь''//, вы можете получить необычную волосатость и толстокожесть, а если это //''орёл''//, то ваши глаза могут приобрести ярко-жёлтый цвет.

Ваше тотемное животное может быть родственным одному из перечисленных ниже, если оно более подходит для вашей родной местности. Например, вместо //''орла''// может быть ястреб или гриф.

<<tabs "[tag[Тотемный дух]nsort[]]" "" "$:/state/tab1" "tc-vertical">>

---

!!! [img[6.png]] Аспект зверя
Вы получаете магическое свойство, зависящее от выбранного вами тотемного животного. Вы можете выбрать то же животное, что и ранее, либо другое.

<<tabs "[tag[Аспект зверя]nsort[]]" "" "$:/state/tab1" "tc-vertical">>

---

!!! [img[10.png]] Гуляющий с духами
Вы можете сотворять заклинание //общение с природой// в виде ритуала. Когда вы делаете это, призрачная версия одного из ваших тотемных животных является вам и сообщает необходимую информацию.

---

!!! [img[14.png]] Гармония тотема
Вы получаете магическое свойство, зависящее от выбранного вами тотемного животного. Вы можете выбрать то же животное, что и ранее, либо другое.

<<tabs "[tag[Гармония тотема]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
Некоторые божества вдохновляют своих последователей вводить себя в свирепый боевой раж. Такие варвары – фанатики, воины, которые преобразуют свой гнев в могущественную демонстрацию божественной мощи. 

Множество богов в мирах D&D вдохновляют своих последователей принимать этот путь. Темпус из Забытых Королевств или Гектор и Эритнул в Грейхоуке – отличные примеры. 

В целом, боги, которые вдохновляют фанатиков, – это боги войны, разрушения и насилия. Не все они злые, но мало кто из них добр. 

---

!!! [img[3.png]] Божественный гнев

<<<
Вы можете вкладывать божественный гнев в ваши удары оружием. 
<<<

Пока вы пребываете в ярости, первое существо, по которому вы попадаете атакой оружием, получает дополнительный урон, равный 1к6 + половина вашего уровня варвара. Урон наносится некротической энергией или излучением; тип урона вы выбираете при получении этого умения. 

---

!!! [img[3.png]] Воин богов

<<<
Ваша душа отмечена для вечной битвы. 
<<<

Если заклинание, такое как //оживление// имеет единственный эффект – вернуть вас к жизни (но не нежитью), заклинателю не требуются материальные компоненты, чтобы сотворить его на вас. 

---

!!! [img[6.png]] Концентрация фанатика

<<<
Божественная сила, что питает вашу ярость, может защитить вас от вреда. 
<<<

Если вы провалили спасбросок, пребывая в ярости, вы можете перебросить его и должны использовать новое значение. Вы можете использовать эту способность только один раз в течение одной ярости. 


---

!!! [img[10.png]] Фанатичное присутствие

<<<
Вы научились использовать божественную силу, чтобы вдохновлять на фанатизм других. 
<<<

Бонусным действием вы можете испустить боевой клич, наполненный божественной энергией. До 10 слышащих вас существ по вашему выбору в пределах 12 м от вас, получают преимущество на броски атак и на спасброски до начала вашего следующего хода.

Вы не можете использовать это умение повторно, пока не завершите продолжительный отдых.



---

!!! [img[14.png]] Ярость превыше смерти 

<<<
Божественная сила, что питает вашу ярость, позволяет вам игнорировать смертельные удары. 
<<<

Если вы становитесь [[умирающим|Умирающий]], пребывая в ярости, вы не теряете сознание. Вы по-прежнему должны совершать спасброски от смерти, но, если вы должны умереть от провала спасбросков от смерти, вы не умрете, пока не прекратится ваша ярость, и только если вы всё ещё являетесь [[умирающим|Умирающий]]. 

Когда ничего другого не остаётся, приключенец может заняться честным трудом, чтобы заработать на жизнь. Этот вид деятельности – попытка найти временную работу, характер и оплату которой трудно предсказать. 

//''Ресурсы''//. Работа занимает одну неделю. 

//''Определение результата.''// Чтобы определить, сколько денег получит персонаж, он совершает одну из проверок: Сила (Атлетика), Ловкость (Акробатика), Интеллект при использовании набора инструментов, Харизма (Выступление) или Харизма при игре на музыкальном инструменте. Обратитесь к таблице ниже, чтобы узнать, сколько денег получил персонаж в соответствии с результатом проверки. 

|!Результат |!Заработок|
|9 или меньше |Бедное существование в течение недели|
|10-14 |Скромное существование в течение недели|
|15-20 |Комфортное существование в течение недели|
|21+ |Комфортное существование в течение недели + 25 см|

//''Осложнения''//. Обычная работа редко приводит к значительным осложнениям. За каждую неделю, потраченную на работу, с вероятностью 10% персонаж может столкнуться с осложнением. 

| !к6 |!Осложнение |
| 1 |Из-за жалобы клиента или драки с коллегой ваш заработок уменьшился на одну категорию.|
| 2 |У вашего нанимателя возникли финансовые трудности, поэтому он не может вам заплатить.|
| 3 |Сотрудник, знакомый с одной из влиятельных семей города, вас невзлюбил.|
| 4 |Ваш наниматель оказался связан с тёмным культом или преступностью. |
| 5 |Банда преступников выбрала ваше дело как цель рэкета.|
| 6 |Вы получили репутацию лентяя (заслуженно или нет – на ваш выбор), следующие 6 проверок для этого вида деятельности в течение шести недель совершаются с помехой.|
Обычно поиск подходящего места и разбивка лагеря не вызывает трудностей у персонажей и не требует совершения проверок. Но непросто разбить лагерь, если вы полагаетесь только на матушку-природу в предоставлении вам комфортного убежища. 

Если у группы нет подходящего лагерного снаряжения для всех персонажей (такого как спальники или палатки) или магического способа обеспечить себе убежище (например, заклинание //Леомундова хижина//), Мастер может потребовать совершить проверку Мудрости (Выживание) с целью поиска природного убежища. Сл проверки определяется по таблице ниже в зависимости от местности.

| !Сл |!Описание окружения|
| 10 |Сухое и безопасное место просто найти / ясная погода|
| 15 |Поиск места для лагеря требует усилий / плохая погода - дождь, снег, туман и т.п.|
| 20 |Безопасное место сложно найти / ужасная погода - ливень, ураган, метель и т.п.|

При успехе вы находите подходящее для ночлега убежище. При провале вы безуспешно теряете 1 час на поиски. Вы можете повторять попытки, теряя по 1 часу на каждый провал. Это время считается временем, проведённым в путешествии, и подвергается правилу [[форсированного марша|Путешествие]].
В течении дня разведчик продвигается вперёд группы и высматривает потенциальную угрозу. Если разведчик провалится, вы можете попасть во вражескую засаду или вляпаться в иную неприятность.

Если вы взяли на себя роль разведчика, вы отвечаете за совершение проверок Мудрости (Внимательность) для обнаружения приближающихся угроз в течении дня. Мастер сообщит вам, если нужно совершить проверку.

''Успех''. Вы заметили угрозу и смогли вовремя предупредить группу. У вас есть шанс полностью избежать угрозы или встретить её на своих условиях.

''Провал''. Вы не успели вовремя заметить опасность, и группу застали врасплох.
Вы можете общаться любыми доступными вам средствами, короткими фразами и жестами.
Любое оружие имеет обозначение размерной категории, указывающее размер существа, для которого это оружие предназначено.

Использование оружия неподходящего размера:

* Вы не можете использовать оружие, отличающееся от вашего размера больше чем на одну размерную категорию
* Лёгкое оружие на размер больше считается для вас одноручным. Вы не можете пользоваться лёгким оружием на размер меньше.
* Одноручное оружие на размер больше считается для вас двуручным. Одноручное оружие на размер меньше считается для вас лёгким.
* Вы не можете пользоваться двуручным оружием на размер больше. Двуручное оружие на размер меньше считается для вас одноручным.
* Атаки оружием, размер которого отличается от размера владельца, совершаются с помехой. Вы можете избавиться от этого минуса, воспользовавшись услугами ремесленников, чтобы подогнать оружие под свой размер. Стоимость этой работы составляет от 5 до 20 процентов от рыночной стоимости предмета.
* Кость урона оружия изменяется с его размером. Таблица ниже дает значения урона для оружия от Крохотного до Огромного.

| !Крохотное | !Маленькое | !Среднее | !Большое | !Огромное |
| - | - | ''1'' | 1к2 | 1к4 |
| 1 | 1к2 | ''1к4'' | 1к6 | 1к10 |
| 1к2 | 1к4 | ''1к6'' | 2к4 | 3к4 |
| 1к4 | 1к6 | ''1к8'' | 1к10 | 4к4 |
| 1к4 | 1к6 | ''2к4'' | 3к4 | 2к10 |
| 1к6 | 1к8 | ''1к10'' | 2к8 | 2к12 |
| 1к8 | 1к10 | ''1к12'' | 4к4 | 4к6 |
| 2к4 | 1к10 | ''2к6'' | 3к6 | 3к10 |
| 1к10 | 1к12 | ''3к4'' | 2к10 | 3к10 |
| 2к6 | 3к4 | ''2к8'' | 3к8 | 6к6 |
| 3к4 | 2к8 | ''3к6'' | 3к10 | 7к6 |
| 2к8 | 4к4 | ''2к10'' | 3к10 | 7к6 |
| 2к10 | 2к12 | ''4к6'' | 6к6 | 7к8 |
[img [https://i.imgur.com/wJBifzA.png]]

Люди - наиболее распространённый народ в D&D, но они проживают бок о бок с дварфами, эльфами, полуросликами и другими бесчисленными фантастическими расами. Ваш персонаж принадлежит к одному из этих народов.

Не всякая разумная раса подходит для персонажа игрока. Стандартные группы искателей приключений в основном состоят из дварфов, эльфов, полуросликов и людей. Прочие расы и некоторые подрасы (например дроу - разновидность эльфов) встречаются реже.

Выбор расы влияет на разные аспекты вашего персонажа. Он определяет основные качества, которые будут у вашего персонажа на протяжении всей его карьеры. Раса персонажа даёт не только увеличение характеристик и расовые особенности, но также предоставляет зацепки для создания истории персонажа.

В описании каждой расы в этой главе содержится информация, которая поможет отыгрывать персонажа этой расы. Она включает в себя общие сведения о характере, внешнем виде, общественном укладе и преимущественном мировоззрении. Эти подробности — отправная точка для размышлений о вашем персонаже, искатели приключений могут существенно отличаться от среднего представителя своей расы. Для создания предыстории и личности персонажа стоит подумать, почему он не такой, как все.

---

!!!Расовые особенности
В описание каждой расы входят расовые особенности,общие для всех её представителей. Следующие разделы встречаются в описании большинства рас:

''Увеличение характеристик''

Каждая раса увеличивает одно или несколько значений характеристик.

''Возраст''

В этом разделе указывается, в каком возрасте представитель той или иной расы считается взрослым, а также примерная продолжительность его жизни. Вы можете начать игру персонажем любого возраста, и это может послужить обоснованием некоторых значений его характеристик. Например, при игре очень молодым или старым персонажем, возраст может быть причиной низких значений Силы или Телосложения, в то время как зрелый возраст хорошо объясняет высокие показатели Мудрости и Интеллекта.

''Мировоззрение''

Большинство рас имеют склонность к определённому мировоззрению, что и описано в данном разделе. Это никак не ограничивает вашего персонажа, но осознание, почему вопреки строго законопослушному обществу ваш дварф вырос хаотичным, поможет вам лучше вжиться в роль.

''Размер''

Персонажи большинства рас считаются Средними. В эту категорию попадают существа ростом от 120 до 250 см. Представители некоторых рас считаются Маленькими (от 65 до 120 см ростом), и из-за этого некоторые правила игры действуют на них по-другому.

''Скорость''

Скорость определяет, как далеко сможет продвинуться персонаж во время сражения.

''Языки''

В зависимости от расы, ваш персонаж может говорить, читать и писать на определённых языках. 

''Разновидности''

У некоторых рас есть разновидности. Их представители сочетают в себе качества основной расы с особенностями, присущими только этой разновидности. Отношения между представителями разных разновидностей одной расы могут существенно различаться в зависимости от расы и игрового мира.

---

!!!Перечень рас


<div class="tc-table-of-contents">
<<toc-selective-expandable "Расы" "sort[title]">>
</div>
Некоторые особые умения, заклинания и ситуации позволяют совершать особые действия, называемые реакциями. Реакция — это мгновенный ответ на срабатывание некоего условия, который может происходить как в ваш, так и в чужой ход. Провоцированная атака, которая будет описана ниже, — самый распространённый пример реакции. 

Если вы совершили реакцию, вы не сможете совершить вторую реакцию до начала своего следующего хода. Если реакция прерывала ход другого существа, это существо может продолжить свой ход после реакции. 


<<tabs "[tag[Реакции в бою]nsort[]]" "Атака" "$:/state/tab1" "tc-vertical">>
Вы можете действием попытаться оживить существо в состоянии клинической смерти, потратив одно использование //комплекта целителя//. Существо может быть оживлено, если оно мертво не более чем 1 + мод. Телосложения существа (минимум 1) раунд. 

Совершите проверку Мудрости (Медицина) со Сл 20. При провале Сл следующей проверки реанимации возрастает на 5. При успехе цель становится ''умирающей'' и может продолжать совершать //спасброски от смерти// в начале каждого своего раунда, пока не провалит один из них, после чего погибает и больше не может быть реанимирована.

Существо не может быть реанимировано повторно, пока не окончит ночлег.
Иногда лучшее, что можно сделать между приключениями, это отдохнуть. Независимо от того, хочет персонаж получить свой заработанный тяжким трудом отпуск или просто оправиться от травм, рекреация – идеальный вариант для искателей приключений, которым нужен перерыв. Этот вариант также идеально подходит игрокам, которые не хотят использовать систему деятельности на отдыхе. 

//''Ресурсы''//. Рекреация занимает одну неделю. Персонаж должен поддерживать хотя бы скромное существование во время отдыха, чтобы получить преимущества от этой деятельности. 

//''Определение результата''//. Персонажи, которые поддерживают хотя бы скромное существование во время рекреации, получают несколько преимуществ. Во время отдыха персонаж получает преимущество на спасброски против долгодействующих болезней и ядов. 

Кроме того, в конце недели персонаж может завершить действие одного эффекта, который мешает персонажу восстанавливать хиты, или может восстановить одну характеристику, значение которой было опущено ниже нормального значения. Это преимущество не может быть использовано, если вредоносный эффект был вызван заклинанием или иным постоянно действующим магическим эффектом. 

//''Осложнения''//. Рекреация редко приводит к осложнениям. 
Религиозные персонажи могут посвятить время простоя служению храму, помогая в проведении обрядов или проповедуя в народе. Тот, кто занимается этой деятельностью, может получить благосклонность высших иерархов храма. 

//''Ресурсы''//. Выполнение религиозной службы требует доступа в храм и частых его посещений. Вера и мораль храма должны совпадать с верой и моралью персонажа. Если такое место доступно, деятельность занимает одну неделю, но не требует расходов в виде серебра. 

//''Определение результата.''// В конце затраченного времени персонаж выбирает, какую проверку совершить – Интеллекта (Религия) или Харизмы (Убеждение). Результат проверки определяет полученные преимущества в соответствии с таблицей ниже.

| !Результат |!Последствия|
| 1-10 |Нет эффекта. Ваши усилия не производят стойкого впечатления.|
| 11-20 |Вы получаете одну благосклонность.|
| 21+ |Вы получаете две благосклонности.|

В общем смысле благосклонность – это обещание помощи от представителей храма. Его можно потратить на помощь храма в решении конкретной проблемы, на политическую или социальную поддержку со стороны храма или на снижение стоимости жреческого заклинания в 2 раза. Благосклонность может также принимать форму божественного вмешательства, такую как предзнаменование, видение или незначительное чудо, случившееся в ключевой момент. Таким образом благосклонность тратится по решению Мастера, он также определяет ее характер. 

Заработанную благосклонность не нужно тратить немедленно, но хранить можно только определённое их количество. Персонаж может иметь максимальное количество неиспользованных благосклонностей, равное 1 + модификатор Харизмы (минимум 1). 

//''Осложнения''//. Храмы могут быть лабиринтами политических и социальных интриг. Даже действующее из самых добрых побуждений религиозное течение может впасть во внутренние склоки. Служащий храму персонаж рискует быть втянутым в эти дрязги. За каждую неделю, потраченную на религиозное служение, с вероятностью 10% может возникнуть осложнение, примеры которых приведены в таблице ниже.

| !к6 |!Осложнение |
| 1 |Вы оскорбили священника словом или делом.|
| 2 |Богохульство всегда богохульство, даже случайное. |
| 3 |Секретная секта, находящаяся в храме, предлагает вам членство. |
| 4 |Другой храм пытается завербовать вас в качестве шпиона.|
| 5 |Старейшины храма умоляют вас взяться за выполнение священной миссии. |
| 6 |Вы случайно обнаружили что одна из ключевых фигур храма – дьяволопоклонник. |
Вы можете действием переместиться в пространство согласного дееспособного существа, находящегося в пределах 1 м от вас. Существо перемещается в пространство, которое вы занимали до этого. Вы и перемещаемое существо должны умещаться (не протискиваться) в пространство, в которое перемещаетесь. Это перемещение не провоцирует атаки, не должно тратить дополнительную скорость (труднопроходимая местность, карабканье, ползание и т.п.), а ваша скорость и скорость существа должна быть выше 0.
Вы можете использовать к6 вместо обычной кости урона ваших безоружных ударов, либо к8, если обе ваши руки свободны. Когда вы успешно захватываете цель, вы можете нанести ей 1к4 дробящего урона. Пока вы удерживаете цель в захвате, вы можете наносить ей этот урон всякий раз, когда попадаете по ней рукопашной атакой.
[img [https://i.imgur.com/lYaBvye.png]]
Если вы совершаете действие Рывок, вы получаете дополнительное перемещение в текущем ходу, равное вашей скорости после применения всех модификаторов.
[img [https://i.imgur.com/lYaBvye.png]]
* Вы способны перемещаться только ползком, пока не встанете, прервав тем самым это состояние.
* Вы совершаете броски атаки с помехой.
* Броски атаки по вам совершаются с преимуществом, если нападающий находится в пределах 1 м от вас. В противном случае они совершаются с помехой.
| !_к100_ |!Событие  |
| 01-05 |Вы были околдованы феей и пленены на 1к6 лет, прежде чем сумели освободиться.  |
| 06-10 |Вы видели демона и сумели сбежать прежде, чем он смог что-либо совершить с вами.  |
| 11-15 |Вы были соблазнены дьяволом. Совершите спасбросок Мудрости со Сл 10. При провале вы должны дьяволу услугу и начинаете игру с дополнительными 1к20 + 50 см.  |
| 16-20 |Однажды утром вы проснулись за много километров от вашего дома, не имея понятия, как это случилось.  |
| 21-30 |Вы посетили некое священное место, где почувствовали божественное присутствие.  |
| 31-40 |Вы видели красную комету, лицо, появившееся среди метели, или другое странное событие. Для вас очевидно, что это – некое предзнаменование.  |
| 41-50 |Вы избежали верной гибели и верите, что вас спасло вмешательство божества.  |
| 51-60 |Вы стали свидетелем небольшого чуда.  |
| 61-70 |Вы исследовали пустующий дом и обнаружили, что он населён призраками.  |
| 71-75 |Вы были недолго одержимы некой сущностью. Бросьте к6, чтобы определить тип сущности: 1 – небожитель; 2 – дьявол; 3 – демон; 4 – фея; 5 – элементаль; 6 – нежить.  |
| 76-80 |Вы видели привидение.  |
| 81-85 |Вы видели упыря, пожирающего мёртвое тело.  |
| 86-90 |Небожитель или божество посетили вас в ваших снах, чтобы предупредить о надвигающейся угрозе.  |
| 91-95 |Вы ненадолго оказались в Стране Фей или в Царстве Теней.  |
| 96-00 |Вы видели портал, который, по вашему убеждению, ведёт на другой план существования. |
Ваш ход может содержать множество других мелких действий, не являющихся притом перемещением. 

<<tabs "[tag[Свободное действие]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
//''Внезапное''//. Если вы владеете этим оружием, ваши рукопашные атаки этим оружием игнорируют бонус к КД от щита цели.

---

//''Грубое''//. Атакуя грубым оружием, вы используете модификатор Силы при совершении бросков атаки и урона.

---

//''Длинное''//. Длинное оружие дает вам возможность наносить удары по противникам, стоящим от вас в 2 м, но вы совершаете с помехой атаки по противникам, находящимся в пределах 1 м от вас. Это свойство игнорируется при езде верхом.

---

//''Закреплённое''//. Вас нельзя лишить этого оружия особой атакой Обезоруживание, кроме как критическим попаданием.

---

//''Летальное''//. При критическом попадании этим оружием вы совершаете с преимуществом броски по таблице критических попаданий.

---

//''Механическое''//.

* Вы не добавляете модификатор характеристики к броскам урона этим оружием. 
* Из-за долгой перезарядки этого оружия вы можете выстрелить из него только один боеприпас одним действием, бонусным действием или реакцией, вне зависимости от количества положенных атак. Вы можете перезарядить такое оружие, потратив на это бонусное действие. 
* Атаки этим оружием из положения лёжа совершаются без помехи.

---

//''Обезоруживающее''//. Если вы владеете этим оружием, вы совершаете бросок особой атаки Обезоруживание с преимуществом.

---

//''Особое.''// Оружие с этим свойством используется по специальным правилам, указанным в его описании.

---

//''Подсекающее''//. Если вы владеете этим оружием, вы получаете преимущество к проверке Силы (Атлетика) при совершении особой атаки Толкание с намерением сбить цель с ног.

---

//''Скрытное''//. Если вы владеете этим оружием, вы получаете преимущество к проверке Ловкости (Ловкость рук) при попытке спрятать это оружие на своем теле.

---

//''Хрупкое''//. Если вы выбрасываете «1» при броске атаки этим оружием, оно ломается. Атаки сломанным оружием совершаются с помехой. Если вы выбрасываете «1» при броске атаки сломанным оружием, оно уничтожается.

<<tabs "[tag[Священная клятва]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
[img width=410 class="centerme" [https://i.imgur.com/ZC5V4tp.png]]

Серые орки ведут кочевой образ жизни. В их внешности меньше звериных черт, чем у их горных собратьев, а их кожа имеет серый оттенок. Они обитают в отдалённых пустынных уголках мира и влекут скудное существование, путешествуя между лагерями и пещерами от сезона к сезону. Хоть подобная варварская жизнь и комфортна для серых орков, они обычно более спокойные и собранные. Серые орки научились направлять свою ярость и ненависть внутрь себя, что позволяет им преуспевать в роли жрецов воинственных божеств. Серые орки - фанатики, а слово их племенных жрецов - закон. Жрецы из других племен обычно считаются еретиками, несмотря на тот факт, что скорее всего оба племени почитают одно и то же божество.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значения вашего Телосложения или Мудрости на ваш выбор увеличиваются на 1. |
|^Набожный |^Вы владеете навыком Религия. |
|^Кровавое бешенство |^Запах крови в разгаре битвы наполняет вас гневом. Если у вас осталось меньше половины от вашего максимума хитов, вы можете заменить одну из своих рукопашных атак свирепой атакой. Если эта атака попадает, вы получаете временные хиты в количестве равном вашему модификатору Телосложения, а цель должна преуспеть в спасброске Мудрости (Сл =  8 + ваш мод. Харизмы + ваш бонус мастерства) или будет испугана вами до конца своего следующего хода. Вы не можете использовать эту особенность повторно, пока не завершите короткий или продолжительный отдых. Вы можете использовать эту особенность против существа, которое опустило хиты вашего союзника до 0 в свой последний ход, независимо от того сколько у вас хитов, и не тратя её использование. |
[img width=330 class="centerme" [https://i.imgur.com/JVCsvYN.png]]

Скальные гномы выделяются своей изобретательностью и стойкостью. Большинство гномов в мирах D&D являются скальными.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Телосложения увеличивается на 1. |
|^Всё, что под рукой |^Вы владеете импровизированным оружием. Ваша кость урона импровизированным оружием - 1к4, вместо 1к2. |
|^Жестянщик |^Вы владеете инструментами ремонтника. С их помощью вы можете, потратив 1 час времени и материалы на сумму в 10 cм, создать Крошечное механическое устройство (КД 5, 1 хит). Это устройство перестаёт работать через 24 часа (если вы не потратите 1 час на поддержание его работы). Вы можете действием разобрать его; в этом случае вы можете получить обратно использованные материалы. Одновременно вы можете иметь не более трёх таких устройств. При создании устройства выберите один из следующих вариантов: |
|~|^//Заводная игрушка.// Эта заводная игрушка изображает животное, чудовище или существо, вроде лягушки, мыши, птицы, дракона или солдатика. Поставленная на землю, она проходит 1 м в случайном направлении за каждый ваш ход, издавая звуки, соответствующие изображаемому существу. |
|~|^//Зажигалка.// Это устройство производит миниатюрный огонёк, с помощью которого можно зажечь свечу, факел или костёр. Использование этого устройства требует действия. |
|~|^//Музыкальная шкатулка. //При открытии эта шкатулка проигрывает мелодию средней громкости. Шкатулка перестаёт играть если мелодия закончилась или если шкатулку закрыли. |
|^Ремесленные знания |^При совершении проверки Интеллекта (История) применительно к магическому, алхимическому или технологическому объекту, вы можете добавить к проверке удвоенный бонус мастерства вместо обычного. |


[img [https://i.imgur.com/lYaBvye.png]]
* Вы [[схвачены|Схваченный]] и [[опутанны|Опутанный]].
* Вы не можете совершать действия и реакции, кроме попытки высвобождения или сотворения заклинания, не требующего соматических или материальных компонентов.
* Вы не добавляете модификатор Ловкости и бонус от щита к своему КД.
* Состояние оканчивается, если вы перестаёте быть [[схваченным|Схваченный]] или [[опутанным|Опутанный]].
Скромное существование выводит вас из трущоб и означает, что вы можете поддерживать своё снаряжение. Вы живёте в старой части города, снимая комнату в пансионе, на постоялом дворе или в храме. Вас не мучают голод и жажда, и вы живёте в чистоте, хотя и по-простецки. Скромное существование ведут солдаты и их семьи, разнорабочие, студенты, священники, начинающие волшебники и другие.
//Стоимость перемещения:// +1 м за 1 м.

Вы можете попытаться переместиться незаметно для существа, которое не видит вас, совершив проверку Ловкости (Скрытность) против его пассивной Внимательности. Если вы станете видимы для существа во время перемещения, оно тот же обнаружит вас.
[img width=325 class="centerme" [https://i.imgur.com/2FtVeC6.png]]

<<tabs "[[Описание следопытов]] [[Классовые умения следопытов]] [[Архетипы следопыта]]" "" "$:/state/tab1">>

!!!Мгновенная смерть
Большой урон может убить вас мгновенно. Если урон опускает ваши хиты до 0, и ещё остаются излишки, вы умираете, если излишки равны максимуму ваших хитов или превышают его.

---

!!!Спасброски от смерти
В отличие от других спасбросков, спасброски от смерти не привязаны ни к какой характеристике. Теперь вы находитесь в руках судьбы, и помочь вам могут только заклинания и умения, улучшающие шансы на совершение успешных спасбросков. Совершите бросок к20 и свертесь с таблицей ниже, чтобы определить результат.

| !к20 |!Результат |
| 01 |Вы получаете два провала. |
| 02-09 |Вы получаете один провал. |
| 10-19 |Без изменений. |
| 20 |Вы восстанавливаете 1 хит. |

Вы уменьшаете количество проваленных спасбросков от смерти на 1 в конце продолжительного отдыха.

---

!!!Стабилизация существа
Самый надёжный способ помочь существу с 0 хитов это его лечение. Если лечение недоступно, существо можно хотя бы стабилизировать, чтобы оно не умерло от проваленного спасброска от смерти. 

Вы можете действием оказать первую помощь находящемуся без сознания существу и попытаться стабилизировать его, для чего требуется потратить одно использование //комплекта целителя// или //инструментов хирурга// и совершить проверку Мудрости (Медицина) со Сл 10. Если вы используете подручные средства вместо надлежащих инструментов, совершите проверку с помехой.

''Стабилизированное'' существо перестает быть ''умирающим'', но становится ''бессознательным'', пока не восстановит хотя бы 1 хит. Получив урон, существо снова становится ''умирающим''. ''Стабилизированное'' существо, не получившее лечения, восстанавливает 1 хит после 1к4 часов.

Получение временных хитов не приводит вас в сознание и не стабилизирует вас. Они всё ещё могут поглощать урон, причиняемый вам, но спасти вас может только настоящее лечение.

---

!!!Нокаутирование существа
Иногда нападающий хочет обезвредить врага, а не убивать его. Если атакующий опускает хиты существа до 0 рукопашной атакой, он может заявить, что нокаутирует его. Этот выбор можно сделать уже после причинения урона.

В этом случае цель теряет сознание, и может быть приведена в чувство оказанием первой помощи или лечением. Если цель не получает помощи или лечения, оно восстанавливает 1 хит и приходит в сознание через 1к4 часа.

---

!!!Чудовища и смерть
Большинство чудовищ под управлением Мастера сразу умирают, когда их хиты опускаются до 0.

Могущественные злодеи и особые неигровые персонажи могут стать исключением; Мастер может позволить им использовать правила, предназначенные для персонажей игроков.
Персонаж может выпить одно зелье, пока находится под действием другого, или попытаться смешать несколько зелий в одной ёмкости. В этом случае, необычные ингредиенты, используемые в создании зелий, могут привести к непредсказуемым последствиям. 

Когда персонаж смешивает две зелья вместе, Мастер совершает бросок к100 по таблице «Смешивание зелий». 

!!!Смешивание зелий
| !_к100_ |!Результат|
| 01 |Смесь взрывается, нанося персвонажу 6к10 урона силовым полем, а также 1к10 урона силовым полем всем существам в радиусе1 м от него. |
| 02–08  |Смесь становится пищевым ядом по выбору Мастера. |
| 09–15  |Оба зелья теряют свои свойства. |
| 16–25 |Одно из зелий теряет свои свойства. |
| 26–35 |Оба зелья продолжают работать, но их численные эффекты снижаются наполовину. Если в силу особенностей зелья эффект нельзя понизить, то зелье не работает. |
| 36–90 |Оба зелья работают нормально. |
| 91–99 |Численные эффекты и длительность действия одного из зелий удваиваются. Если ни одно зелье не может быть модифицировано таким образом, то в этом случае они работают как обычно. |
| 00 |Только одно зелье продолжает работать, но его эффект становится постоянным. Выберите наиболее простой эффект для того, чтобы сделать его постоянным, или же тот, который кажется вам наиболее забавным. Например, зелье лечения может увеличить максимум хитов на 4, а масло эфирности может навсегда заточить персонажа на Эфирном Плане. На ваше усмотрение, назначьте заклинание, такое как рассеивание магии или снятие проклятья, которое может рассеять этот длительный эффект. |
[[Актуальные таблицы снаряжения|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=677870806]]
<div class="tc-table-of-contents">
<<toc-selective-expandable "Содержание">>
</div>
<div class="tc-table-of-contents">
<<toc-selective-expandable "Создание персонажа">>
</div>
Имея достаточно времени и терпения, заклинатель может перенести заклинание на свиток, создав свиток заклинания. Под свитком в данном случае может пониматься любой носитель информации на который можно записать заклинание и с которого его можно скопировать в книгу заклинаний. Например: береста, кусок кожи, глиняная скрижаль и т.д. 

//''Ресурсы''//. Создание свитка заклинания требует времени и денег в зависимости от уровня заклинания, которое персонаж хочет записать. 

Кроме того, персонаж должен владеть навыком Магия и использовать все материальные компоненты, необходимые для заклинания. А также, чтобы написать свиток, персонаж должен подготовить это заклинание или оно должно быть в списке известных персонажу заклинаний. 

Если записываемое заклинание – заговор, то версия, записанная на свитке, будет работать так, как если бы заклинатель был 1 уровня. 

| !Уровень заклинания |!Время |!Затраты|
| Заговор |1 день |15 cм|
| 1 |1 день |25 cм|
| 2 |3 дня |250 cм|
| 3 |1 рабочая неделя |500 cм|
| 4 |2 рабочих недели |2500 cм|
| 5 |4 рабочих недели |5000 cм|
| 6 |8 рабочих недель |15000 cм|
| 7 |16 рабочих недель |25000 cм|
| 8 |32 рабочих недели |50000 cм|
| 9 |48 рабочих недель |250000 cм|

//''Осложнение''//. Создание свитка заклинания – это затворническое дело, которое не привлекает к себе особого внимания. Осложнения, скорее всего, будут связаны с подготовкой к этому виду деятельности. 

Каждую неделю, потраченную на написание свитка, существует 10% шанс что произойдёт осложнение, примеры которых можно найти в таблице ниже. 

| !к6 |!Осложнение |
| 1 |Вы купили последние редкие чернила, использующиеся для создания свитков, чем рассердили городского волшебника. |
| 2 |Священник из храма доброго божества обвиняет вас в использовании тёмной магии.|
| 3 |Волшебник, желающий получить одно из ваших заклинаний, пытается заставить вас продать ему свиток. |
| 4 |Из-за странной ошибки, совершённой при создании свитка, он содержит случайное заклинание того же уровня. |
| 5 |На редком пергаменте, купленном для написания свитка, видна еле заметная карта. |
| 6 |В вашу мастерскую попытался проникнуть вор. |
Многие заклинания создают очевидные эффекты: огненные взрывы, стены льда, телепортацию и тому подобное. Другие заклинания, такие как //очарование личности//, не показывают видимых, слышимых или других ощутимых признаков от эффекта, и могут легко остаться незамеченными кем-то, кто ими не затронут. Вы обычно не знаете, что за заклинание было применено, если оно не создаёт видимого эффекта.

Сотворение заклинания может быть замечено, если оно включает вербальный, соматический или материальный компонент. Форма материального компонента не имеет значения, будь то объект, указанный в описании заклинания, мешочек с компонентами или магическая фокусировка.

В некоторых ситуациях вы можете попытаться сокрыть факт сотворения своего заклинания или выдать его за не представляющий угрозы эффект: 

* Совершите проверку Ловкости/Интеллекта/Мудрости (Скрытность) на ваш выбор против пассивной Внимательности, если за вами нет активного наблюдения, или против проверки Мудрости (Внимательность), если за вами наблюдают. 
* Если сотворение заклинания включает в себя больше одного компонента, то проверка заклинателя совершается с помехой.
* Окружающий шум или большое количество движения могут дать преимущество на проверку заклинателя.
* Если наблюдателю известно, что сотворяющий является заклинателем, он совершает свою проверку Мудрости (Внимательность) с преимуществом.


```
Сокрытие сотворения заклинания требует концентрацию.
```

---

Если потребность в компонентах для заклинания была отброшена с помощью специальных умений, таких как «Неуловимое заклинание» чародея или «Врождённое колдовство», которым обладают многие существа, то заклинание незаметно. Если незаметное сотворение заклинания создаёт видимый эффект, обычно невозможно определить, кто сотворил заклинание, не имея других доказательств.

Сколько вы помните, в вашей жизни всегда была война. С молодости вы проходили тренировки, учились использовать оружие и доспехи, изучали технику выживания, включая то, как оставаться живым на поле боя. Вы могли быть частью армии страны или отряда наёмников, а может, были местным ополченцем во время войны.

Выбрав эту предысторию, определите вместе с Мастером, в какой военной организации вы состояли, до какого звания вы дослужились, и что вам за это время довелось пережить.

* ''Владение навыками:'' Атлетика, Запугивание
* ''Владение инструментами:'' Один [[игровой набор,|Игровой набор]] [[наземный транспорт|Наземный и водный транспорт]]
* ''Экипировка:'' Знак отличия, трофей с убитого врага (кинжал, сломанный клинок или кусок знамени), игровой набор, которым вы владеете, комплект одежды солдата, кошель с 10 см

!!!Специализация
Будучи солдатом, вы выполняли особую роль. Совершите бросок к8 или выберите один из вариантов из таблицы самостоятельно:

| !к8 |!Специализация | !к8 |!Специализация |
|  1  |Офицер        |  5  |Врач    |
|  2  |Разведчик       |  6  |Интендант      |
|  3  |Пехотинец        |  7  |Знаменосец     |
|  4  |Кавалерист       |  8  |Обслуживающий персонал (повар, кузнец, и т. п.)     |

!!!Умение: Воинское звание
Будучи солдатом, вы заслужили звание. Солдаты, верные военной организации, которой вы раньше принадлежали, всё ещё признают вашу власть и влияние, и они подчиняются вам, если их звание ниже вашего. С помощью своего звания вы можете оказывать влияние на других солдат и брать во временное пользование простое снаряжение или лошадей. Возможно, вас пропустят внутрь военного лагеря или крепости, если к вашему званию отнесутся с уважением.

---

!!!Разновидность солдата: Городской стражник
Вы служили сообществу, в котором выросли, являясь первой линией обороны от преступного мира. Вы не солдат, чей взгляд скорее смотрит на внешних врагов. Вместо этого, ваша служба родному городу это охрана местного населения, защита жителей от правонарушителей и злоумышленников всех мастей.

Если вы решите, что во время службы вы занимались защитой поселения, вы владеете навыком Проницательность вместо навыка Запугивание, дополнительным языком вместо владения наземным транспортом, и можете выбрать умение Намётанный глаз вместо умения Воинское звание.


<<<
!!!Альтернативное умение: Намётанный глаз
Ваш опыт блюстителя закона и общения с правонарушителями, дает вам возможность легко понять местные законы и положение дел в преступном мире. Вы можете легко найти местный опорный пункт стражи, или подобной организации, и так же легко определить логово преступников в общине.
<<<

---

!!!Разновидность солдата: Наёмник
Будучи наёмником, сражающимся за звонкую монету, вы хорошо знакомы с риском для жизни и конечностей за долю в добыче. Теперь, вы смотрите в будущее уже в качестве искателя приключений, где также предстоят сражения с врагом, но гонорары больше. Вы опытны в том, что такое быть наёмником, и у вас наверняка имеются душераздирающие истории о событиях на поле боя. Вы могли служить в крупной организации, солдатом наёмной армии, или в небольшом отряде, а возможно и не одном. 

Теперь вы ищете нечто иное, возможно большее вознаграждение за риск, которому вы подвергаетесь, или свободу выбора вашей деятельности. По какой бы причине вы не оставили позади жизнь наёмного солдата, ваши навыки несомненно подходят именно для битв, потому вы продолжаете сражаться, но теперь всё по-другому. 

Если вы решите, что вы служили рыцарем ордена, вы владеете навыком Убеждение вместо навыка Запугивание, и можете выбрать умение Жизнь наёмника вместо умения Воинское звание.

<<<
!!!Альтернативное умение: Жизнь наёмника
Вы знаете жизнь наёмника так, как может только тот, кто испытал её на себе. Вы можете распознать компании наемников по их эмблемам и немного знаете о любой такой компании, в том числе о их последнем нанимателе. Вы можете найти таверны и корчмы, где обитают наемники, в любой области, если вы говорите на местном языке. 
<<<

---

!!!Разновидность солдата: Рыцарь ордена
Вы принадлежите к рыцарскому ордену, давшему клятву добиться определенной цели. Суть цели зависит от того, какому ордену вы служите, но для вас эта цель является жизненно важным и достойным делом, не подлежащим обсуждению. Многие рыцарские ордена имеют схожие взгляды на свои действия и возложенные на себя обязанности. 

Несмотря на то, что понятие «рыцарь» ассоциируется с тяжеловооруженным всадником благородных кровей, большинство рыцарских орденов не накладывают подобных ограничений на своих членов. Ордена ставят свои цели и философию выше снаряжения и стиля боя своих рыцарей, так что большинство орденов открыты для всех желающих сражаться и умирать за дело ордена, не ограничиваясь в способах ведения боевых действий. 

Если вы решите, что вы служили рыцарем ордена, вы владеете навыком История вместо навыка Запугивание, дополнительным языком вместо владения наземным транспортом, и можете выбрать умение Рыцарское почтение вместо умения Воинское звание.

<<<
!!!Альтернативное умение: Рыцарское почтение
Вы получаете убежище и поддержку от членов вашего рыцарского ордена и тех, кто поддерживает его цели. Если ваш орден религиозный, вы можете получить помощь от храмов и других религиозных общин вашего божества. Рыцари гражданских орденов могут получить помощь от сообщества - будь то одинокое поселение или огромная страна - которому они служат, а рыцари философских орденов могут найти помощь у тех, кому они помогали в достижении своих идеалов, и у тех, кто разделяет эти идеалы.

Эта помощь приходит в виде ночлега и еды, а также в виде исцеления, когда это необходимо, но может выражаться и в рискованной помощи, например, когда группа
местных граждан вступает в неравный бой на стороне припёртого к стенке рыцаря, или поддерживающие орден помогают незаметно покинуть город несправедливо обвинённому рыцарю.
<<<

---


!!!Персонализация
Ужасы войны вкупе с жёсткой дисциплиной воинской службы оставляют следы на всех солдатах, формируя их идеалы, создавая привязанности, а также оставляя на них шрамы, как физические, так и ментальные.

| !к8 |!Черта характера |
| 1 |Я всегда вежлив и почтителен. |
| 2 |Меня терзают воспоминания о войне. Не могу забыть то насилие, что мне довелось увидеть. |
| 3 |Я потерял много друзей, и теперь с трудом завожу новых. |
| 4 |Я решаю проблемы прямолинейно. Простое решение — лучший путь к успеху. |
| 5 |У меня много воодушевляющих и предостерегающих рассказов из военного прошлого, подходящих практически к любой боевой ситуации. |
| 6 |Я могу смотреть прямо на адскую гончую, не отводя глаз. |
| 7 |Мне нравится быть сильным и крушить вещи. |
| 8 |У меня грубое чувство юмора. |

| !к6 |!Идеал |
| 1 |''Высшее благо.'' Наш жребий — отдать свои жизни ради других. |
| 2 |''Ответственность.'' Я делаю что должен, и подчиняюсь вышестоящим. |
| 3 |''Независимость.'' Если слепо следовать приказам, попадаешь под пяту тирании. |
| 4 |''Мощь.'' В жизни и войне побеждает сильнейший. |
| 5 |''Живи и не мешай другим.'' Идеалы не стоят того, чтобы ради них убивать или воевать. |
| 6 |''Нация.'' Мой город, нация и народ — вот что самое главное. |

| !к6 |!Привязанность |
| 1 |Я по-прежнему готов отдать свою жизнь за тех, кому поклялся служить. |
| 2 |Кое-кто спас мне жизнь на поле боя. С тех пор я никогда не оставляю друзей, оставшихся в бою. |
| 3 |Моя честь — моя жизнь. |
| 4 |Никогда не забуду сокрушительное поражение, которое потерпел наш отряд, или врага, устроившего это. |
| 5 |Те, кто сражаются рядом со мной, достойны того, чтобы за них умереть. |
| 6 |Я сражаюсь за тех, кто не может это сделать сам. |

| !к6 |!Слабость |
| 1 |Одно чудовище, с которым мы когда-то сразились, до сих пор заставляет меня дрожать от страха. |
| 2 |Я мало уважаю тех, кто не доказал, что является достойным воителем. |
| 3 |В одном сражении я совершил ужасную ошибку, стоившую жизни многим — и я сделаю что угодно, лишь бы это оставалось в тайне. |
| 4 |Ярость к врагам ослепляет меня и делает безрассудным. |
| 5 |Я подчиняюсь закону, даже если закон вызывает страдания. |
| 6 |Я скорее съем свой доспех, чем признаюсь, что был неправ. |
Иногда лучший способ очистить свой разум - это отключить его на некоторое время. Отдых - лучшее лекарство. Для сна персонажу требуется обычно 8 часов в сутки. Когда существо спит, оно находится в [[бессознательном|Бессознательный]] состоянии.

Непотревоженный сон восстанавливает одну потраченную Кость Хитов и снижает степень истощения на 1, при условии, что существо в течении дня употребило как минимум половину требуемого количества [[пищи и воды|Голод и жажда]].

---

!!!Без сна
Когда вы заканчиваете 24-часовой период, не поспав необходимое количество часов, вы должны пройти проверку Телосложения (Выносливость) со Сл 10 + 5 за каждые сутки без сна, иначе получите одну степень [[истощения|Истощённый]].

Счётчик дней без сна обнуляется, если у существа нет степеней истощения, полученных от недосыпа.

---

!!!Сон в доспехах
Доспехи, хоть и спасают вашу жизнь в битвах, лишают вас возможности комфортно отдохнуть. Сон в средних или тяжёлых доспехах не восстанавливает Кости Хитов и не снижает степень истощения.

---

!!!Транс
Представители некоторых рас не спят привычным людям образом. Вместо этого они впадают в состояние медитации, называемое Трансом. В этом состоянии ваш персонаж полусознателен и вы совершаете проверки Мудрости (Внимательность) с помехой.

---

!!!Пробуждение 
Существо, которое спит по естественным причинам, в отличие от усыплённых магическим или химическим путём, просыпается, если получает любой урон, а также если кто-то другой действием встряхнёт его или разбудит пощёчиной. 

Внезапный громкий шум, такой как вопль, раскат грома, или колокольный звон, также будит спящих по естественным причинам. 

Шёпот не тревожит сон, кроме случаев, когда пассивное Восприятие спящего 20 и более, а источник шёпота в пределах 2 м от спящего. 

Речь с обычной громкостью будит спящего, если без неё вокруг тихо (нет ветра, пения птиц, сверчков, уличных звуков и подобного), а спящий имеет пассивное Восприятие 15 и выше. 
<div class="tc-table-of-contents">
<<toc-selective-expandable "Состояние персонажа">>
</div>
Состояния различными способами изменяют возможности существа и могут являться следствием заклинания, классового умения, атаки чудовища или другого эффекта. Большинство состояний, вроде состояния «ослеплённый», негативны, но некоторые из них, например, «невидим», могут быть полезны.

Состояние длится до тех пор, пока не будет прервано (например, состояние «сбитый с ног» прерывается, когда существо встаёт) или в течение времени, которое указано в эффекте, вызвавшем это состояние.

Если разные эффекты вводят существо в одно и то же состояние, каждый из случаев имеет отдельную длительность, но эффекты состояния не становятся сильнее. Существо либо имеет состояние, либо не имеет его.

Приведённые ниже описания определяют, что происходит с персонажем в том или ином состоянии.

<<tabs "[tag[Описания состояний]nsort[]]" "Бессознательный" "$:/state/tab1" "tc-vertical">>
Заклинатели, такие как волшебники и жрецы, а также многие чудовища, имеют доступ к заклинаниям, и могут очень эффективно использовать их в сражении. У каждого заклинания есть время сотворения, измеряющееся в действиях, минутах или даже часах. У большинства заклинаний время сотворения «1 действие», поэтому заклинатели часто тратят действие на сотворение заклинаний. 

Вы не можете сотворить заклинание основным действием и другое заклинание бонусным действием за один ход, кроме случаев, когда одним из действий было сотворено заклинание не выше 2 уровня.

Цель заклинания должна находиться в пределах дистанции заклинания. Цель также должна быть в прямой видимости - поэтому у цели не должно быть полного укрытия.

Заклинания с материальным компонентом не расходуют компонент при сотворении, если обратное не сказано в описании заклинания. Если для компонента указана стоимость, то этот компонент расходуется при сотворении.

Некоторые заклинания требуют от вас сохранения концентрации для поддерживания магии в активном состоянии. Если вы потеряете концентрацию, такое заклинание оканчивается. Вы можете окончить концентрацию в любое время (действие не требуется). Нормальная деятельность, такая как перемещение и сражение, не прерывают концентрацию. Её могут прервать следующие события: сотворение другого заклинания, требующего концентрацию; получение урона; недееспособность или смерть.
<<tabs "[tag[Специализация изобретателя]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
<<tabs "[tag[Изменения]!sort[created]]" "17.06.20" "$:/state/tab1" "tc-vertical">>
<div class="tc-table-of-contents">
<<toc-selective-expandable "Сражение">>
</div>
Если у вас выпало «1» или «2» на кости урона оружия при атаке, которую вы совершали рукопашным оружием, удерживая его двумя руками, то вы можете перебросить эту кость, и должны использовать новый результат, даже если снова выпало «1» или «2».
Если вы сражаетесь двумя оружиями, вы можете добавить модификатор характеристики к урону от второй атаки. Оружие со свойством "механическое" является исключением.
Средние доспехи предлагают лучшую защиту, чем лёгкие, но немного ограничивают перемещение. Если вы носите средний доспех, вы при определении Класса Доспеха к базовому числу, предоставленному доспехом, добавляете модификатор Ловкости, но не более +2. Под средними доспехами необходимо носить дублет, его стоимость включена в цену доспеха.

//''Ламеллярный''//. Доспех из сплетённых между собой шнуром кожаных, металлических или, реже, деревянных пластин в виде корсета-кирасы с длинным подолом и оплечьями.

//''Кольчужная рубаха''//. Сделанная из переплетённых металлических колец кольчужная рубаха носится между слоями одежды или кожи. Кольчужную рубаху можно улучшить до кольчуги за разницу в цене.

//''Бригантина''//. Доспех из мелких металлических пластин, наклёпанных под кожаную или стёганную основу. Бригантину можно улучшить до наборного доспеха за разницу в цене.

//''Кираса''//. Этот доспех состоит из подогнанного металлического панциря, носимого с подкладкой из кожи. Несмотря на то, что руки и ноги остаются практически без защиты, этот доспех хорошо защищает жизненно важные органы, оставляя владельцу относительную подвижность. Кирасу можно улучшить до полулат за разницу в цене.

//''Полулаты''//. Полулаты состоят из сформированных металлических пластин, покрывающих большую часть тела владельца. В них не входит защита для ног кроме простых поножей, закреплённых кожаными ремнями. Полулаты можно улучшить до лат за разницу в цене.

//''Средний щит. ''//Самый популярный тип щитов, повсеместно использующийся пехотинцами. Средние щиты эффективны на поле боя, а также легки и дешевы в изготовлении.
[img [https://i.imgur.com/lYaBvye.png]]
| !к12 |!Что произошло |
| 1 |Вас обратили в жабу, которой вы оставались в течение 1к4 недель.  |
| 2 |Вас обратили в камень, и вы оставались в виде каменной статуи некоторое время, пока кто-то не освободил вас.  |
| 3 |Вы попали в рабство к карге, сатиру или кому-то другому, и провели так 1к6 лет.  |
| 4 |Дракон держал вас в качестве заложника 1к4 месяца, пока группа искателей приключений не убила его.  |
| 5 |Вас взяли в плен злые гуманоиды вроде куо-тоа или квагготов. В Подземье вы жили как раб, пока вам не удалось сбежать.  |
| 6 |Вы служили могущественному искателю приключений в качестве наёмника. Недавно вы ушли с этой службы. Воспользуйтесь дополнительными таблицами и обсудите с вашим Мастером базовые детали относительно вашего прошлого нанимателя.  |
| 7 |Вы потеряли рассудок на 1к6 лет, но недавно он вернулся к вам. У вас, возможно, сохранился тик или какая-то другая странность в поведении.  |
| 8 |Ваш возлюбленный в тайне был серебряным драконом.  |
| 9 |Вас взял в плен культ и почти принёс в жертву на алтаре сущности, которой служили культисты. Вы сбежали, но боитесь, что они найдут вас.  |
| 10 |Вы встречались с полубогом, архидьяволом, архифеей, владыкой демонов или титаном, выжили и можете рассказать об этом.  |
| 11 |Вас проглотила гигантская рыба, и вы провели месяц внутри неё, прежде чем вам удалось выбраться.  |
| 12 |Могущественное существо готово было исполнить ваше желание, но вы прошляпили этот шанс на что-то глупое.  |
[img width=420 class="centerme" [https://i.imgur.com/eJttIWW.png]]

|!Особенность |!Описание |
|^Крылья |^Ваша часть истинного дракона проявилась в виде драконьих крыльев. При падении вы можете реакцией замедлить свою скорость падения 12 м в раунд. Опускаясь таким образом, вы не получаете урон от падение и можете приземлиться на ноги, кроме того, вы можете перемещаться на 1 метр в горизонтальной плоскости за каждый метр падения. При достижении 6 уровня вы один раз можете бонусным действием наделить себя скоростью полёта 6 м на 1 минуту. Вы не можете использовать эту особенность повторно, пока не завершите продолжительный отдых. При достижении 14 уровня вы получаете постоянную скорость полёта 6 м. Если у вас уже есть скорость полёта, вместо этого она увеличивается на 4 м. Чтобы использовать эту скорость, вы не должны носить тяжёлые доспехи и щиты. Силы ваших крыльев достаточно только для подъёма одного существа размером не больше вашего. Ваши доспехи должны быть специально подогнаны под ваши крылья. Подгонка доспеха требует четырёх часов работы опытного ремесленника и оплату в размере половины стоимости доспеха.  |
|^Улучшенное сопротивление |^В вашей крови проявляется устойчивость истинного дракона. Вы можете один раз перебросить проваленный спасбросок, при этом вы должны использовать новый результат. Использовав эту особенность, вы не можете использовать её повторно, пока не завершите продолжительный отдых. |
Нахождение в 1 м от враждебного существа не накладывает помеху на ваши броски атаки стрелковым оружием. 
Ваши атаки стрелковым оружием по целям в пределах 6 м от вас игнорируют укрытие на половину и укрытие на три четверти.
Вы получаете бонус +1 к броску урона, когда атакуете стрелковым оружием.
Вы получаете бонус +2 к броску атаки, когда атакуете стрелковым оружием.
[img [https://i.imgur.com/lYaBvye.png]]
* Ваша скорость равна 0, и вы не получаете выгоды ни от каких бонусов к скорости.
* Вы совершаете броски атаки с помехой, кроме бросков атаки, совершаемых по цели, схватившей вас.
* Состояние оканчивается, если схвативший становится [[недееспособеным|Недееспособный]].
* Состояние оканчивается, если какой-либо эффект выводит вас из зоны досягаемости того, кто вас удерживает, или из зоны удерживающего эффекта. Например, когда вас отбрасывает заклинанием //волна грома//.
[img width=450 class="centerme" [https://i.imgur.com/fNUWlUc.png]]

<<tabs "[tag[Табакси - описание]]" "Описание табакси" "$:/state/tab1">>
[img width=517 class="centerme" [https://i.imgur.com/yTy8RiI.jpg]]

Произошедшие от более древней подрасы темнокожих эльфов, дроу были изгнаны с земной поверхности мира, и обречены поклоняться богине Лолс и следовать пути зла и упадка. Теперь они построили свою цивилизацию в глубинах Подземья, устроенную согласно Пути Лолс. Также называемые тёмными эльфами, дроу имеют чёрную кожу, которая напоминает полированный обсидиан и совершенно белые или очень светлые во- лосы. У них обычно бледные глаза (настолько бледные, что могут показаться белыми) с сиреневым, серебряным, розовым, красным или синим оттенком. Они, как правило, меньше и стройнее, чем большинство эльфов. 

Искатели приключений дроу редки, и их раса существует не во всех мирах. Спросите вашего Мастера, можете ли вы играть персонажем дроу.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Харизмы увеличивается на 1. |
|^Боевая подготовка дроу |^Вы владеете воинским лёгким и одноручным клинковым оружием, простыми и воинскими арбалетами, а также экзотическим оружием "дроу", если владеете воинским оружием того же вида. |
|^Магия дроу |^Вам известен заговор //пляшущие огоньки//. При достижении 3 уровня вы можете один раз использовать заклинание //огонь фей//. При достижении 5 уровня, вы также можете использовать заклинание //тьма//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Харизма. |
|^Ночное зрение |^На расстоянии 20 м вы при тусклом освещении можете видеть так, как будто это яркое освещение, и в темноте так, как будто это тусклое освещение. В темноте вы не можете различать цвета, только оттенки серого. |
|^Чувствительность к солнечному свету |^Вы совершаете броски атаки и проверки Мудрости (Внимательность), которые полагаются на зрение, с помехой, когда вы, цель вашей атаки или то, что вы пытаетесь увидеть, находится под прямым солнечным светом. |

Вы тратите 1 очко ци в свой ход, чтобы совершить бонусным действием Уклонение.
Вы изучаете один приём на свой выбор из списка архетипа воина Мастер боевых искусств. Если приём требует, чтобы цель совершила спасбросок для сопротивления эффекту приёма, Сл спасброска равна 8 + ваш бонус мастерства + модификатор Силы или Ловкости (на ваш выбор). Вы получаете одну кость превосходства: к6. Эта кость подпитывает ваши приёмы. Кость превосходства тратится, когда вы её используете, и восстанавливается после окончания короткого или продолжительного отдыха.
<<<
Дух тигра делает вас более проворным.
<<<

Пока вы пребываете в ярости, дальность ваших прыжков удваивается, а вы получаете скорость карабканья, равную вашей скорости ходьбы, и игнорируете первые 4 м падения, когда определяете урон от падения.
[img width=450 class="centerme" [https://i.imgur.com/LAsCy3r.png]]

<<tabs "[tag[Тифлинг - описание]]" "Описание тифлингов" "$:/state/tab1">>
Тифлинги, связанные с Нессусом, повелевают силами огня и тьмы, ведомые более острым, чем у других, интеллектом, как и подобает тем, кто связан с самим Асмодеем.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Интеллекта увеличивается на 1. |
|^Наследие Нессуса |^Вам известен заговор //чудотворство//. При достижении 3 уровня вы можете один раз использовать заклинание //адское возмездие// как заклинание 2 уровня. При достижении 5 уровня, вы также можете использовать заклинание //тьма//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Харизма. |
Рассыпающееся царство Маладомини находится под властью Вельзевула, который превосходно совращает тех, чьи мелкие грехи можно превратить во влекущие проклятье поступки. Тифлинги, связанные с этим архидьяволом, прекрасно совращают других и физически, и психологически.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Интеллекта увеличивается на 1. |
|^Наследие Маладомини |^Вам известен заговор //чудотворство//. При достижении 3 уровня вы можете один раз использовать заклинание //луч болезни// как заклинание 2 уровня. При достижении 5 уровня, вы также можете использовать заклинание //корона безумия//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Харизма. |
Гласия, криминальный авторитет Преисподних, дарует своим тифлингам магию, полезную для совершения преступлений.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 1. |
|^Наследие Малболга |^Вам известен заговор //малая иллюзия//. При достижении 3 уровня вы можете один раз использовать заклинание //маскировка//. При достижении 5 уровня, вы также можете использовать заклинание //невидимость//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Харизма. |
Громадный город Дис занимает значительную часть второго слоя Преисподних. Это место, где секреты раскрываются тем, кто больше заплатит, что делает тифлингов Диспатера прекрасными шпионами и разведчиками.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Ловкости увеличивается на 1. |
|^Наследие Диса |^Вам известен заговор //чудотворство//. При достижении 3 уровня вы можете один раз использовать заклинание //маскировка//. При достижении 5 уровня, вы также можете использовать заклинание //обнаружение мыслей//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Харизма. |
Тифлинги, имеющие кровную связь с Зариэль, физически сильнее прочих тифлингов и получают полезные в бою магические способности.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Силы увеличивается на 1. |
|^Наследие Авернуса |^Вам известен заговор //чудотворство//. При достижении 3 уровня вы можете один раз использовать заклинание //палящая кара// как заклинание 2 уровня. При достижении 5 уровня, вы также можете использовать заклинание //клеймящая кара//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Харизма. |
Левистус правит заледеневшей Стигией и известен как архидьявол, предлагающий сделку тем, кто неотвратимо обречён.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Телосложения увеличивается на 1. |
|^Наследие Стигии |^Вам известен заговор //луч холода//. При достижении 3 уровня вы можете один раз использовать заклинание //доспех Агатиса// как заклинание 2 уровня. При достижении 5 уровня, вы также можете использовать заклинание //тьма//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Харизма. |
Великий ростовщик Маммон превыше всего любит деньги. Связанные с ним тифлинги великолепно собирают и сохраняют богатство.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Интеллекта увеличивается на 1. |
|^Наследие Минауроса |^Вам известен заговор //волшебная рука//. При достижении 3 уровня вы можете один раз использовать заклинание //Тензеров парящий диск//. При достижении 5 уровня, вы также можете использовать заклинание //волшебный замок//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Харизма. |
В ледяном царстве Кании Мефистофель даёт магическую силу всем, кто будет ему молиться. Связанные с ним тифлинги немного владеют тайной магией.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Интеллекта увеличивается на 1. |
|^Наследие Кании |^Вам известен заговор //волшебная рука//. При достижении 3 уровня вы можете один раз использовать заклинание //огненные ладони// как заклинание 2 уровня. При достижении 5 уровня, вы также можете использовать заклинание //горящий клинок//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Харизма. |
Как мастерский манипулятор, Фьёрна дарует связанным с ней тифлингам сильную личность.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 1. |
|^Наследие Флегетоса |^Вам известен заговор //дружба//. При достижении 3 уровня вы можете один раз использовать заклинание //очарование личности// как заклинание 2 уровня. При достижении 5 уровня, вы также можете использовать заклинание //внушение//. Вы восстанавливаете способность накладывать эти заклинания с помощью этой особенности, когда завершаете продолжительный отдых. Базовой характеристикой для их использования является Харизма. |
Вы можете при помощи этой особой рукопашной атаки сбить цель с ног, или оттолкнуть от себя. 

Цель вашего толкания должна находиться в пределах вашей досягаемости, а её размер не должен превышать ваш больше чем на одну категорию. Вы совершаете проверку Силы (Атлетика), противопоставленную проверке Силы (Атлетика) или Ловкости (Акробатика) цели (цель сама выбирает, какую характеристику использовать). Вы совершает свою проверку с преимуществом, если вы больше цели, или с помехой, если вы меньше. Если вы преуспеете, вы либо сбиваете цель с ног, либо толкаете её на 1 м от себя.

У вас так же есть возможность толкнуть цель в сторону, а не от себя. При этом вы совершаете свою проверку Силы (Атлетика) с помехой. Если проверка была успешной, вы перемещаете цель на 1 м в другое пространство в пределах своей досягаемости.
Несшибаемые и надёжные, толстошкурые шифтеры черпают свою силу и устойчивость из зверя внутри. Они обычно связаны с медведем или кабаном, но эта подраса может воплощать любого зверя, известного своей стойкостью.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Телосложения увеличивается на 2, а значение Силы увеличивается на 1. |
|^Ищейка |^Вы владеете навыком Атлетика. |
|^Особенность обращения |^Когда вы обращаетесь, вы получаете дополнительно 1к6 временных хитов. Пока вы обращены, вы получаете бонус +1 к КД. |
[img width=450 class="centerme" [https://i.imgur.com/cljXNXK.png]]

<<tabs "[tag[Тортл - описание]]" "Описание тортлов" "$:/state/tab1">>
| !к12 |!Трагедия |
| 1-2 |Умер член семьи или близкий друг. Проведите бросок по дополнительной таблице «Причина смерти», чтобы узнать, как это произошло.  |
| 3 |Дружба закончилась плохо, и кто-то другой теперь настроен враждебно к вам. Причиной могло послужить недопонимание, ваш или его поступок.  |
| 4 |Вы потеряли всё, чем владели, из-за бедствия, и вам пришлось начать жизнь с нуля.  |
| 5 |Вас осудили на тюремное заключение за преступление, которого вы не совершали, и вы провели 1к6 лет в тюрьме, гребцом на судне или на каторге.  |
| 6 |Война разорила ваше родное поселение, превратив всё в руины. Впоследствии вы либо помогли отстроить город, либо отправились в другое место.  |
| 7 |Возлюбленный исчез без следа. С тех пор вы ищите этого человека.  |
| 8 |Ужасная порча поразила урожай вашего поселения, и многим пришлось голодать. Вы потеряли брата, сестру или другого члена семьи.  |
| 9 |Вы сотворили что-то, ужасно опозорившее вас в глазах вашей семьи. Вы могли быть вовлечены в скандал, связаться с тёмной магией или оскорбить кого-то важного. Отношение вашей семьи становится в лучшем случае безразличным. Впрочем, со временем они могут простить вас.  |
| 10 |По неизвестным для вас причинам вы были изгнаны из вашего поселения. Вы либо некоторое время скитались по диким землям, либо нашли новое место для жизни.  |
| 11 |Роман завершился. Бросьте к6. Чётное число означает, что он завершился чьей-то обидой. Нечётное – что размолвка была по обоюдному согласию.  |
| 12 |Ваш нынешний или потенциальный романтический партнёр умер. Проведите бросок по дополнительной таблице «Причина смерти», чтобы узнать, что произошло. Если результатом является убийство, бросьте к12. При результате 1, вы прямо или косвенно являетесь виновником.  |
[img width=450 class="centerme" [https://i.imgur.com/rXGByzc.png]]

<<tabs "[tag[Тритон - описание]]" "Описание тритонов" "$:/state/tab1">>
Из всех видов доспехов, тяжёлые доспехи предоставляют лучшую защиту. Эти комплекты доспехов покрывают всё тело и созданы для защиты от самых разных атак. Их вес и нагрузку могут выдержать только самые тренированные воители. 

Тяжёлый доспех не позволяет добавлять к Классу Доспеха модификатор Ловкости, но и не даёт штраф, если модификатор Ловкости отрицательный. Под тяжёлыми доспехами необходимо носить дублет, его стоимость включена в цену доспеха.

//''Кольчуга''//. Изготовленная из переплетающихся металлических колец кольчуга включает также слой стёганой ткани, надеваемой под низ, дабы предотвратить натирание и смягчать удары. В комплект входят рукавицы.

//''Наборный доспех''//. Этот доспех состоит из узких вертикальных металлических пластин, приклёпанных к кожаной подложке, носимой поверх слоя ватина. Соединения защищаются кольчужным полотном.

//''Латы''//. Латы состоят из сформированных металлических пластин, покрывающих всё тело. В комплект лат входят рукавицы, тяжёлые кожаные сапоги, шлем с забралом, и толстый слой ватина. Ремешки и пряжки распределяют вес по всему телу.

//''Ростовой щит.''// Большой щит, закрывающие большую часть тела. Форма и размеры ростового щита не позволяют вам совершать провоцированные атаки и использовать его при езде верхом, пока вы удерживаете его в руке.

//''Павеза''//. Тип ростового щита, широко применяемый арбалетчиками. Включает в себя все минусы обычного ростового щита. Этот щит достаточно высок, а его конструкция позволяет вонзить его в землю перед собой, что создает дополнительное укрытие на поле боя.

''Укрытие''. Вы действием можете установить павезу в землю вертикально перед собой. Пока павеза установлена, она предоставляет укрытие на три четверти, но лишает вас бонуса к КД от ношения щита.
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
Существо может задержать дыхание на количество минут, равное 1 + модификатор Телосложения (минимум 30 секунд).

Если существо не может дышать, оно может жить в течение количества раундов, равного модификатору Телосложения (минимум 1 раунд). В начале своего следующего хода его хиты опускаются до 0, и оно начинает умирать. Если у вас кончился воздух или вас душат, вы не можете восстанавливать хиты и становиться стабилизированным, пока снова не сможете дышать.
До начала вашего следующего хода все броски атаки по вам совершаются с помехой, и спасброски Ловкости вы совершаете с преимуществом, если вы видите атакующего.

Вы теряете это преимущество, если становитесь [[недееспособным|Недееспособный]] или если ваша скорость падает до 0.
Стены, деревья, существа и прочие препятствия могут предоставлять укрытие в бою, осложняя причинение цели урона. Цель получает преимущества за счёт укрытия только от атак и эффектов, исходящих с противоположной стороны укрытия.

Есть несколько степеней укрытия. Если у цели есть несколько источников укрытия, применяется эффект только самого большого; степени не складываются между собой.

Цель с ''укрытием на половину'' получает бонус +2 к КД и спасброскам Ловкости. Цель получает укрытие на половину если препятствие закрывает как минимум половину её тела. Это может быть низкая стена, большая мебель, узкий ствол дерева или существо, как враждебное, так и дружественное.

Цель с ''укрытием на три четверти'' получает бонус +5 к КД и спасброскам Ловкости. Цель получает укрытие на три четверти если препятствие закрывает как минимум три четверти её тела. Это может быть опускная решётка, бойница в стене или широкий ствол дерева.

!!!Удар по укрытию
Если дальнобойная атака промахивается по цели, имеющей укрытие, она может попасть по укрытию.

Для начала определите, попала ли бы атака, если бы цель была без укрытия. Если бросок атаки слишком низкий, чтобы попасть по цели, но достаточно высокий, чтоб попасть по ней, если бы укрытия не было, то атака попадает по объекту, используемому в качестве укрытия. Если укрытие предоставлено существом, и бросок атаки превышает его КД, то атака попадает по укрывающему существу.
У процесса улучшения предмета экипировки всегда есть ряд основных правил независимо от его типа:

* Улучшения принимают вид ''тэгов''. Тэги дают экипировке новые свойства.
* Каждый тэг уникален и может быть применен к предмету экипировки только один раз.
* Улучшение предмета экипировки новым тэгом может быть произведено только ремесленником с соответствующим обучением и подходящей мастерской.
* Улучшение предета экипировки - непростое занятие, требующее усилий и времени, и может занять от часа до нескольких недель в зависимости от поставленной задачи.
* Во время своих приключенй, вы можете наткнуться на предмет экипировки у которого уже есть тэги.
* Магические предметы не могут быть улучшены таким образом, и предметы экипировки не становятся магическими в результате улучшения (хоть иногда и могут //считаться //таковыми).

---

!!!Улучшение доспехов и щитов
Существует несолько доступных вариантов улучшения доспехов: от дорогостоящего укрепления до таких полезных дополнений, как утепление. Полный список [[доступных вариантов|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=1830162596]] находится в Базе Данных. В дополнение к основным, следующие правила используются при улучшении доспехов и щитов:

* Все требования, указанные в таблице, должны быть соблюдены для применения тэга.
* Как правило, ремесленнику требуется день работы (минимум 8 часов) для улучшения доспеха или щита новым тэгом.
* //''Укрепление доспеха''//. Процесс укрепления обычно занимает рабочую неделю (5 дней) и может быть осуществлён только мастером-бронником. Тэг "//укрепленный//" не может быть удалён после применения.

---

!!!Улучшение оружия
Улучшения оружия представляют собой разветвлённую структуру, поделенную на несколько уровней. По началу, оружие может быть улучшено ограниченным набором вариантов 1-го уровня, каждый из которых "открывает" новые варианты уровнем выше. В дополнение к основным, следующие правила используются при улучшении оружия:

* Все требования, указанные в таблице, должны быть соблюдены для применения тэга.
* Улучшения 2-го уровня могут быть осуществлены только опытным оружейником, в то время как улучшения 3-го уровня требуют навыков мастера-оружейника.
* Как правило, ремесленнику требуется день работы (минимум 8 часов) для улучшения оружия новым тэгом.
* Тэги не могут быть удалены с оружия после применения.

!!!Ценовая структура улучшений оружия
У улучшения оружия есть базовая цена соответствующая его уровню, каждое последующее улучшение одного и того же уровня стоит в два раза дороже предыдущего.
* Когда ваши хиты опускаются до 0, вы считаетесь умирающим.
* Вы [[теряете сознание|Бессознательный]].
* Вы должны совершить //спасбросок от смерти// в начале своего хода. В случае трёх провалов вы умираете.
* Если вы получаете урон, будучи умирающим, вы получаете проваленный //спасбросок от смерти//. Если это урон от критического попадания, вы получаете два провала. Если урон равен максимуму ваших хитов или превышает его, вы мгновенно умираете.
* Это состояние оканчивается, когда вы восстанавливаете любое количество хитов.
* Всякий раз, когда оканчивается это состояние, вы получаете +1 степень [[истощения|Истощённый]].
У оружия, заклинаний и боевых умений чудовищ указан причиняемый ими урон. Вы бросаете указанную кость или кости, добавляете модификаторы и причиняете цели получившийся урон. Бонусы к урону предоставляет магическое оружие, особые умения и прочие факторы. 

При совершении атаки ''оружием'' (без свойства "механическое" вы добавляете к урону модификатор характеристики — той же самой характеристики, что использовалась для броска атаки. В ''заклинании'' написано, какие кости бросать для определения урона и какие модификаторы применяются. 

Если заклинание или эффект причиняет урон сразу нескольким целям, бросок урона совершается один на всех. Например, если волшебник накладывает //огненный шар// или жрец накладывает //небесный огонь//, урон от их заклинаний определяется лишь один раз и причиняется всем существам, по которым попал взрыв. 

---

!!!Виды урона

Разные атаки, заклинания и прочие эффекты причиняют разные виды урона. Сами по себе разные виды урона не подчиняются особым правилам, но от них зависят другие элементы игры, такие как сопротивление урону. 

Виды урона идут с примерами, помогающими Мастеру определить вид урона для нового эффекта. 

//''Дробящий.''// Ударные атаки — молотом, падением, сдавливанием и т. п. — причиняют дробящий урон. 

//''Звук.''// Оглушительные звуковые волны, такие как от заклинания волна грома, причиняют урон звуком. 

//''Излучение.''// Урон излучением, причиняемый заклинанием //небесный огонь// жреца и карающим оружием ангела, опаляют плоть как огонь и переполняют дух силой. 

//''Кислота.''// Едкое дыхание чёрного дракона и растворяющая слизь студенистого куба причиняют урон кислотой. 

//''Колющий.''// Протыкающие и пронзающие атаки, включая удары копьём и укусы чудовищ, причиняют колющий урон. 

//''Некротическая энергия.''// Некротическая энергия, излучаемая некоторой нежитью и такими заклинаниями как //леденящее прикосновение//, иссушают плоть и даже душу. 

//''Огонь.''// Красный дракон, выдыхающий пламя, и многие заклинания, создающие жар, причиняют урон огнём. 

//''Психическая энергия.''// Атаки силой разума, такие как у иллитидов, причиняют урон психической энергией. 

//''Рубящий.''// Мечи, топоры и когти чудовищ причиняют рубящий урон. 

//''Силовое поле.''// Силовое поле - это чистая магия, сфокусированная в разрушительную силу. Чаще всего силовым полем причиняют урон заклинания, такие как //волшебная стрела// и //божественное оружие//. 

//''Холод.''// Адский холод копья ледяного дьявола и морозное дыхание белого дракона причиняют урон холодом. 

//''Электричество.''// Заклинание //молния// и дыхание синего дракона причиняют урон электричеством. 

//''Яд.''// Ядовитые укусы и токсичное дыхание зелёного дракона причиняют урон ядом. 

---

!!!Сопротивление урону и уязвимость
Некоторым существам и предметам чрезвычайно трудно или наоборот, легко причинить вред определёнными видами урона. 

Если у существа или предмета есть ''сопротивление'' виду урона, то урон этого вида, причиняемый ему, уменьшается вдвое. Если у существа или предмета есть ''уязвимость'' виду урона, урон этого вида для него удваивается. 

Сопротивление и уязвимость применяются к урону после всех остальных модификаторов. Например, по существу с сопротивлением к дробящему урону попадает атака, причиняющая дробящий урон 25. Это существо также находится в магической ауре, уменьшающей весь урон на 5. Вначале из урона 25 вычитается 5, а результат делится пополам, так что существо получает урон 10. 

Многократные сопротивления или уязвимости к одному и тому же виду урона не складываются. Например, если у существа есть сопротивление к урону огнём и сопротивление к немагическому урону, то урон от немагического огня уменьшается в два, а не в четыре раза. 
При совершении броска урона заклинания вы можете потратить 1 очко чародейства, чтобы перебросить кости урона в количестве, не превышающем значение вашего мод. Харизмы (минимум 1). Вы должны использовать новое выпавшее значение. 

Вы можете использовать вариант «Усиленное заклинание», даже если вы уже использовали другой вариант Метамагии при сотворении этого заклинания.
При сотворении заклинания со временем сотворения «1 действие» вы можете потратить 2 очка чародейства, чтобы сотворить это заклинание бонусным действием.
[img width=500 class="centerme" [https://i.imgur.com/I6DpIGf.png]]

|!Особенность |!Описание |
|^Драконий ужас |^Вы можете действием издать ужасающий рык. Все существа на ваш выбор в пределах 6 м от вас, которые могут видеть и слышать вас, должны преуспеть в спасброске Мудрости (Сл = 8 + ваш мод. Харизмы + ваш бонус мастерства), иначе станут испуганными вами на 1 минуту. Существо может повторять этот спасбросок в конце каждого своего хода, оканчивая эффект на себе при успехе. Если спасбросок существа был успешным, или эффект на нём окончился, оно получает иммунитет к этой особенности на следующие 24 часа. Вы не можете использовать эту особенность повторно, пока не завершите продолжительный отдых. |
|^Мощное телосложение |^Вы считаетесь на один размер больше, когда определяется ваша грузоподъемность и вес, который вы можете толкать, тянуть или отрывать от земли, а также при совершении вами [[особых атак|Атака]] и [[Пробегания|Пробегание *]]. Кроме того, вы совершаете проверки и спасброски Силы против немагических эффектов, делающих вас [[схваченным|Схваченный]], [[опутанным|Опутанный]] или [[сбитым с ног|Сбитый с ног / Лежащий ничком]], с преимуществом.  |
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img width=450 class="centerme" [https://i.imgur.com/n6KCOhX.png]]

<<tabs "[tag[Фирболг - описание]]" "Описание фирболгов" "$:/state/tab1">>
Хиты отражают комбинацию физической и умственной стойкости, стремление к существованию и удачу. Существ с большим числом хитов трудно убить. Те, у кого хитов мало — менее жизнеспособны.

Текущие хиты существа (обычно называются просто хитами) могут быть любым числом от 0 до максимума его хитов. Это число часто меняется, когда существо получает урон и лечится.

Каждый раз, когда существо получает урон, этот урон вычитается из его хитов. Потеря хитов отражается на вашей внешности и действиях. Окружающие могут обратить внимание на ваши ранения и изменить своё мнение о вас, а монстры, почуяв вашу кровь, могут впасть в кровожадное бешенство или выследить вас по запаху.

| !≤50% макс. хитов | !Окровавленный |
|Когда вы теряете половину от своего максимума хитов, вы считаетесь ''окровавленным''. |<|
|Вы получили открытые раны или крупные гематомы, и вы подвергаетесь сильной боли во время физической активности. Даже если ваши раны скрыты, видящее вас существо может определить признаки боли, совершив проверку Мудрости (Проницательность) против вашей пассивной Выносливости или проверки Телосложения (Обман), если вы пытаетесь скрыть боль. |<|
|Вы не можете восстанавливать хиты костями хитов. |<|
|Вы можете снять это состояние, либо подняв своё текущее значение хитов выше 50% от максимума, либо потратив действием одно использование //комплекта целителя// на обработку ран. |<|
| !0 хитов | !Умирающий |
|Когда ваши хиты опускаются до 0, вы считаетесь ''умирающим''. |<|
|Вы [[теряете сознание|Бессознательный]]. |<|
|Вы должны совершить //спасбросок от смерти// в начале своего хода. В случае трёх провалов вы умираете. |<|
|Если вы получаете урон, будучи ''умирающим'', вы получаете проваленный //спасбросок от смерти//. Если это урон от критического попадания, вы получаете два провала. Если урон равен максимуму ваших хитов или превышает его, вы мгновенно умираете. |<|
|Это состояние оканчивается, когда вы восстанавливаете любое количество хитов. |<|
|Всякий раз, когда оканчивается это состояние, вы получаете +1 степень [[истощения|Истощённый]]. |<|

---

!!!Лечение
Если урон не вызвал смерть, он не постоянен. И даже смерть можно обратить мощной магией. Хиты существа восстанавливаются отдыхом, а магия, такая как заклинание //лечение ран// или //зелье лечения// устраняют урон мгновенно. 

Если существо получает какое-либо лечение, восстановленные хиты добавляются к его текущим хитам. Хиты существа не могут превышать его максимум хитов, поэтому лишние хиты теряются. Например, друид восстанавливает следопыту 8 хитов. Если у следопыта сейчас 14 хитов, а максимум хитов 20, следопыт восстанавливает 6 хитов, а не 8.

Умершее существо не может восстанавливать хиты, пока такая магия как //возрождение// не вернёт его к жизни. 

---

!!!Временные хиты
Некоторые заклинания и особые умения дают существам временные хиты. Временные хиты это не настоящие хиты; это заслон от урона, буфер, защищающий от ран. 

Если у вас есть временные хиты и вы получаете урон, временные хиты снимаются первыми, а излишки урона переносятся на обычные хиты. Например, если у вас есть 5 временных хитов и вы получаете урон 7, вы теряете все временные хиты и получаете урон 2. 

Из-за того, что временные хиты это не настоящие хиты, их количество может превышать максимум хитов. Таким образом, персонаж может иметь полные хиты и получать при этом временные хиты. 

Лечение не восстанавливает временные хиты, и они не складываются вместе. Если у вас есть временные хиты, и вы получаете ещё некоторое количество их, вы сами решаете, какие использовать: старые или новые. Например, если заклинание дарует вам 12 временных хитов, когда у вас уже есть 10, у вас может быть или 10 или 12 временных хитов, но не 22. 

Если у вас 0 хитов, получение временных хитов не приводит вас в сознание и не стабилизирует вас. Они всё ещё могут поглощать урон, причиняемый вам, но спасти вас может только настоящее лечение. 

Если умение, даровавшее временные хиты, не указывает их длительность, они существуют, пока не кончатся, или пока вы не завершите продолжительный отдых.

---

!!!Кости Хитов
В конце [[отдыха|Отдых]] персонаж может потратить одну или несколько Костей Хитов. Каждая потраченная кость позволяет совершить бросок соответствующей кости, добавить к ней модификатор Телосложения и восстановить хиты в количестве, равном полученному значению (минимум 1). Потраченные Кости Хитов восстанавливаются в конце [[продолжительного отдыха|Продолжительный отдых]] в соответствии с выбранным [[образом жизни|2. Выберите образ жизни]].
[img width=450 class="centerme" [https://i.imgur.com/30DhufK.png]]

<<tabs "[tag[Хобгоблин - описание]]" "Описание хобгоблинов" "$:/state/tab1">>
[img  class="centerme" [https://i.imgur.com/H7OZTxV.png]]

Будучи холмовым дварфом вы обладаете обострёнными чувствами, развитой интуицией и замечательной стойкостью. Золотые дварфы Фаэруна, в их могучем южном королевстве являются холмовыми дварфами, также как и изгнанные нейдары и свихнувшиеся клары из Кринна (мир Саги о Копье). 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Мудрости увеличивается на 1. |
|^Дварфская выдержка |^Максимальное значение ваших хитов увеличивается на 1, и вы получаете 1 дополнительный хит с каждым новым уровнем. |
[img width=360 class="centerme" [https://i.imgur.com/B24IVnB.png]]


Храбрые сердцем ааракокра используют свои крепкие крылья для получения превосходства над своим противником.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Силы увеличивается на 1. |
|^Воздушное превосходство |^Когда вы наносите существу урон атакой или заклинанием, и у существа нет скорость полёта или парения, вы можете этой атакой или заклинанием нанести цели дополнительный урон, равный вашему уровню. Вы не можете использовать эту особенность повторно, пока не завершите короткий или продолжительный отдых. |
|^Мощные крылья |^Вы можете использовать скорость полёта от особенности "крылья", когда носите средние доспехи или щиты. |
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img width=460 class="centerme" [https://i.imgur.com/O5bfRSn.png]]

<<tabs "[[Описание чародеев]] [[Классовые умения чародеев]] [[Источники чародейства]]" "" "$:/state/tab1">>

Всякий раз когда вы достигаете нового уровня, убедитесь, что вы выполнили следующее:

* Увеличьте уровень вашего класса (или одного из классов) на 1.
* Получите дополнительные умения соответствующего уровня, указанные в описании этого класса.
* Изучите новые и/или замените старые заклинания и получите ячейки заклинаний, если этот класс является заклинателем.
* Получите 1 дополнительную Кость Хитов этого класса.
* Определите ваше новое максимальное значение хитов одним из двух способов:
** Совершите бросок новой Кости Хитов. При выпадении значения ниже среднего для вашего класса, перебросьте кость и выберите между старым и новым значением. Добавьте ваш модификатор Телосложения к результату и прибавьте полученное число (минимум 1) к максимальному значению хитов.
** Прибавьте к максимальному значению хитов фиксированное значение, указанное в описании этого класса (минимум 1).
* Если ваш модификатор Телосложения увеличивается на 1, увеличьте максимальное значение ваших хитов на 1 за каждый достигнутый вами уровень.
* Увеличьте ваше значение бонуса мастерства на 1, при достижении 5, 9, 13 и 17 уровней ''персонажа''.
* Обновите значения умений, черт или других особенностей, которые основаны на вашем уровне.
[img class="centerme" [https://i.imgur.com/MXusjdw.png]]

<<tabs "[[Описание людей]][[Описание полулюдей]][[Описание калаштар]][[Особенности людей]]" "$:/state/tab1">>
[img width=175 class="centerme" [https://i.imgur.com/tMnyULq.png]]

Происхождение и склад ума людей-специалистов позволяет им посвятить себя искусному овладению узкой специализации.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Интеллекта, Мудрости или Харизмы на ваш выбор увеличивается на 1, а значение одной другой характеристики на ваш выбор увеличивается на 1. |
|^Специализация |^Вы получаете владение одним навыком и одним инструментом на ваш выбор. Ваш бонус мастерства удваивается для всех проверок характеристик, используя этот навык или инструмент. |
[img width=210 class="centerme" [https://i.imgur.com/6ACa0k4.png]]

Люди-эрудиты отличаются разносторонней осведомлённостью и широким кругозором.

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение всех ваших характеристик увеличивается на 1. |
|^Навык |^Вы получаете владение одним навыком на ваш выбор |
[img [https://i.imgur.com/lYaBvye.png]]
[img width=400 class="centerme" [https://i.imgur.com/U6787xS.png]]

<<tabs "[tag[Юань-ти - описание]]" "Описание чистокровных юань-ти" "$:/state/tab1">>
<div class="tc-table-of-contents">
<<toc-selective-expandable "Чувства и скрытность">>
</div>
Вы выросли в глуши, вдали от цивилизации и её благ. Вы видели миграцию стад, чей размер был больше леса, выживали при температуре, которую горожанам и не представить, и наслаждались таким уединением, что на многие мили вокруг вы были единственным мыслящим существом. Дикая природа в вашей крови, будь вы кочевником, исследователем, затворником, охотником-собирателем или даже мародёром. Даже в неизвестном месте вы найдёте что-то, что вам понятно. 

* ''Владение навыками:'' Выживание, Выносливость 
* ''Владение инструментами:'' Один [[музыкальный инструмент|Музыкальные инструменты]]
* ''Языки:'' Один на ваш выбор 
* ''Снаряжение:'' Походный посох, охотничий капкан, трофей с убитого животного, комплект дорожной одежды, кошель с 10 см 

!!!Занятие
Вы были в необычных местах и видели такое, что другие не могут даже вообразить. Подумайте, какие далёкие земли вы посетили, и как они на вас повлияли. Можете совершить бросок по прилагающейся таблице, чтобы определить, чем вы занимались в глуши, а можете сделать выбор самостоятельно. 

| !к10 |!Занятие| !к10 |!Занятие |
| 1 |Изгнанник | 6 |Охотник за головами |
| 2 |Кочевник | 7 |Пилигрим |
| 3 |Лесник | 8 |Поселенец |
| 4 |Мародёр | 9 |Проводник |
| 5 |Охотник-собиратель | 10 |Траппер |

!!!Умение: Странник
Вы отлично запоминаете карты и местность, и всегда можете вспомнить общие характеристики местности, поселения, и прочие особенности в окрестностях. Кроме того, вы находите вдвое больше пищи и воды при сборе еды в дикой местности.

!!!Персонализация
Часто считающиеся цивилизованными народами грубыми и неотёсанными, чужеземцы не прельщаются жизнью в городе. Узы племени, клана, семьи и положенное место в природе — вот самые важные привязанности чужеземцев. 

| !к8 |!Черта характера |
| 1 |Мной руководит жажда приключений, которая и увела меня из дома. |
| 2 |Я слежу за друзьями, как если бы они были слепыми котятами. |
| 3 |Однажды я пробежал 40 километров без остановки, чтобы предупредить свой клан о приближающейся орде орков. Если понадобится, я повторю это. |
| 4 |Для любой ситуации у меня есть уроки, извлечённые из наблюдений за природой. |
| 5 |Я не понимаю богатых и воспитанных. Деньги и хорошие манеры не спасут тебя от голодного волка. |
| 6 |Я всё время что-то беру в руки, рассеянно кручу и иногда ломаю. |
| 7 |Я гораздо комфортнее чувствую себя среди зверей, чем среди людей. |
| 8 |Меня действительно вырастили волки. |

| !к6 |!Идеал |
| 1 |''Перемены. ''Жизнь как времена года, постоянно меняется, и мы должны меняться вместе с ней. |
| 2 |''Процветание. ''Каждый должен поступать так, чтобы всё племя было счастливо. |
| 3 |''Честь.'' Если я обесчещу себя, я обесчещу весь свой клан. |
| 4 |''Мощь.'' Самый сильный имеет право приказывать. |
| 5 |''Природа.'' Мир природы гораздо важнее построек цивилизации. |
| 6 |''Слава.'' Я должен завоёвывать славу в сражениях, для себя и своего клана. |

| !к6 |!Привязанность |
| 1 |Моя семья, клан или племя — самые важные вещи в моей жизни, даже когда они далеко от меня. |
| 2 |Осквернение дикой местности на моей родине я считаю личным оскорблением.|
| 3 |Я вымещу свой чудовищный гнев на злодеях, уничтоживших мои земли.|
| 4 |Я последний из своего племени, и должен сделать так, чтобы наши имена вошли в легенды. |
| 5 |Мне являются жуткие видения грядущей катастрофы, и я сделаю всё, чтобы её предотвратить. |
| 6 |Я должен создавать новых детей, которые будут поддерживать моё племя. |

| !к6 |!Слабость |
| 1 |Я слишком пристрастен к элю, вину и прочим спиртным напиткам. |
| 2 |В жизни на полную катушку нет места осторожности. |
| 3 |Я помню все полученные оскорбления и таю злобу на всех обидчиков. |
| 4 |Я с трудом доверяю представителям других рас, племён и сообществ. |
| 5 |На любые неурядицы я почти всегда отвечаю насилием. |
| 6 |Не думайте, что я буду спасать тех, кто не может сам о себе позаботиться. Сильные должны процветать, а слабые погибают, и это нормально. |
[img [https://i.imgur.com/lYaBvye.png]]

Ваша игра является совместным повествованием. Историей. Ваши персонажи - герои этой истории. Они могут быть плоскими и пустыми, определёнными одним предложением или несколькоми словами вроде //Крутой Тифлинг-Сирота Колдун//, или они могут быть продуманными и разносторонними. 

На одном конце спектра персонажей находятся "чистые листы". У них нет ни цели, ни мотивации, ни личности. Во время игры эти персонажи находятся на фоне их действия исключительно механические ("Я иду сюда, "Я атакую этого врага", "Я поднимаю предмет").


<<<
Важно отличать //персонажа//, являющегося "чистым листом", от //игрока//, являющегося интровертом и предпочитающего тихо следовать за группой, лишь иногда выступая вперёд. 
<<<


На другом конце спектра расположены персонажи, определённые конфликтом. Те, у кого есть своя точка зрения, мысли и мнения о том, что происходит вокруг них. Глубина персонажа позволяет (и, иногда, вынуждает) ему выбирать стороны, принимать трудные решения, противопоставлять себя миру и событиям, его окружающим, а также обладать секретами, которые могут быть раскрыты. Такие персонажи делают игру более интересной, но и их создание требует приложения усилий.

Поразмыслив над своим персонажем за рамками игровых механик и цифр на его листе, вы открываете для себя и для него новые возможности, которые упустили бы в противном случае. Знание и понимание вашего персонажа помогает вам играть лучше.

---

!!О стереотипах

Наш мозг любит создавать простые ассоциации. Легко создавать своего персонажа сиротой, потому что нам не нужно думать о том, что случилось с его родителями. Легко создавать //Тифлинга Колдуна//, потому что наш мозг быстро связывает колдунов и дьяволов. Подавление этих интуитивных связей помогает избегать клише. Тем не менее, важно отметить, что избегание клише - это не всегда хорошо. Это может привести к безумным концепциям персонажей, которые не соответствуют сэттингу или общему тону игры.

Это здорово, что вы хотите играть трупом эльфийского ребёнка, мозг которого одержим духом космического кита, который бесцельно дрейфует сквозь космос и избавляется от скуки, играя телом эльфа, как персонажем видеоигры. Это совсем не здорово, когда такая концепция идет наперекор стилю игры вашего Мастера и персонажам других игроков. Хороший персонаж не обязательно должен быть уникальным и ломающим стандарты. Речь идёт об осмысленности принимаемых вами решений во время создания персонажа. Вместо того, чтобы без размышлений полагаться на простые связи, подумайте о том, ''почему'' ваш //Тифлинг// является //Сиротой//, и ''как'' он стал //Колдуном//.

---

!!Неважно с чего вы начнёте

Нет какой-либо опрелённой последовательность по которой с чистого листа создаётся концепция персонажа. Некоторые начинают с имени. Некоторые решают, каким классом они хотят играть, и строят всё вокруг этого решения. У некоторых уже есть задумка, которую остаётся лишь нарастить деталями. Какую-бы отправную точку вы ни использовали для создания своего персонажа, ключевым моментом является развитие идеи.

Вот несколько примеров отправных точек, которые могут позволить вам подойти к созданию персонажа с новой для вас стороны:

* Начните с сэттинга кампании. Узнайте у вашего Мастера о конкретных местах и народах их населяющих. Позвольте деталям о мире вдохновить вас.

* Начните с противоречия "Что если...". Что если бы орк был библиотекарем? Что если бы варвар занимался садоводством? Подобные идеи могут звучать абсурдно сами по себе, но выглядят вполне себе полноценно, стоит им придать глубины.

* Начните с просмотров изображений. Не обязательно изображений персонажей, они могут быть любыми. Вы можете посмотреть на пейзаж ландшафта и подумать о том, кто мог бы населять его. Небольшие особенности и идеи могут прийти к вам из увиденных деталей.

* Украдите. Возьмите характерные черты от того, что вас вдохновляет, и соберите их вместе в что-то новое. Возьмите невозмутимый характер персонажа вашей любимой книги и дайте его той молодой рыжей девушке со шрамом на плече, которую вы видели в сериале. Не пытайтесь полностью воссоздать вашего любимого персонажа, вместо этого возьмите нравящиеся вам части от разных персонажей и перемешайте их.

* Позвольте решить характеристикам. Обратите внимания на слабые стороны вашего персонажа с механической точки зрения и позвольте им быть вашими характерным чертами. Если у вас низкое значений Силы, подумайте о том, почему ваш персонаж физически слабее среднего приключенца. Если Интеллект вашего персонажа ниже среднего, вместо объяснения в виде "Мой персонаж глупый, потому что так решил бросок костей", попробуйте поразмыслить над тем, почему он действительно является несообразительным.

---

!!Цели, мотивации и конфликт

Вашему персонажу стоит чего-то хотеть. На самом деле всё просто. Вашего персонажа отличает от простого люда то, что он хочет делать вещи, за которые остальные браться не намерены. Вы собираетесь сразиться с драконом. Вы собираетесь направить ваш корабль в межпространственный портал. Вы собираете команду для осуществления невозможного ограбления. Почему? Потому что так вы получаете то, чего вы хотите. Если ваш персонаж не в состоянии мотивировать себя, тогда его история не может развиваться. Игра на этом останавливается. Даже если ваша мотивация проста, как "Я хочу убивать монстров", это уже намного лучше, чем не иметь её вовсе.

Когда ваш персонаж чего-то хочет, каждое препятствие, которой Мастер ставит на его пути, является противопоставлением и конфликтом. Оно создаёт напряжение. Всё это является ингридиентами увлекательного и драматичного повествования. Это означает, что ваш персонаж может перестать только лишь реагировать на сюжет и начать создавать свой собственный.

!!!Волки-одиночки скучны

Скорее всего вы не единственный за столом. Помимо Мастера, рядом с вами есть группа людей с которой ваш персонаж будет работать, путешествовать и сражаться бок о бок. Во-первых, воспринимайте это как возможность связать своего персонажа с другими, чтобы придать ему деталей. Ваши персонажи могут быть братьями, друзьями детства, мастером и учеником. Вам не обязательно быть кучкой незнакомцев. Во-вторых, воспринимайте это как факт, что эта игра не только о вас. Вы не являетесь её главным героем. Ваша группа - главный герой повествования. Также как и мотивация вставать с кровати и идти навстречу приключениям, вашему персонажу необходима мотивация для заботы о своих компаньонах и работы вместе с ними, ради достижения общей цели.

Если ваш персонаж - таинственная фигура в плаще, общающася лишь односложно и постоянно пытающаяся отколоться от группы, чтобы заняться чем-то своим, то вы сами себе разрушаете возможности для повествования. Поверьте, куда интереснее преодолевать препятствия, работая в команде (кроме того, таинственные фигуры в плаще - скучные и унылые персонажи).

---

!!Начиная с 1 уровня: Не перегружайте свою историю

Будучи персонажем 1 уровня, вы должны понимать, что вы ещё не машущий мечом и метающий магию герой, которым вы хотите стать. Ещё нет.

Не совершайте ошибку, запихивая вашу будущую историю в ваше прошлое. Если вы появились за столом с персонажем 1 уровня и предсторией, по которой он провёл последние 10 лет в поисках меча своего отца, убил дракона, спас принцессу и отвадил Великое Зло от своей родной деревни, тогда вы оказали себе медвежью услугу. Мало того, что это будет выглядеть совершенно нелепо, когда такой персонаж вдруг будет прилагать много сил, сражаясь с низкоуровневыми противниками, помимо этого вы упустили возможность совершить всё, что описали, в будущем. Сохраните клёвые части своей истории для их свершения за столом. Это нормально начать ничем не примечательным человеком, потому что так ваш рост будет выглядеть ещё более впечатляющим.

---

!!Физические атрибуты
Физические атрибуты показывают, как мы выглядим, как мы движемся, чем мы владеем. Многие из них могут быть определены вашим выбором расы. Возраст, рост и размер могут разниться в зависимости от доступных вам рас. Поэтому начните с выбора расы. Может показаться, что эти детали не так важны и являются лишь эстетическим выбором, определающим то, как другие люди видят вашего персонажа, но вы удивитесь тому, как сильно ваши физические атрибуты могут влиять на ваши действия. Подумайте о следующем:

* Нравится ли вашему персонажу его внешность?
* Гордится ли он своими физическими данными?
* Стыдится ли он каких-то своих физических особенностей? Пытается ли он скрыть их?
* Влияет ли его возраст на его движения и взаимодействие с миром?

Самооценка является важной составляющей поведения людей.

Внешность персонажа - это также его книга воспоминаний. Каждый шрам, каждый потерянный зуб, каждая морщина - запись какого-то прошлого события. Каждая вещь, которую испытал ваш персонаж на своём жизненом пути, делает из него того, кем он является сейчас. Пол, национальность, религия, надежды и мечты, страхи и смущения. Все эти вещи, о которых вы могли не задумываться раньше, делают вашего персонажа правдоподобным и интересным, а также придают ему ту глубину, которую вы можете исследовать во время игры.

---

!!Рождение вашего персонажа
Знание своего места рождения поможет закрепить ваше место в мире. Ваш персонаж не просто появился из ниоткуда, у него есть история о том, кем он был до текущих событий - города, которые он посетил, работа, за которую он брался, связи, которые он наладил - всё это начинается в месте вашего рождения. 

Если ваша игра проходит в готовом сэттинге, почитайте о нём. Найдите место в этом мире. Если ваш Мастер использует собственный сэттинг, попросите у него информацию о возможных местах. Возможно, он будет не прочь помочь вам создать собственный город или поселение. Если ваш персонаж был выращен храмом или гильдией, возможно, у вашего Мастера уже есть готовая организация, в которую вы могли бы вписаться.

Определите //каким// было место в котором вы родились. Его описание может быть размытым и вкючать в себя, например, только политическую обстановку (монархия, военная хунта, анархическая коммуна и т.п.) или какую-либо другую определяющую особенность. Не углубляйтесь в детали, только если не считаете это необходимым и важным для вашего персонажа. Примеры:

* ''Охотник-собиратель:'' Вы родились в обществе, которое следует за сезонной миграцией животных, чтобы поддерживать себя. Ваша жизнь сопровождалась поддержанием природного баланса и обеспечением того, что вы никогда не истощите природные ресурсы до такой степени, что они не смогут самостоятельно восполниться. Всё, что вы добывали, вы использовали на собственные нужды.
* ''Кочующий пастух:'' Вы родились в обществе, которое приручало и держало животных в качестве домашнего скота, перемещаясь с целью поиска новых пастбищ для поддержания стада. Ваше хозяйство предоставляло вам небольшие излишки, которые вы использовали для торговли с другими сообществами.
* ''Торговец-ремесленник:'' Вы родились в небольшой коммуне или караване. Ваш народ путешествовал с места на место, предлагая свои навыки или торгуя за предметы, необходимые для вашего существования.
* ''Садоводческое общество:'' Вы родились в обществе, способном поддерживать себя стабильным сбором урожая. Ваш народ полагался выживал благодаря дарам природы, но был способен поддерживать баланс, чтобы образовать постоянное поселение. Несмотря на это, у вас было очень мало возможностей для торговли, и всё, что вы производили, вы использовали на собственные нужды.
* ''Сельскохозяйственное общество:'' Вы родились в обществе, в котором использование скота и продвинутых инструментов позволяло фермам производить излишки продовольствия для торговли. Это привело к избыточному богатству, которое создало классовое деление на дворянство и крестьян.
* ''Феодализм:'' Вы родились в поселение со строгой иерархической структурой, основанной на праве собственности на землю. Дворяне владели замлей и назначали вассалов, управляющих работой на ней низшего класса. Низшему классу предоставлялось место для жилья в обмен на их труд, но произведенное богатство возвращалось обратно к дворянам через налогооблажение.

!!!Социальный статус

Какое место занимал ваш персонаж в обществе, в котором родился?

* ''Престиж:'' Какова репутация вашего персонажа?
* ''Имущество:'' Чем владеет ваш персонаж?
* ''Власть:'' Каким влиянием обладает ваш персонаж?

---

!!Семья

Семья вашего персонажа не обязана быть бездействующими заметками в его листе. Ваш дядя может быть вашим лучшим другом и наставником. Ваш брат может быть вашим грозным соперником. Ваш персонаж также может быть родственником персонажа другого игрока.

!!!Образ жизни вашей семьи

Прежде чем определять численность вашей родни, определите в каких условиях проживало ваше семейство. Выбор образа жизни не означает, что ваш персонаж должен следовать ему до конца своих дней, скорее всего он измениться со временем, но этот выбор означает образ жизни в котором вы росли.

<<tabs "[tag[Образ жизни]sort[created]]" "" "$:/state/tab1" "tc-vertical">>

!!!Родители и опекуны
После того, как вы определили образ жизни своей семьи, подумайте о том, кем они являются. Начните с собственного воспитания. Росли ли вы вместе со своими родителями? Или вас отправили на попечение тёте и дяде? А может ваши родители оставили вас на ступенях храма, или вы с ранних лет жили и обучались у мастера вашего класса?


<<<
''Решение проблемы перенаселения сиротских приютов''

То, что вы не были воспитаны вашими родителями, ещё не означает, что они мертвы. Возможно, вас передали бабушке или дяде, потому что ваши родители потеряли возможность воспитывать вас по какой-либо причине. Возможно, вы незаконорожденный ребёнок, которого нужно воспитывать в другом месте. Возможно, вас отправили на обучение и проживание в академии. Существует множество способов объяснить причину по которой у вашего персонажа нет родителей, или по которой он с ними не общается.
<<<

!!!Братья и сёстры
После определения ситуации с родителями, вам нужно решить есть ли у вас братья или сёстры. Вы можете быть как единственным ребёнком в семье, так и одним из многих детей. 

|!Образ жизни | !Братья и сёстры|
|Никудышный | 1к4-3 |
|Нищенский | 1к4-2 |
|Бедный | 1к6-3 |
|Скромный | 1к6-2  |
|Комфортный | 1к6-1 |
|Богатый | 1к10-2 |
|Дворянский | 2к6-2 |

---

!!Важные жизненные события

Независимо от того, сколько вы живёте, в вашей жизни произошло хотя бы одно событие, которое значительно повлияло на ваш характер. Жизненные события включают в себя чудеса и трагедии, конфликты и успехи, а также встречи с необычным. Они могут помочь объяснить, почему ваш персонаж стал искателем приключений, а некоторые всё ещё могут повлиять на вашу жизнь, хоть и произошли они очень давно. 

Чем персонаж старше, тем выше шанс, что в его жизни было несколько таких событий, как показано в таблице ниже. Вы можете бросить кости, чтобы определить ваш текущий возраст и количество жизненных событий случайным образом. 

| !к100 |!Текущий возраст | !Жизненные события |
| 01-20 |20 лет и моложе | 1 |
| 21-59 |21-30 лет | 1к4 |
| 60-69 |31-40 лет | 1к6 |
| 70-89 |41-50 лет | 1к8 |
| 90-99 |51-60 лет | 1к10 |
| 00 |61 год или старше | 1к12 |

После того, как вы узнаете, сколько жизненных событий пережил вам персонаж, совершите бросок по таблице ниже для каждого из них. Многие из результатов, приведённых в этой таблице, указывают на одну из нижеследующих вторичных таблиц. Как только вы определили все события в жизни персонажа, можете расположить их в хронологическом порядке как посчитаете нужным. 

| !_к100_ |!Событие |
| 01-10 |Вы пережили трагедию. Совершите бросок по таблице «Трагедии». |
| 11-20 |Судьба была к вам милостива. Совершите бросок по таблице «Блага». |
| 21-30 |Вы влюбились или поженились. Если вы получите этот результат более одного раза, вы можете выбрать вместо него рождение ребёнка. Обсудите с вашим Мастером личность возлюбленного/возлюбленной вашего персонажа. |
| 31-40 |Вы нажили себе врага искателя приключений. Бросьте к6. Нечётное число означает, что вы виноваты в ссоре, а чётное – что вы невиновны. Используйте дополнительные таблицы и поговорите с вашим Мастером, чтобы определить личность этого враждебного персонажа и опасность, которую он представляет для вас. |
| 41-50 |Вы подружились с искателем приключений. Используйте дополнительные таблицы и поговорите с вашим Мастером, чтобы добавить больше деталей этому дружелюбному персонажу, и установить, как началась ваша дружба. |
| 51-70 |Вы провели время, работая по профессии, связанной с вашей предысторией. Начните игру с дополнительными 2к6 см. |
| 71-75 |Вы повстречались с очень важной персоной. Используйте дополнительные таблицы, чтобы определить личность этого персонажа и как он к вам относится. Придумайте дополнительные детали вместе с вашим Мастером, чтобы этот персонаж соответствовал вашей предыстории. |
| 76-80 |Вы отправились в приключение. Совершите бросок по таблице «Приключения», чтобы узнать, что с вами произошло. Придумайте вместе с вашим Мастером характер приключения и существ, с которыми вы столкнулись. |
| 81-85 |Вы встретились со сверхъестественным. Совершите бросок по таблице «Сверхъестественные события», чтобы узнать, что произошло. |
| 86-90 |Вы сражались в битве. Совершите бросок по таблице «Война», чтобы узнать, что с вами случилось. Придумайте вместе с вашим Мастером, что послужило причиной противостояния и кто в нём участвовал. Возможно, это был небольшой конфликт между вашим поселение и группой орков, или это могло быть генеральное сражение в крупной войне. |
| 91-95 |Вы совершили преступление или были ошибочно обвинены в этом. Совершите бросок по таблице «Преступление», чтобы определить его характер, и по таблице «Наказание», чтобы узнать, что с вами стало. |
| 96-99 |Вы столкнулись с чем-то магическим. Совершите бросок по таблице «Волшебные дела». |
| 00 |С вами случилось что-то действительно странное. Совершите бросок по таблице «Странные вещи». |


!!!Второстепенные таблицы
Эти таблицы добавляют детали ко многим результатам из таблицы «Жизненные события». Ниже они приводятся в алфавитном порядке.

<<tabs "[tag[Жизненные события]nsort[]]" "" "$:/state/tab1" "tc-vertical">>

---

!!Личность
Проработка личности вашего персонажа - определение черт, привычек, манер, убеждение и недостатков, придающих ему уникальность - поможет вам вдохнуть в него жизнь во время игры. В предложенных в Шаге 2 вариантах [[Предысторий|Шаг 2. Выберите Предысторию]] представлены таблицы с особенностями личности, разделённые на четыре категории: черты характера, идеалы, привязанности и слабости. Помимо этого подумайте о любимых словах и фразах вашего персонажа, привычных ему жестах, о его пороках и больных местах.

!!!Черты характера
Черты характеры - это простые мелочи, позволяющие отличить вашего персонажа от любого другого. Они должны определять что-то интересное и забавное в персонаже, показывать нечто особенное, что могло бы выделить его среди остальных. «Я умный» — плохая черта, так как подходит многим персонажам. «Я прочёл все книги в Крепости Свечи» говорит об интересах вашего персонажа значительно больше.

Черты характера могут говорить о достижениях вашего персонажа, его пристрастиях или страхах, его манерах и самооценке. 

!!!Идеалы
Идеалы — это вещи, в которые вы верите настолько сильно, что они определяют ваши моральные принципы и линию поведения. Идеалы охватывают все аспекты жизни: от жизненных целей до убеждений. 

Идеалы способны ответить на такие вопросы как: Какие принципы вы никогда не предадите? Что заставит вас пойти на жертвы? Что направляет все ваши усилия и амбиции? Что является самым важным, к чему стоит стремиться?

!!!Привязанности
Привязанности определяют взаимосвязь вашего персонажа с людьми, местами или историческими событиями. Они связывают вас с деталями вашей предыстории. Они могут вдохновить вас на подвиги, или же заставят вас действовать вопреки убеждениям, если вы вдруг окажетесь в опасности. Они могут влиять на личность персонажа так же сильно, как и его идеалы, определяя его цели и стремления.

Привязанности позволяют ответить на вопросы: Кто вам действительного дорог? Какое место имеет для вас особенное значение? Какая вещь для вас наиболее ценна?

Ваши привязанности могут быть переплетены с вашим классом, предысторией, расой и прочими аспектами вашей истории. Вы можете получать новые привязанности во время приключений.

!!!Слабости
Слабость вашего персонажа может выражаться в личном враге, страхе, страсти, недостатке — в общем, это всё то, что можно использовать против вас. Ваша слабость позволяет ответить на вопросы: Что вас раздражает? Кто (или что) пугает вас? Кто считает вас своим врагом? 

---

!!Увлечения и хобби
Иногда у вашего персонажа могут быть интересы помимо простого убийства монстров и получения добычи. Наличие хобби может мотивировать вашего персонажа в направлениях, которых вы не обязательно ожидали. Хобби также может быть второй профессией. Ваша группа может, например, выступать странствующей театральной труппой, пока она не занята исследованием подземелий. Игровые правила могут предоставлять механики или инструменты, позволяющие персонажам заниматься подобными вещами в свободное время.

Во время выбора хобби, подумайте о том, как персонаж начал этим заниматься. Было ли это связано с местом, в котором вы росли, с вашим воспитанием или с вашей профессией до вступления на путь приключенца?

---

!!Пороки
Под пороками понимаются психологические и физиологические отклонения персонажа, например, фобии или одержимости. Не каждый персонаж должен обладать такими отклонениями, но такой вариант существует. В действительности подобные вещи затрагивают только каждого четвёртого человека, поэтому при желании вы можете определить броском к4, есть ли у вашего персонажа порок или нет.

Если вы решили пойти этим путём кастомизации персонажа, подумайте о том, как ваши пороки влияют на вашу повседневную жизнь. Избегаете ли вы специфичных ситуаций? Как вы и окружающие относитесь к проявлению ваших пороков? Способен ли ваш персонаж преодолеть их, находясь под давлением?

Вам стоит задуматься о том, что стало результатом того или иного порока вашего персонажа. Является ли он врождённым дефектом, результатом прошлых событий, или чем-то, что ваш персонаж не в состоянии объяснить?

Помните, что пороки //дополняют// вашего персонажа, а не //определяют// его. Наличие фобии или одержимости не является качестом, заменяющим личность персонажа. Пороки не должны быть определяющей или отправной точкой создания вашего персонажа по той простой причине, что это реальные комплексные недуги, от которых страдают люди, и которые мы не хотим превращать в стереотипы.
Создайте копию листа персонажа по ссылке ниже и начните его заполнение с деталей, с которыми вы определились в [[Шаге 0|Шаг 0. Создайте концепцию]]. Продолжайте его заполнение по мере выполнения [[шагов создания персонажа|Шаги создания персонажа]].

[[Актуальный лист персонажа с инструкциями по заполнению|https://docs.google.com/spreadsheets/d/17fQfYAswxVkJXvjfogjjWgpr-7Yf-ixyXjHp5vkvDVc/edit?usp=sharing]]
Каждая история имеет своё начало. Истоки истории вашего персонажа могут описывать, почему он выбрал дорогу приключений, и как он стал тем, кем является. Ваш воин может быть благородным рыцарем или седым суровым солдатом. Ваш волшебник может быть мудрецом или ремесленником. Ваш плут может быть агентом гильдии воров или замаскированным шутом.

Выбор предыстории предоставляет вам важные сюжетные элементы в самобытности вашего персонажа. Что изменилось в жизни вашего персонажа после предыстории? Что заставило бросить вашу деятельность и отправиться на поиски приключений? Где вы взяли деньги на покупку своего снаряжения, или, если у вас предыстория богача, почему у вас нет больше денег? Как вы узнали навыки своего класса? Что отличает вас от обычных людей, которые имеют такую же предысторию?

---

!!!Владение
Каждая предыстория даёт вашему персонажу владение двумя навыками.

Кроме того, большинство предысторий даёт персонажу владение одним или несколькими инструментами.

Вы добавляете свой бонус мастерства к проверкам характеристик при использовании этих навыков и инструментов.

Если персонаж получает владение одним и тем же из двух разных источников, он может выбрать другое владение того же вида (навыком или инструментом).

---

!!!Языки
Некоторые предыстории также дают вам возможность выучить языки в дополнение к тем, которые даёт ваша раса.

Выберите языки из таблицы обычных языков или из тех, что считаются обычными в вашей кампании. С разрешения Мастера, вы можете выбрать язык из таблицы экзотических языков или тайный язык, такой как жаргон воров или язык друидов.

Некоторые из этих языков на деле являются семействами языков с многочисленными диалектами. Например, Первичный язык включает диалекты Акван, Ауран, Игнан, и Терран, по одному на каждый из четырёх стихийных планов. Существа, говорящие на разных диалектах одного языка могут общаться между собой.

''Обычные языки''

|!Язык |!Типичные представители |!Письменность |
|Великаний  |Огры, великаны |Великанья  |
|Гномий  |Гномы |Дварфская  |
|Гоблинский  |Гоблиноиды  |Дварфская  |
|Дварфский  |Дварфы  |Дварфская  |
|Общий |Люди  |Общая  |
|Орочий  |Орки |Дварфская  |
|Полуросликов  |Полурослики  |Общая  |
|Эльфийский  |Эльфы |Эльфийская  |

''Экзотические языки''

|!Язык |!Типичные представители |!Письменность |
|Бездны  |Демоны  |Инфернальная  |
|Глубинная Речь |Иллитиды, злобоглазы |— |
|Драконий |Драконы, драконорождённые |Драконья  |
| Инфернальный |Дьяволы |Инфернальная  |
|Небесный |Небожители  |Небесная  |
|Первичный  |Элементали  |Дварфская  |
|Подземный |Купцы Подземья  |Эльфийская  |
|Сильван  |Фейские существа  |Эльфийская  |


<<<
''Особенности языков''

//''Дварфский.''// Дварфский язык состоит из твёрдых согласных и гортанных звуков, и этот акцент будет присутствовать в любом языке, на котором дварф будет говорить.

//''Гномий.''// Гномий язык, использующий дварфский алфавит, хорошо известен благодаря техническим трактатам и каталогам знаний об окружающем мире.

//''Орочий.''// Орочий язык резкий и грубый, полный твёрдых согласных. Он не имеет собственного алфавита и использует дварфский.

//''Полуросликов.''// Их язык не является секретным, но они не торопятся делиться им с остальными. Пишут они мало, и почти не создали собственной литературы, но устные предания у них очень распространены.

//''Эльфийский.''// Эльфийский язык текучий, с утончёнными интонациями и сложной грамматикой. Эльфийская литература богата и разнообразна, а стихи и песни известны среди представителей других рас. Многие барды учат эльфийский язык, чтоб добавить песни в свой репертуар.

//''Драконий.''// Драконий язык считается одним из старейших и часто используется во время изучения магии. Этот язык звучит грубо для большинства других существ, и содержит много твёрдых согласных и шипящих звуков.
<<<

---

!!!Экипировка
Каждая предыстория подразумевает владение некоторым имуществом. 

---

!!!Персонализация
Каждая предыстория имеет набор личных качеств, основанных на ней. Вы можете выбрать их самостоятельно, бросить кость, чтобы определить их случайно, или использовать в качестве рекомендаций, чтобы создать собственные. Выберите две черты характера и по одному идеалу, привязанности и слабости.

---

!!!Собственная предыстория
Возможно, вы захотите изменить некоторые особенности предыстории, чтобы они лучше подходили вашему персонажу или игровому миру. Для создания собственной предыстории вы можете изменить одно умение на любое другое, выбрать набор экипировки, выбрать два любых навыка и выбрать владение инструментами и языками, чтобы в сумме их было не больше двух, из образцов других предысторий. И наконец, выберите черты характера, идеал, привязанность и слабость. Если вы не можете выбрать умение предыстории, которое подходит именно вам, посоветуйтесь с Мастером и создайте своё собственное.

---

<<tabs "[tag[Предыстория]nsort[]]" "" "$:/state/tab1" "tc-vertical">>
Каждый искатель приключений — представитель какого-либо класса. Класс в общих чертах описывает призвание персонажа, таланты, которыми он обладает, и тактики, к которым он чаще всего прибегает, когда исследует подземелье, сражается с монстрами или участвует в напряжённых переговорах.

Класс является основным мерилом способностей вашего персонажа. Это больше чем профессия, это призвание вашего персонажа. Класс формирует ваше представление о мире и взаимодействие с ним, а также ваше отношение к другим существам и силам мультивселенной. Воин, например, может смотреть на мир прагматично, с точки зрения стратегии и манёвров, и видеть себя всего лишь пешкой в большой игре. Жрец напротив, может видеть себя в качестве усердного служителя разворачивающегося грандиозного плана божества, или назревающего конфликта между различными богами. У воина есть связи в организациях наёмников или войсках, а жрец может знать множество священников, паладинов и последователей, разделяющих его веру.

Ваш персонаж получает ряд преимуществ от выбранного вами класса. Множество этих преимуществ являются классовыми умениями — возможностями (включая сотворение заклинаний), которые отличают вашего персонажа от представителей других классов. Вы также получаете перечень владения (умение пользоваться) доспехами, оружием, навыками, спасбросками и иногда инструментами.

Искатели приключений иногда развиваются сразу в нескольких классах. [[Плут|Плут]] может поменять жизненный путь и дать присягу [[паладина|Паладин]]. [[Варвар|Варвар]] может обнаружить скрытые магические способности и практиковаться в классе [[чародей|Чародей]], продолжая совершенствоваться как варвар. [[Эльфы|Эльф]] известны тем, что сочетают военное мастерство с магической подготовкой и развиваются как [[воины|Воин]] и [[волшебники|Волшебник]] одновременно. Опциональные правила такого комбинирования классов называются [[мультиклассированием|Мультиклассирование]].


<<<
!!!Быстрое создание
Описание каждого класса включает в себя раздел, предлагающий варианты быстрого создания персонажа этого класса, включая распределение значений характеристик, предысторию, подходящую для класса и начальные заклинания.
<<<

|!Класс |!Описание | !Кость Хитов |!Основная характеристика|
|[[Бард|Бард]] |Вдохновляющий заклинатель, черпающий мощь в музыке созидания | к8 |Харизма |
|[[Варвар|Варвар]] |Свирепый воин, способный впадать в боевую ярость | к12 |Сила |
|[[Воин|Воин]] |Мастер сражения, опытный во владении различным оружием и доспехами | к10 |Сила или Ловкость |
|[[Волшебник|Волшебник]] |Учёный заклинатель, способный манипулировать структурой реальности | к6 |Интеллект |
|[[Друид|Друид]] |Проповедник Старой Веры, владеющий силами природы — лунным светом и ростом растений, огнём и молнией, и принимающий облик животных | к8 |Мудрость |
|[[Жрец|Жрец]] |Священнослужитель-заступник, владеющий божественной магией и состоящий на службе высших сил | к8 |Мудрость |
|[[Изобретатель|Изобретатель]] |Инноватор совмещающий возможности ремёсел и магии | к8 |Интеллект |
|[[Колдун|Колдун]] |Обладатель магии, полученной посредством сделки с экстрапланарной сущностью | к8 |Харизма |
|[[Кровавый охотник|Кровавый охотник]] |Боец Ордена, использующий запретные эзотерические техники для борьбы со злом | к10 |Сила или Ловкость, и Интеллект |
|[[Монах|Монах]] |Мастер боевых искусств, использующий мощь тела в поисках физического и духовного совершенства | к8 |Ловкость и Мудрость |
|[[Паладин|Паладин]] |Святой воин, связанный духовным обетом | к10 |Сила и Харизма |
|[[Плут|Плут]] |Мошенник, который использует хитрость и обман, чтобы одолеть препятствия и противников | к8 |Ловкость |
|[[Следопыт|Следопыт]] |Воитель, использующий боевое искусство и магию природы для борьбы с угрозами на окраинах цивилизации   | к10 |Сила или Ловкость, и Мудрость |
|[[Чародей|Чародей]] |Заклинатель, черпающий магию в себе, получив её в дар или как наследие  | к6 |Харизма |

---

!!!Уровень
Обычно персонаж начинает с 1 уровня и достигает новых уровней, завершая приключения и получая опыт. На 1 уровне персонаж неопытен в мире приключений, хотя он мог быть солдатом или пиратом и вести опасную жизнь и раньше.

Если вы уже знакомы с игрой или если вы присоединяетесь к текущей кампании, ваш Мастер может решить, что вы начинаете с более высоким уровнем, предполагая, что ваш персонаж уже пережил несколько опасных приключений. Персонаж более высокого уровня, как правило, начинает с минимальным значением опыта, необходимым для достижения этого уровня.

---

!!!Хиты и Кость Хитов
Хиты вашего персонажа определяют, насколько стойким является ваш персонаж в сражениях и других опасных ситуациях. Ваши хиты определяются вашей Костью Хитов.

На 1 уровне, у вашего персонажа 1 Кость Хитов, и вид этой кости определяется вашим классом. Вы начинаете с числом хитов, равным наибольшему возможному результату броска этой кости, как отмечено в описании вашего класса (вы также добавляете ваш модификатор Телосложения). Это число также является вашим максимальным значением хитов.

Во время [[отдыха|Отдых]] вы можете тратить Кости Хитов на восстановление хитов.

---

!!!Бонус мастерства
В таблице, которая находится в описании вашего класса, приведён бонус мастерства, который равен +2 для персонажа 1 уровня. Ваш бонус мастерства добавляется ко многим числам, которые вы будете записывать на свой лист персонажа:

* Броски атак при использовании оружия, которым вы владеете
* Броски атак сотворяемых вами заклинаний
* Проверки характеристик при использовании навыков, которыми вы владеете
* Проверки характеристик с инструментами, которыми вы владеете
* Спасброски, которыми вы владеете
* Сл. спасбросков сотворяемых вами заклинаний

Ваш бонус мастерства не может быть добавлен к одному броску костей или какому-либо числу более одного раза. Иногда ваш бонус мастерства может быть преобразован (увеличен или уменьшен вдвое), прежде чем будет прибавлен к броску. Если обстоятельства позволяют предположить, что ваш бонус мастерства добавляется больше одного раза к одному и тому же броску или должен быть умножен более одного раза, всё равно добавьте его только один раз, увеличьте или уменьшите вдвое только один раз.
Каждый персонаж принадлежит к одной из множества разумных гуманоидных [[рас|Расы]] мира D&D. Наиболее распространёнными [[расами|Расы]] игровых персонажей являются [[дварфы|Дварф]], [[эльфы|Эльф]], [[полурослики|Полурослик]] и [[люди|Человек]]. Некоторые [[расы |Расы]]также имеют подрасы, например, [[горный дварф|Горный дварф]] или [[лесной эльф|Лесной эльф]].

[[Раса|Расы]], которую вы выбрали, придаёт индивидуальность вашему персонажу, определяя характерную внешность и врождённые таланты, полученные через культуру и происхождение. [[Раса|Расы]] вашего персонажа даёт определённые расовые особенности, такие как: бонус к одному или нескольким значениям характеристик, особые чувства, владение несколькими видами оружия или инструментов, владение одним или несколькими навыками, а также возможность использовать простейшие заклинания.

Ваша раса также увеличивает одно или несколько значений характеристик, которые вы определите в [[Шаге 5|Шаг 5. Определите значения характеристик]]. Также обязательно отметьте ваши начальные языки и базовую скорость.
Многое из того, что ваш персонаж способен сделать в игре, зависит от его шести характеристик: ''Силы'', ''Ловкости'', ''Телосложения'', ''Интеллекта'', ''Мудрости ''и ''Харизмы''.

Вы можете определить значения своих характеристик следующими способами:

# Используйте стандартный набор значений - 15, 14, 13, 12, 10, 8.
# Используйте [[калькулятор покупки значений|http://chicken-dinner.com/5e/5e-point-buy.html]] (со стандартными настройками)
# Используйте случайный метод определения значений:
* совершите четыре броска к4 и возьмите сумму трех наибольших результатов, повторяйте пока не получите 6 значений (!rr 6 4d4kh3);
* прибавьте одно значение из набора 6, 5, 4, 3, 2, 1 к каждому из полученных ранее значений, вы можете использовать каждое значение из набора не более одного раза.
<<<
//Пример://

|4d4kh3 (4, 3, 2, ~~2~~) = 9| +5 |!= 14 |
|4d4kh3 (4, 1, 2, ~~1~~) = 7| +3 |!= 10 |
|4d4kh3 (4, 1, 1, ~~1~~) = 6| +2 |!= 8 |
|4d4kh3 (3, 3, ~~3~~, 4) = 10| +4 |!= 14 |
|4d4kh3 (4, ~~2~~, 3, 3) = 10| +6 |!= 16 |
|4d4kh3 (4, ~~1~~, 2, 2) = 8| +1 |!= 9 |

<<<



Присвойте полученные значения Силе, Ловкости, Телосложению, Интеллекту, Мудрости и Харизме на ваше усмотрение. После выбора расы значения характеристик изменятся.

После распределения значений характеристик определите модификаторы характеристик, используя таблицу ниже. Для определения модификатора характеристики без обращения к таблице вычтите 10 из значения характеристики и разделите результат на 2, округляя вниз.

| !Значение | !Модификатор | !Значение | !Модификатор |
| 1 | -5 | 16-17 | +3 |
| 2-3 | -4 | 18-19 | +4 |
| 4-5 | -3 | 20-21 | +5 |
| 6-7 | -2 | 22-23 | +6 |
| 8-9 | -1 | 24-25 | +7 |
| 10-11 | 0 | 26-27 | +8 |
| 12-13 | +1 | 28-29 | +9 |
| 14-15 | +2 | 30 | +10 |
Пороки отражают отрицательные особенности персонажа, будь они телесными или моральными.

* При создании персонажа вы можете выбрать ему до 5 пороков. Вы также можете выбрать их случайно, совершив броски к100 по таблице ниже.
* Вы не можете получить порок после создания персонажа (если Мастер не решит иначе).
* Каждый выбранный порок дает очки навыков в количестве, указанном в таблице. Вы не можете получить более 24 очков.
* За полученные очки навыков вы можете приобрести черту или владения инструментами, навыками и/или языками. 
* Непотраченные при создании персонажа очки навыков теряются.
* Эффекты пороков игнорируют сопротивления и иммунитеты персонажа (если Мастер не решит иначе).
* Персонаж должен соответствовать требованиям и следовать ограничениям выбранного порока.

!!!Очки навыков

|!Владение | !Стоимость |
|Музыкальный инструмент | 1 |
|Игровой набор | 1 |
|Язык | 2 |
|Ремесленный инструмент | 3 |
|Особый инструмент | 4 |
|Навык | 4 |
|Черта | 12 |

[[Актуальный список пороков|https://docs.google.com/spreadsheets/d/1mKmy6xS-YUFphxTN-xBEkVDglUx-oEFjrRf4eN96JOk/edit?usp=sharing#gid=953885243]]
Ваш [[класс|Классы]] и [[предыстория|Шаг 2. Выберите Предысторию]] определяют начальную [[экипировку|Экипировка]] вашего персонажа, включая [[оружие|Оружие]], [[доспехи|Доспехи и щиты]] и прочее [[снаряжение|Снаряжение]] искателя приключений.

Вместо того чтобы брать экипировку, приводимую в описании класса, вы можете купить её на серебряные монеты (см), количество которых зависит от вашего класса.

''Богатство на 1 уровне''

|!Класс | !Деньги|
|Монах | 1к4 × 10 см|
|Варвар, друид, чародей | 3к4 × 10 см|
|Бард, волшебник, колдун,плут | 4к4 × 10 см|
|Жрец, изобретатель, следопыт | 5к4 × 10 см|
|Кровавый охотник | 6к4 × 10 см|
|Воин, паладин | 8к4 × 10 см|

Ваш показатель Силы ограничивает количество экипировки, которое вы сможете носить с собой. Старайтесь не приобретать экипировку общим весом (в килограммах), превышающим значение Силы в 4 раза (в 2 раза, если ваш размер - Маленький).

---

!!!Класс доспеха
Ваш Класс доспеха (КД) определяет, насколько хорошо ваш персонаж избегает ранений в бою. На КД влияет надетый доспех, удерживаемый щит и модификатор Ловкости.

Без доспеха и щита КД вашего персонажа равен 10 + модификатор Ловкости.

Ваш персонаж должен владеть доспехами и щитом, чтобы использовать их эффективно. Владение доспехами и щитами определяется классом. При ношении доспехов и щитов, которыми вы не владеете, накладываются определённые штрафы.

Некоторые заклинания и классовые умения позволяют вам рассчитывать ваш КД другим способом. Если у вас есть различные умения, позволяющие рассчитывать КД разными способами, вы выбираете один из них, который будете использовать.

---

!!!Оружие
Для каждого оружия, которым обладает ваш персонаж, рассчитайте модификатор, используемый при атаке, и урон, причиняемый при попадании.

Совершая атаку оружием, вы бросаете к20, прибавляете ваш бонус мастерства (если вы владеете этим оружием) и соответствующий модификатор характеристики.

---

''Старт после 1 уровня''

| !Ур. | !Низкое фэнтези |<|<| !Стандартная кампания |<|<| !Высокое фэнтези |<|<|
|~| !+ см | !Незн. | !Знач. | !+ см | !Незн. | !Знач. | !+ см | !Незн. | !Знач. |
| !1 | Стартовое снаряжение |<|<|<|<|<|<|<|<|
| !2 | 50 | - | - | 50 | - | - | 100 | 1О | - |
| !3 | 150 | - | - | 150 | - | - | 200 | 1О | - |
| !4 | 250 | - | - | 250 | - | - | 3800 | 2О | 1Н |
| !5 | 400 | - | - | 400 | - | - | 4000 | 2О | 1Н |
| !6 | 550 | - | - | 550 | - | - | 4500 | 2О 1Н | 1Н |
| !7 | 700 | - | - | 750 | 1О | - | 8000 | 2О 1Н | 2Н |
| !8 | 1500 | - | - | 1600 | 1О | - | 9000 | 3О 2Н | 2Н |
| !9 | 2000 | - | - | 5500 | 2О | 1Н | 10000 | 3О 2Н | 2Н |
| !10 | 3000 | - | - | 6500 | 2О | 1Н | 17000 | 4О 3Н 1Р | 3Н |
| !11 | 4000 | - | - | 8000 | 2О 1Н | 1Н | 18000 | 4О 3Н 1Р | 3Н |
| !12 | 5000 | 1О | - | 12500 | 2О 1Н | 2Н | 20000 | 4О 4Н 2Р | 3Н |
| !13 | 6000 | 1О | - | 14000 | 3О 2Н | 2Н | 32000 | 4О 4Н 2Р | 3Н 1Р |
| !14 | 10500 | 2О | 1Н | 15000 | 3О 2Н | 2Н | 35000 | 4О 4Н 3Р | 3Н 1Р |
| !15 | 11500 | 2О | 1Н | 22000 | 4О 3Н 1Р | 3Н | 36000 | 4О 4Н 3Р | 3Н 1Р |
| !16 | 16000 | 2О 1Н | 1Н | 26000 | 4О 3Н 1Р | 3Н | 75000 | 5О 5Н 4Р 1ОР | 3Н 2Р |
| !17 | 24000 | 2О 1Н | 2Н | 32000 | 4О 4Н 2Р | 3Н | 80000 | 5О 5Н 4Р 1ОР | 3Н 2Р |
| !18 | 30000 | 3О 2Н | 2Н | 47000 | 4О 4Н 2Р | 3Н 1Р | 95000 | 5О 5Н 4Р 1ОР 1Л | 3Н 2Р |
| !19 | 35000 | 3О 2Н | 2Н | 55000 | 4О 4Н 3Р | 3Н 1Р | 130000 | 5О 5Н 4Р 1ОР 1Л | 4Н 2Р 1ОР |
| !20 | 45000 | 4О 3Н 1Р |3Н | 65000 | 4О 4Н 3Р | 3Н 1Р | 150000 | 5О 5Н 5Р 2ОР 2Л | 4Н 2Р 1ОР |

[img [https://i.imgur.com/lYaBvye.png]]
<div class="tc-table-of-contents">
<<toc-selective-expandable "Шаги создания персонажа">>
</div>
[img width=464 class="centerme" [https://i.imgur.com/iPqbbZ2.png]]

Присягнув служить Королеве Воронов, таинственные шадар-каи путешествуют в Материальный План из Царства Теней для того, чтобы выполнять её поручения. Когда-то давно они были феями, как и остальная часть их эльфийского рода, но теперь они существуют в странной форме на грани жизни и смерти. Шадар-каи и эладрины являются прямыми противоположностями друг друга: одних переполняют эмоции, другие же практически лишены их. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашего Телосложения увеличивается на 1. |
|^Благословение Королевы Воронов |^Вы можете бонусным действием магическим образом телепортироваться в свободное пространство в пределах вашей видимости на расстояние до 6 м. После достижения 3 уровня, при телепортации с помощью этой особенности, вы также получаете сопротивление ко всему урону. Сопротивление длится до начала вашего следующего хода. В течение этого времени, ваш облик становится призрачным и полупрозрачным. Вы не можете использовать эту особенность повторно, пока не завершите продолжительный отдых. |
|^Некротическое сопротивление |^Вы получаете сопротивление к урону некротической энергией. |

Вы хорошо знаете людей. Вы понимаете, что ими движет, и можете распознать их самые сокровенные желания спустя всего пару минут после начала разговора. Несколько наводящих вопросов, и вот вы уже читаете их словно книжки, написанные для детей. Это полезный талант, и вы вполне готовы использовать его себе на благо.

Вы знаете, что люди хотят, и вы даёте им это, или же обещаете дать. Чувство здравого смысла должно заставлять людей держаться подальше от тех вещей, которые слишком хорошо звучат, чтобы быть правдой. Но здравый смысл куда-то улетучивается, когда вы неподалёку. Бутылочка с розовой жидкостью всенепременно вылечит эту неблаговидную сыпь, а эта чудодейственная мазь (не более чем горсть жира, смешанного с серебряной пылью) без сомнения вернёт молодость и энергичность. Все эти чудеса, конечно, звучат неправдоподобно, но вы знаете, как преподнести их так, чтобы они казались крайне выгодным делом.

* ''Владение навыками:'' Ловкость рук, Обман
* ''Владение инструментами:'' [[Набор для грима|Набор для грима]], [[набор для фальсификации|Набор для фальсификации]]
* ''Экипировка:'' Комплект дорожной одежды, набор для грима, приспособление для жульничества на ваш выбор (десять запечатанных бутылей с подкрашенной жидкостью, набор шулерских костей, колода краплёных карт или кольцо с печатью какого-нибудь воображаемого герцога), кошель с 15 см

!!!Излюбленные махинации
У каждого шарлатана есть свой излюбленный подход к совершению афер.

| !к6 |!Афера |
| 1 |Я мухлюю в азартных играх. |
| 2 |Я подделываю монеты или документы. |
| 3 |Я втираюсь к людям в доверие, чтобы потом играть на их слабостях и наживаться за их счёт. |
| 4 |Я меняю личности как перчатки. |
| 5 |Я занимаюсь уличным жульничеством с помощью ловкости рук. |
| 6 |Я убеждаю людей, что эта бесполезная куча хлама стоит их кровно заработанных денег. |

!!!Умение: Поддельная личность
Вы создали себе вторую личность, включая необходимые документы, знакомства и маскировку, что позволяет вам перевоплощаться в этот образ. В дополнение к этому вы можете подделывать документы, включая официальные документы и личные письма, если ранее видели пример подобного документа или почерк, который пытаетесь скопировать.

!!!Персонализация
Шарлатаны — яркие персонажи, скрывающиеся за создаваемыми масками. Они являются отражениями того, что другие хотят видеть, во что другие верят, и как другие видят мир. Их истинную натуру может мучить совесть, постоянное недоверие, и им может угрожать враг.

| !к8 |!Черта характера |
| 1 |Я легко начинаю и разрываю романтические отношения, и постоянно нахожусь в поиске новой пассии. |
| 2 |У меня припасены шуточки на все случаи жизни, особенно на те, где юмор вообще неуместен. |
| 3 |Лесть — мой излюбленный способ добиться желаемого. |
| 4 |Я прирождённый игрок, и не могу удержаться от риска, если на кону стоит что-то стоящее. |
| 5 |Я постоянно вру, зачастую даже без малейшей на то причины. |
| 6 |Сарказм и оскорбления — мои излюбленные приёмы. |
| 7 |Я ношу с собой различные святые символы, и взываю к тем божествам, что лучше подходят для каждого конкретного случая. |
| 8 |Я тащу в карман всё, что плохо лежит и имеет хоть какую-то ценность. |

| !к6 |!Идеал |
| 1 |''Независимость.'' У меня свободолюбивая натура — никто не смеет указывать мне, что делать. |
| 2 |''Милосердие.'' Я распределяю добытые деньги между людьми, которые в них действительно нуждаются. |
| 3 |''Честность.'' Я никогда не выберу своей жертвой людей, которые находятся в бедственном положении. |
| 4 |''Креативность.'' Я никогда не иду проторённой дорожкой. |
| 5 |''Дружба.'' Материальные блага приходят и уходят, а друзья остаются. |
| 6 |''Стремление.'' Я собираюсь стать кем-то значимым в этой жизни. |

| !к6 |!Привязанность |
| 1 |Я перешёл дорожку не тому человеку, и должен постоянно заботиться о том, чтобы мне и моим близким не навредили. |
| 2 |Я всем обязан своему наставнику — ужасному человеку, который, вполне вероятно, гниёт сейчас в какой-нибудь тюрьме. |
| 3 |Где-то живёт мой ребёнок, который не знает обо мне. И для него я пытаюсь сделать этот мир лучше. |
| 4 |Я отпрыск благородного рода, и когда-нибудь заберу свои земли и титул у тех, кто их украл. |
| 5 |Влиятельный враг убил дорогого мне человека. И однажды я отомщу. |
| 6 |Я пустил по миру человека, который того не заслуживал. Я стремлюсь искупить свой проступок, но скорее всего никогда себя не прощу. |

| !к6 |!Слабость |
| 1 |Я не могу устоять перед смазливой мордашкой. |
| 2 |Я постоянно в долгах. Я трачу свои нечестно нажитые деньги быстрее, чем их добываю. |
| 3 |Я убеждён в том, что никто не сможет одурачить меня так, как я одурачиваю других. |
| 4 |Я слишком жаден до серебра. И не могу противиться риску, если в этом замешаны деньги. |
| 5 |Я не могу устоять и не облапошить людей, стоящих гораздо выше, чем я. |
| 6 |Я ненавижу себя за это, но я сбегу, чтобы спасти свою собственную шкуру, если вдруг запахнет жареным. |
Вы не особо везучий шахтёр, которому не чужды невзгоды. Вы провели много времени, живя среди рас, населяющих горы, и жителей Подземья, которые работали в местных шахтах. Теперь вам так же комфортно работать под землей, как и на поверхности. Вы разбираетесь в горных породах, вам знакома торговля припасами с глубинными гномами, гулянки с дварфами и после этого поиск пути обратно на поверхность. К сожалению, вы ещё не разбогатели... пока.

* ''Владение навыками:'' Атлетика, Выносливость
* ''Языки:'' Подземный и один на ваш выбор 
* ''Снаряжение:'' Лопата или кирка, блок и лебёдка, комплект для лазания, комплект одежды ремесленника и кошель с 5 см 

!!!Умение: Знаток глубин
Вы привыкли к навигации в недрах земли. Вы никогда не заблудитесь в пещерах или шахтах, если видели их точную карту или проходили через них раньше. Кроме того, вы находите вдвое больше пищи и воды при сборе еды в шахтах или пещерах.

!!!Персонализация

| !к8 |!Черта характера |
| 1 |Ничто не беспокоит меня надолго.|
| 2 |Я страстно ненавижу кошмары Подземья. Они забрали моих друзей и семью, и почти добрались до меня. |
| 3 |Всё чего-то стоящее требует времени и терпения. Я научился планировать и ждать того, чего хочу, и быть терпеливым для достижения своих целей. |
| 4 |Я могу повеселиться со всеми. Будь то дварфы, голиафы или глубинные гномы, я могу найти способ хорошо провести время. |
| 5 |Я бы предпочёл покопать. И это неплохо, но копать - лучше. |
| 6 |Я думаю, что наткнусь на большое богатство, если буду продолжать искать. |
| 7 |Люди, которые не работают руками и живут в домах, мягкие и слабые. |
| 8 |Хотел бы я быть более образованным. Я равняюсь на таких людей. |

| !к6 |!Идеал |
| 1 |''Щедрость.'' Богатства земли должны быть разделены между всеми. |
| 2 |''Жадность.'' Драгоценные камни и металлы, я хочу забрать их все себе. |
| 3 |''Присвоение. ''Собственность - это чушь. Если мне что-то нужно, я беру и пользуюсь. Если нет - оставляю для кого-то другого. |
| 4 |''Границы.'' У всего и всех есть свое определенное место; я уважаю это и жду от других того же.  |
| 5 |''Пусть будет так.'' Я не вмешиваюсь в дела других, если могу этого избежать. Это не моё дело.  |
| 6 |''Материализм. ''Я жажду богатств, чтобы улучшить свою жизнь.|

| !к6 |!Привязанность |
| 1 |Жители родных рудников - моя семья. Я сделаю все, чтобы защитить их. |
| 2 |Житель Подземья спас мне жизнь, когда я был ранен и одинок. Я в большом долгу перед его народом. |
| 3 |Я должен созерцать и сохранять естественную красоту мест под землей. |
| 4 |Драгоценные камни привлекают меня больше, чем золото, земля, магия или сила. |
| 5 |Я хочу исследовать новые глубины и покорять новые вершины. |
| 6 |Когда-нибудь я найду золотую жилу и проведу остаток жизни в роскоши. |

| !к6 |!Слабость |
| 1 |Мне некомфортно проводить время под открытым небом. Я предпочитаю находиться в помещении или под землей. |
| 2 |Я не привык долго находиться среди других людей и иногда ворчу по этому поводу. |
| 3 |Хорошие инструменты надёжнее людей. В пещере я бы спас крепкую кирку, а не незнакомца. |
| 4 |Я ревностно охраняю свои секреты, потому что думаю, что другие воспользуются мной, если узнают то, что знаю я. |
| 5 |Я одержим идеей разбогатеть. У меня всегда есть план, как заработать по-крупному. |
| 6 |Я боюсь темноты. |
[img width=480 class="centerme" [https://i.imgur.com/bHm6xIY.png]]

<<tabs "[tag[Шифтер - описание]]" "" "$:/state/tab1">>
Сразу же после того, как вы в свой ход совершили действие Атака, вы можете потратить 1 очко ци, чтобы совершить бонусным действием две безоружные атаки.
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
---

!!! [img[6.png]] Инстинктивное очарование
Когда видимое вами существо, находящееся в пределах 6 м от вас, совершает бросок атаки по вам, вы можете реакцией перенаправить атаку, при условии, что есть другое существо, находящееся в пределах досягаемости этой атаки. Атакующий должен совершить спасбросок Мудрости против Сл ваших заклинаний волшебника. При провале атакующий должен выбрать в качестве цели ближайшее существо (кроме вас и себя). Если есть несколько потенциальных целей, атакующий сам выбирает из них цель. В случае успеха вы не можете использовать данное умение против атакующего, пока не завершите продолжительный отдых.

Существа, которых нельзя очаровать, обладают иммунитетом к этому эффекту.

---

[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
[img [https://i.imgur.com/lYaBvye.png]]
<div class="tc-table-of-contents">
<<toc-selective-expandable "Экипировка">>
</div>
[img width=500 class="centerme" [https://i.imgur.com/CVMKQWg.png]]

Эладрины – это эльфы чьей родиной является Страна Фей, царство красоты, непредсказуемых эмоций и безграничной магии. Каждый эладрин отражает одно из четырёх времён года, что выражается их цветовой гаммой, соответствующей сезону, которая так же влияет на настроение эладрина: 

''Осень'' – сезон покоя и доброй воли, время, когда собирают летний урожай и делятся им со всеми. 

''Зима'' – сезон раздумий и скорби, когда жизненная энергия мира дремлет. 

''Весна'' – сезон радости и торжества, отмеченное весельем из-за ухода зимней горечи. 

''Лето'' – сезон храбрости и враждебности, время необузданной энергии. 

Некоторые эладрины сохраняют свою связь с определённым временем года всю свою жизнь, в то время как другие изменяются, принимая особенности нового сезона. После завершения продолжительного отдыха любой эладрин может поменять своё время года. Эладрин может выбрать то же время года, что и в окружающем его мире, либо более соответствующее его текущему эмоциональному состоянию. Например, эладрин может принять облик осени, если он чувствует себя удовлетворённым, другой же может принять облик зимы, если погрузится в печаль, третий может принять облик весны, если будет чувствовать радость, а из-за проявления ярости, эладрин может изменится в летний облик. 

Эладрины имеют следующие общие особенности, в добавок к особенностям, характерным остальным эльфам. Выберите время года вашего эладрина: осень, зима, весна или лето. 

|!Особенность |!Описание |
|^Увеличение характеристик |^Значение вашей Харизмы увеличивается на 1. |
|^Фейский шаг |^Вы можете бонусным действием магическим образом телепортироваться в свободное пространство в пределах вашей видимости на расстояние до 6 м. После достижения 3 уровня, ваш Фейский шаг получает дополнительный эффект в зависимости от вашего времени года; если эффект требует пройти спасбросок, то его Сл будет равна 8 + ваш мод. Харизмы + ваш бонус мастерства:  |
|~|^!Осень |
|~|^Сразу после того, как вы используете фейский шаг, вы можете выбрать до двух видимых вами существ в пределах 2 м, они должны преуспеть в спасброске Мудрости, иначе будут очарованы вами на 1 минуту, либо пока вы или ваши спутники не причините им вред. |
|~|^!Зима |
|~|^Когда вы используете фейский шаг, одно существо по вашему выбору, которое вы можете видеть в пределах 1 м, до того, как вы телепортируетесь, должно преуспеть в спасброске Мудрости, иначе будет испугано вами до конца вашего следующего хода. |
|~|^!Весна |
|~|^Когда вы используете фейский шаг, вы можете коснуться одного согласного существа в пределах 1 м от вас. Это существо затем перемещается, вместо вас, в свободное пространство по вашему выбору, которое вы можете видеть в пределах 6 м от себя. |
|~|^!Лето |
|~|^Сразу после того, как вы используете фейский шаг, каждое существо по вашему выбору, которых вы можете видеть в пределах 1 м от вас, получает урон огнём, равный вашему модификатору Харизмы (минимум 1 урона). |
[img width=400 class="centerme" [https://i.imgur.com/SVQrKin.png]]

<<tabs "[tag[Эльф - описание]]" "Описание эльфов" "$:/state/tab1">>
[img [https://i.imgur.com/lYaBvye.png]]
As a bonus action, you can attempt to bind a creature you can see within 30 feet of you that is no more than one size larger than you. The target must succeed on a Strength saving throw or have their speed be reduced to 0 and they can’t use reactions until the end of your next turn.

//''Amplify.''// This curse lasts for 1 minute and can affect a creature regardless of their size category. At the end of each of its turns, the cursed creature can make another Strength saving throw. On a success, this curse ends.
As a bonus action, you curse a creature that you can see within 30 feet of you to painfully swell until the end of your next turn. For the duration of this curse, the creature has disadvantage on Strength and Dexterity ability checks, and suffers 1d8 necrotic damage if it makes more than one melee or ranged attack during its turn.

//''Amplify.''// This curse lasts for 1 minute. At the end of each of its turns, the cursed creature can make a Constitution saving throw. On a success, this curse ends.
//Prerequisite: 15th level, Order of the Mutant//

As a bonus action, a creature within 30 feet of you must make a Constitution saving throw or become poisoned. At the end of each of its turns, the target can make another Constitution saving throw. On a success, the curse ends.

//''Amplify.''// The cursed creature suffers 4d6 necrotic damage, and suffers this damage again every time it fails its Constitution saving throw to end this curse at the end of its turn.

When a creature you can see within 30 feet is hit with an attack or spell, you can use your reaction to temporarily weaken their resilience against it. Until the end of the turn, the target loses their resistance to the damage types of the triggering attack or spell.

//''Amplify.''// The target instead loses invulnerability to the damage types of the triggering attack or spell, having resis- tance to them until the end of the turn.
As a bonus action, you magnify the adrenaline in the body of a creature within 30 feet of you, making them susceptible to forceful influence. Until the end of your next turn, all creatures have advantage on Charisma (Intimidation) checks directed at the target creature. 

//''Amplify.''// The next Wisdom saving throw the target has to make before this curse ends has disadvantage. Once you’ve amplified this blood curse, you must finish a long rest before you can amplify it again. 
//Prerequisite: 15th level, Order of the Ghostslayer//

As a bonus action, you can choose one creature you can see within 30 feet of you that is charmed, frightened, or possessed. The target creature is no longer charmed, frightened, or possessed.

//''Amplify.''// The creature that charmed, frightened, or possessed the target of your curse suffers 3d6 psychic damage and must make a Wisdom saving throw or be stunned until the end of your next turn.
When a creature you can see within 30 feet of you makes an attack roll, you can use your reaction to roll one hemocraft die and subtract the number rolled from the creature’s attack roll. You can choose to use this feature after the creature’s roll, but before the DM determines whether the attack roll succeeds. The creature is immune if it is immune to blindness.

//''Amplify.''// You apply this curse to all of the creature’s attack rolls until the end of the turn. You roll a new hemocraft die for each affected attack.
When a creature you can see within 30 feet drops to 0 hit points, you can use your reaction to make that creature immediately makes a single weapon attack against a target of your choice within its attack range.

//''Amplify.''// You can first move the cursed creature up to half their speed, and you grant a bonus to the cursed creature’s attack roll equal to your Intelligence modifier (minimum of 1).
//Prerequisite: 18th level, Order of the Lycan //

As an action, you unleash a blood-curdling howl. Each creature within 30 feet of you that can hear you must succeed on a Wisdom saving throw or become frightened of you until the end of your next turn. If they fail their saving throw by 5 or more, they are stunned while frightened in this way. A creature that succeeds on this saving throw is immune to this
Blood Curse for the next 24 hours. You can choose any number of creatures you can see to be unaffected by this howl.

//''Amplify. ''//The range of this curse increases to 60 feet.
As a bonus action, you can mark a creature within 30 feet of you. Until the end of your turn, whenever you deal rite damage to the target, you deal an additional hemocraft die of rite damage.

//''Amplify. ''//The next attack roll you make against the target before the end of your turn has advantage.
As a bonus action, you curse a creature that you can see within 30 feet of you that is concentrating on a spell. That creature has disadvantage on the next Constitution saving throw it must make to maintain concentration before the end of your next turn.

//''Amplify. ''//The cursed creature has disadvantage on all Constitution saving throws made to maintain concentration of spells until the end of your next turn.
//Prerequisite: 18th level, Order of the Profane Soul //

When a creature that isn’t a construct or undead is reduced to 0 hit points within 30 feet of you, you can use your reac- tion to usher their soul to your patron in exchange for power. Until the end of your next turn, your weapon attacks have advantage.

//''Amplify.''// In addition, you regain an expended warlock spell slot. Once you’ve amplified this Blood Curse, you must finish a long rest before you can amplify it again. 
Таблица ниже приводит характеристики самых распространённых доспехов, разделённых на три категории: лёгкие, средние и тяжёлые. Многие воители дополняют доспехи щитом.

//''Владение доспехами.''// Кто угодно может напялить доспех или пристегнуть щит к руке. Но только тот, кто знает, как носить доспех, может носить его эффективно. Ваш класс даёт владение некоторыми видами доспехов. Если вы носите доспех, которым не владеете, вы совершаете с помехой все проверки характеристик, спасброски и броски атаки, использующие Силу или Ловкость, и вы не можете сотворять заклинания.

//''Класс Доспеха (КД).''// Доспех защищает владельца от атак. Надетый доспех (и щит) определяет базовый Класс Доспеха.

//''Скрытность.''// Если в колонке доспеха написано «Помеха», владелец совершает проверки Ловеости (Скрытность) с помехой.

//''Вес. ''//Указанные значения веса используются для доспехов рассчитанных на существо Среднего размера. Доспехи Маленьких существ весят вдвое меньше, а доспехи Больших - вдвое больше. Владение доспехом вдвое уменьшает его вес, пока он надет на вас.

| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | || | | | | || | | | | || | | | | |


Археологи много узнают о давно затерянных империях и культурах, изучая их останки – кости, руины, оставшиеся после них предметы быта и гробницы. Те, кто посвятили свою жизнь археологии, отправляются в разные уголки мира, чтобы исследовать разрушенные города и затерянные подземелья, копаться в земле ради ценных артефактов, которые смогут рассказать историю о монархах и верховных жрецах, войнах и катаклизмах. 

* ''Владение навыками:'' История, Выживание
* ''Владение инструментами:'' [[Инструменты картографа]] или [[инструменты навигатора|Инструменты навигатора]]
* ''Языки:'' Один на ваш выбор
* ''Экипировка:'' Контейнер для карт и свитков содержащий карту затерянного города или подземелья, шахтёрский фонарь, кирка, комплект одежды исследователя, лопата, средняя палатка, одна безделушка с последних раскопок и кошель с 25 см

!!!Искатель
Прежде чем встать на путь искателя приключений, вы провели большую часть взрослой жизни, копаясь в пыли в поисках реликвий, обладающих весьма сомнительной ценностью. Вам удалось продать несколько интересных экземпляров, что позволило вам купить хорошее снаряжение для начала пути приключенца. Один из предметов представляет для вас особую эмоциональную ценностью. Выберите его таблицы ниже или бросьте кубик, чтобы определить случайно.

| !к8 |!Предмет | !к8 |!Предмет |
| 1 |Кнут | 5 |Молоток |
| 2 |Ломик | 6 |Сигнальный фонарь |
| 3 |Лопата | 7 |Шест (3 м) |
| 4 |Медальон | 8 |Шляпа |

!!!Умение: Исторические знания
Когда вы входите в руины или подземелье, вы можете с уверенностью определить их первоначальное предназначение и создателей, если они являются представителями дварфов, эльфов, людей, юань-ти и других известных рас. Также вы можете прикинуть стоимость предмета, которому более века.

!!!Персонализация
Лишь немногие археологи смогут удержаться от желания исследовать затерянные руины или подземелья, особенно если дело касается легенд и слухов о несметных сокровищах чародеев, военачальников или королевских семей. Некоторые археологи гонятся за славой или богатством, другие считают себя некими светочами, у которых есть шанс представить миру забытое прошлое или скрыть от сообщества сокровище, которое не должно оказаться в плохих руках. Вне зависимости от мотивации, археологи сочетают в себе качества умудрённого опытом историка, смешанного с отчаянным героизмом и неудержимой тягой к охоте за сокровищами. 

| !к8 |!Черта характера |
| 1 |Мне нравятся хорошие загадки и тайны.  |
| 2 |Я храню всё и никогда ничего не выбрасываю. |
| 3 |Слава для меня важнее, чем деньги. |
| 4 |Я не чураюсь забрать что-то у мёртвого.  |
| 5 |В пыльной гробнице я чувствую себя счастливее, чем в самом сердце цивилизации.  |
| 6 |Ловушки меня не беспокоят. Меня беспокоят идиоты, которые их активируют. |
| 6 |Ловушки меня не беспокоят. Меня беспокоят идиоты, которые их активируют. || 6 |Ловушки меня не беспокоят. Меня беспокоят идиоты, которые их активируют. |

| !к6 |!Идеал |
| 1 |''Открытия.'' Я хочу быть первым, кто сумеет найти затерянную цивилизацию. |
| 2 |''Дистанция. ''Ни одна культура не должна вмешиваться в дела другой, даже если последним нужна помощь. |
| 3 |''Знания. ''Познавая другие культуры и расы, мы познаем себя.  |
| 4 |''Сила.'' Обычному народу требуется сильный лидер. Я сделаю все возможное, чтобы дать им это.  |
| 5 |''Защита.'' Я должен сделать все, что в моих силах, чтобы спасти общество от вымирания. |
| 6 |''Безразличие. ''Жизнь жестока. Зачем кого-то спасать, если он все равно рано или поздно помрёт? |

| !к6 |!Привязанность |
| 1 |Мой учитель дал мне дневник, полный знаний и древней мудрости. Его потеря уничтожит меня. |
| 2 |Однажды пожив в первобытного племени, я хочу вернуться и посмотреть, что с ними стало. |
| 3 |Много лет назад трагедия настигла членов изолированного общества, с которыми я был в хороших отношениях. Я не забыл их. |
| 4 |Я хочу узнать больше о культуре определённых гуманоидов, которая очень привлекает меня.  |
| 5 |Я хочу отомстить за клан, племя, королевство или империю, которое было уничтожено.  |
| 6 |У меня с собой есть безделушка, которая является ключом к разгадке тайны затерянной цивилизации.  |

| !к6 |!Слабость |
| 1 |На море меня сильно укачивает.  |
| 2 |Я разговариваю сам с собой и не завожу друзей.  |
| 3 |Я верю, что мой интеллект намного выше, чем у тех народов, которые я изучаю. Я уверен, что смогу многому их научить. |
| 4 |Я подцепил очень вредные привычки, живя среди орков, гоблинов или людоящеров. |
| 5 |Я постоянно жалуюсь. |
| 6 |Я ношу племенную маску и никогда её не снимаю.  |
[img  class="centerme" [https://i.imgur.com/hdpD9dc.png]]

|!Особенность |!Описание |
|^Размер |^Рост людоящеров-аспидов варьируется между 90 и 120 см, а вес от 30 до 45 кг. Ваш размер — Маленький. |
|^Увеличение характеристик |^Значение вашей Харизмы увеличивается на 2. |
|^ |^ |
|^ |^ |
|^ |^ ||^ |^ |

Персонаж может выпить одно зелье, пока находится под действием другого, или попытаться смешать несколько зелий в одной ёмкости. В этом случае, необычные ингредиенты, используемые в создании зелий, могут привести к непредсказуемым последствиям. 

Когда персонаж смешивает две зелья вместе, Мастер совершает бросок к100 по таблице «Смешивание зелий». 

!!!Смешивание зелий
|||
|||
|||
|||
|||
|||

Многое из того, что ваш персонаж способен сделать в игре, зависит от его шести характеристик: ''Силы'', ''Ловкости'', ''Телосложения'', ''Интеллекта'', ''Мудрости ''и ''Харизмы''.

Вы генерируете шесть значений характеристик случайно. Бросьте четыре к6 и запишите сумму трёх наибольших результатов. Проделайте это ещё пять раз, чтобы у вас получилось 6 чисел. Если вы хотите сэкономить время или вам не нравится идея случайного определения значений характеристик, вы можете использовать следующие числа: 15, 14, 13, 12, 10, 8.

Теперь запишите каждое из шести полученных чисел рядом с каждой из шести характеристик вашего персонажа, чтобы присвоить значения Силе, Ловкости, Телосложению, Интеллекту, Мудрости и Харизме. После выбора расы значения характеристик изменятся.

После распределения значений характеристик определите модификаторы характеристик, используя таблицу ниже. Для определения модификатора характеристики без обращения к таблице вычтите 10 из значения характеристики и разделите результат на 2, округляя до меньшего целого.

| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | || | | | |
| | | | |
Любое оружие имеет обозначение размерной категории, указывающее размер существа, для которого это оружие предназначено.

Использование оружия неподходящего размера:

* Вы не можете использовать оружие, отличающееся от вашего размера больше чем на одну размерную категорию
* Лёгкое оружие на размер больше считается для вас одноручным. Вы не можете пользоваться лёгким оружием на размер меньше.
* Одноручное оружие на размер больше считается для вас двуручным. Одноручное оружие на размер меньше считается для вас лёгким.
* Вы не можете пользоваться двуручным оружием на размер больше. Двуручное оружие на размер больше считается для вас одноручным.
* Атаки оружием, размер которого отличается от размера владельца, совершаются с помехой. Вы можете избавиться от этого минуса, воспользовавшись услугами ремесленников, чтобы подогнать оружие под свой размер. Стоимость этой работы составляет от 5 до 20 процентов от рыночной стоимости предмета.
* Кость урона оружия изменяется с его размером. Таблица ниже дает значения урона для оружия от Крохотного до Огромного.

|  |  |  |  |  |
|  |  |  |  |  |
|  |  |  |  |  |
|  |  |  |  |  |
|  |  |  |  |  |
|  |  |  |  |  |
|  |  |  |  |  |
|  |  |  |  |  |
|  |  |  |  |  ||  |  |  |  |  |
|!Название |!Цена |!Урон | !Крит. | !Дальн. | !Вес|!Свойства |
| | | | | - | - | |
| | | | | - | - | |
| | | | | - | - | |
| | | | | - | - | |
| | | | | - | - | |
| | | | | - | - | |
| | | | | - | - | |
| | | | | - | - | |
| | | | | - | - | || | | | | - | - | |
| | | | | - | - | |
!!! [img[3.png]] Путь кенсэя
Выберите два оружия из таблицы ниже, они становятся для вас монашеским оружием. Когда вы достигаете 6, 11 и 17 уровня в этом классе, вы можете выбрать ещё одно оружие из той же таблицы.

''Оружие кенсея:''

* Боевой цеп
* Глефа
* Длинный лук
* Катана
* Катар
* Кнут
* Композитный лук
* Короткий лук
* Легкий арбалет
* Легкий многозарядный арбалет
* Полэкс
* Ручной арбалет
* Фальшион

|!Древковое |!Дробящее |!Клинковое |!Контактное |
|—  |—  |—   |—  |
|—  |—  |—   |—  ||—  |—  |—   |—  |
|!Метательное |!Стрелковое |!Топоры |!Цепы |
|—  |—  |—   |—  |
|—  |—  |—   |—  |
!!Черты и очки навыков более не привязаны к умению Улучшение характеристик.

---

!!!Увеличение характеристик
''Изменено на (для всех классов, кроме воина и плута):''

При достижении 3, 6, 9, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

''Изменено на (для воина):''

При достижении 3, 6, 8, 10, 12, 14 и 16 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

''Изменено на (для плута):''

При достижении 3, 6, 8, 10, 12 и 15 уровней вы можете повысить значение одной из ваших характеристик на 1, а при достижении 19 уровня - на 2. Как обычно, значение характеристики при этом не должно превысить 20.

---

!!![[Черта|Черты]]
''Добавлено (для всех классов, кроме воина и плута):''

Черты отражают дарование или обучение, дающее персонажу особые знания. Они воплощают тренировки, опыт и способности, превышающие те, что даёт класс.

При достижении 4, 8, 12 и 16 уровней вы можете взять черту. Каждую черту можно брать только один раз, если в её описании не сказано обратное.

Для получения черты вы должны выполнять её требования. Если вы перестали выполнять требования черты, вы не можете её использовать, пока снова не начнёте выполнять требования.

''Добавлено (для воина):''

При достижении 4, 6, 8, 12, 14 и 16 уровней вы можете взять черту.

''Добавлено (для плута):''

При достижении 4, 8, 10, 12 и 16 уровней вы можете взять черту.

---

| !Кроме воина и плута |<|! | !Воин |<|! | !Плут |<|
|!Ур |!Бонус |! |!Ур |!Бонус |! |!Ур |!Бонус |
| 1 | - |! |
| 1 | - |! |
| 1 | - |! |
| 1 | - |! || 1 | - |! |



http://j.d.simplemobile.tiddlyspot.com/

*Mobile layout that applies to narrow screens, with many options
* {{Style!!macro2}}
.tc-subtitle {display:none;}

<style>
.centerme {
display: block;
margin-left: auto;
margin-right: auto }
}
</style>
https://tiddlywiki.com/#Manually%20installing%20a%20plugin
https://docs.google.com/viewer?a=v&pid=forums&srcid=MTEyNjM4NzE3NzI3NzEyNTIyMDMBMTU1MDM5NTU0Mzc2NTkxNjg1ODUBNkFKdEFhaDZBd0FKATAuMQEBdjI&authuser=0
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAzCAYAAADVY1sUAAANg0lEQVRoge2ae5RV1X3HP+fOnTtP5sWAwAzDKw4iGCghGEy6ooSHj2IMSITio7qMCGhIXMJqTc1q0lRbY2weTYzEmsSIURONwWoarM9UkSa+UEYEMwPOixkGZpi5zJ25c8/e/WM/zt7nXmvXav/oHz1rnTlzzvnt3/59f++9z4X/P/5vHQG/2Pu/wkiuqJkKnAcsAmYD04F6oAIIgDTQBxwG3gX+ADwX/PZEu2Jg/gTmxmEeODdCP5NAArluCQDJ/6HwTcBVwDrgzMJE+hpQB9QBzcAK+3plXQvwEHB/8JsTR5ASAhkTXioA3rMgAsV/yyISZAICoa4I5Mra+cBXgDVAAqAnK3jweI6b+nNwKoRTOcgCQgtQBBQD5UmoLOKuuiR/Pr6Y01IJM5EAHgX+Lnjq2JtWAa6RAheMABEgL/9TF4jUmks4PPNVKlfWTgTuAK4EghEh+Xpnlts7R6E/F1OAmVRAEChXkIHSNkQC1SW5paGEWxtLKU0EZsL7ge3Brp5eEhJE4PO0FpPIKz6tpXvklZgBpO+meqA8v24tsAOoyYSSdYcz7Do8CqMatGUuHOwxoQ1/FywoQUsCPjeznJ0zKygrCgAGgOuCX3f/IhLeUay2lLzyXA3k4T0xzeOZT15QnwK+DWwC2NGTZWNLGjLaAjIRYy6ARL7AwvVvB4SMPS+DHWfV8IXJpebJD4Gtwa86s5F8kbzyL5ZqIA+9FAOgBUEgL5xQifLbFaNCUvpWGtpHHIvJSKaEK/AHCGmsbf53wbsKAZhWTmZ+DaXKOruBNcGjHWkbBtpC8pplACSQQs0rJEjtFlIgL5xQrhmsODISUvriCTgyDIQgQxXEQkIo1LhQQKjGIrB87CmEEl5oWimjOQUgHJ5CQGuasmeP0jqcA5Xldss1jeWKTxjR6SOhglAz1qe8aEIKeAJYsi+dY/rvjsNgVr0P9SliwrlnXHDvWex/+8zQhhHNwCiznu3mraEswBJgl1w7LeXxtEBCbQ0RqjMUoGJiaftIyPyXj6tUajQgHE3GhYtbwBVKOpqMv48DDEUky6kxPvpCF+0qJj8DfEeB1vJGFtGDtIDys5MuAzaNCknTy32QzkXazRM0rk3jbi5o8zwXCW+t4bha6D7X8qDHDo7R9HwnI0rJ18t1s9ZZPvpI2hsJcnXDFFSWoPT1fuiPEoWNn+iBvb9gajkra4v5Ws8I/UczfnA75Dpw1P24JBtPK+PMCtVc9GVD/rYnA30jDr2ZJ4DjI5T9Rw9yyWSAu+WG2S8GP3unKwJiNKrSyTeBmh91DUNr2uFmknaB+/pinvrEBAAC2c/WrlO+8G7+l0Aqwe8+OYlPTa4gfnwdeLMvw4Ln2qP6JJ3xh/q5t6GCa5uqaoBvIsQGMzZhXECumboQWJ8JBde93uckAO3bMuf4uTZ/MbR9fIJvgbjbue6UgrbljQVBmGN+fRltK5ogKSN3lDk77xf2dpLJCYD18qq5C30gKvq/CgTXHjzpxEXoxU8UiEKBWDaF6VUlVojAi5VQ+32UKN44t5Hp1RH9zoMnaH7mMHOfOcw/vX2MbE4F7/TqUkYvbYZkoMbbmMvB0BibW46hXeirHhD5+RnTgFWZUPBgS7/O8zprGBAmk0jB9MmljH52hgfCBxJGmhSAzLH59Grm15dZ2i2vdHL5yx0cah+k5f2T3Pj7Lkr+tdWCSSWLeHLJlPzULsb4yb6jxiqrGDw4QwMJAS4HEnccHoSRXKRNzzWUKz2weAJt500llUyQd7huZdwiDCGUbJtTa8meauvnBy3H9LswGtOT5ua9nZZu2dQqKE5EfIyCTo3yrfeOK/nh6si1YAPA3/zxpJP7jY8q97hkWiWjqz/ChtPr7ETZXMhLnUMxi+ScVKutUlnE9OrIGhft6/FriK1hId/b3+tZ5Yszqx05IkXdeuCYYXcZQEJefsZUYM7RkRx0p32NOhV8WW0JqWSRFealzkFKHm7hjRPDjkXiVV5Nvra+FO/oSeva4bihaXVEyB+6I+WcP7nSAeFYpWOAnkwWoJnBgzMTwFKAX3af0j5tqqv0AelG8MhAhrN2v8enfvMeZMZiXa70J9PV+dzaCMi+3nREYzKgcZtQzf9mX9rSN1aW+HFnXSzHY+0nDdl5SdQam7uOplXTh2nP3S5WsqNriPu6hnjtiBkstTtF1TWQUk0UvQYEC8aXW5r06JiiMezjhVLCwaFRSz+7rlyDdpmq2nJ39wCbmicALEii1tC09WuL2OLoL2T2He73FO+14fa525FG48elIpd8sy+tLeGs3mzBVG3+3v6oqKaKizRPGSvI8FavtdzsJDALgP5MpE0jlHtIV2tmTVDAInZSH4ynBMdV/XWJBAFFTg8FRBaUMeDHLZCZSUCV5uFsJISnpQKC4Lzz+ikdI56A0hse2E7hg+cJ4kp0ulyPdsgmmpokUIWUkB1ziByJXSBxoX1kSsgPsYgfR5JCSsqziMszcGSUEApBUSIxLtrXCmOoPwyEdnFXe4GxSAxk4AxVizPH8t5c6r3rrlY2s8Ei3GER4yQwSBBUUQTkQo+hHWEHmQCNGHqTWm0bWoHZtskDS0wx9hrkA7ENbEyeREBRIgGQTgLHgCqKEzA65mjov3CjeJzEhbSY1cuW3kHmTa4B4JzGWt/nCyhs+aRx9vX7xwe1RaTVoZ200tan/iTwR2AWNaUwOPzhgpuL9m9fezpruZoLJAMjzgINohSdN4+6jk9FHj84opcPokA81drlQGsCOAiw2BQet4nz2oic0+Q51duznPDf68r9WJvti5g3pTbiZ5YJbkMYhiyZWm/pXznSq1zeyJLTZxiytN5a7t0EalecaxpqnFY99K/eOjtq5xFhLNjJb7vDkN++2012LNpS3b54RrSuMXy1cIyvYF5D1Jg+3trrNJXCk2l903hD9kYCeBbgkqY6ot7HtN+OZeKttHkft4h0aJzr84e6LdmWRTOgLKk0ndOW1nPv/sxcS3diaJgnWzryG0atyItnTjSkzyWCb+xqB945raIEGmojIaUzWBYAYSyWl5Ec7Rp3CAUrd79l6Zrqq9mz9mwoK47ScSi494KPsnxuk6W784W3HRDSV2pTPRMrywAOUdXcmtQZZCfwjTvOamR7W6/OnB+QtdznxKqwRGnZjJFOz9Z7kl+++h6XfuwjAHxi1mRGt63ihYNdnBzJsnR2A3XjouZyf0cft794IGbx6J9vLZxpbh4GSOhCuBMQN5zVqLSU0wForsYKuQKJIG+z2vFnr50PWfvIHp5++4ilTqWKWT5vGpcuOt0D8f6xAebd+7TDw/DTi7ayFJv/ZIaekPs0EElw6yOHgSfKipPcuGQW/o6gm1VkXrC39g+xv6OP/R19tPan8Tfl4ktmwYqfPs8lP/439h7qIn68f2yAv378Zabd/igMnopiVuqVpt4c/PJ5Z1KaKgZ4gqrmNoCALV8DJPK29R8Dfp8ZywXld/0LDAzHtJ3fSsTs7TwzFd2xlCX1i6itcl4HEOv5XBetqyBzy2WUpoolsIiq5teURTTq4C8feBX4eVlxkgf+bKGTbt0gN/djWkNmRZlTq7t4xnLvbX1yrBrPRK7bWqtKxUdnxAc+d46xxs+DG77/moGb8AogbAMGNsxtYsHCGbGJtX9KvU9lY8TsgYlYXMQynd0nMy4ifWFdcN5uTFQGlixuZsP8maC+Zm3zd+OFtMIEN9/Xhf4y9crqs2GSu4Mhyds5lKH/icHbXY8LZIBKJ3bcuDPal/mxKCVMruW5yz5t5N4UbPpul/5yoIG47iEEwZfvfQj4YUlxks5rl0NNacwFRGFQnlXcqu1o2d1pd3fjbUC7NcrcS6guo3PLxZQol7onuO7bD0X9l7VIfGIBsBV4dkp1Bfuvvwhqyh2hTYcb+gK44z2eMiaw/OA4Mu/tFzAJ1eW0bF3NlJpKUF3IFz039oG4lVwQ3Hh3FlgF7DlzYg0dX7oEJtVEAllGMbfywBTQdvzefCWL9Wa2PjXU0rZ9LXMm1QLsAVYF196ZjQBTwCKu/0pBsOX7w+hvdw01lWRuXsPis5uj4DMCSOkL736Bsi1K6Luc+XznFlX7FUyB++Q5Z5D5q/VMH18N+ltmcM2dwxF40yLFgRTQWrD5u2ltmXtKU8XsvWIZO6+7MHI1Y0XjyyLUfZYjoKd5WXguVwE1FTy4+WL+/eoLKE2lAO4BVgXX3JH2PnUYl9VHwIYbokLlLmed2gYSueNL9gcDI9kxvvLM69z19KuQznh1zB7ub0rcDYO8zQY9Z3mKrSs+zt+fv8gAGAA2Blf/wyN+ARWovWtlDfnYTzSQ9ZsUI1EAjDcZyB/dNBH1VesKIBjNjvGDve9w09534EAH0a5IfDyxLsGqEWY38o9L5rLx7DmUlaTMiJ8B24Krbu/1fywU4yEl8vGfalafv76AhuKD/BZC/vPNC4BbcH5Uc2zwFE8eaGfXwXZ+1X0cuk/AyeEojoqKoKoMptSxetJ4Vs2eykVnNDGhyi5XBerHCbcFV932hjevZ1FfPPlrA2TtRj1Aa9LbNyqgReeZ/PH2JtTPnNYDc/KJQXcMkCjwPUUdB4AHgfuDK287EnmFEs9z8/gRgHz8fgD+E59IQsImx6FsAAAAAElFTkSuQmCC
https://tiddlytools.com/#MoveablePanelPlugin